云端
Better Stack 适配器
将广泛事件发送到 Better Stack(以前称为 Logtail)进行日志管理、告警和仪表板。通过环境变量实现零配置设置。
Better Stack 是一个以 DX 为核心的日志管理平台,具备强大的搜索、告警和仪表板功能。evlog Better Stack 适配器会将你的广泛事件发送到 Better Stack 的 HTTP 摄取 API。
添加 Better Stack 排水器适配器
安装
Better Stack 适配器随 evlog 一起捆绑提供:
src/index.ts
import { createBetterStackDrain } from 'evlog/better-stack'
快速开始
1. 获取源令牌
- 创建一个 Better Stack 账户
- 转到 Telemetry > Sources 并创建一个新源
- 复制 Source Token
2. 设置环境变量
.env
BETTER_STACK_API_KEY=your-source-token-here
在 Better Stack 的仪表板中,这个凭据被称为 source token。evlog 将配置字段命名为
apiKey,以便在各个适配器之间保持一致。旧版 sourceToken / BETTER_STACK_SOURCE_TOKEN 在下一个重大版本发布前仍然可用。3. 将排水器接入你的框架
// server/plugins/evlog-drain.ts
import { createBetterStackDrain } from 'evlog/better-stack'
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('evlog:drain', createBetterStackDrain())
})
// lib/evlog.ts
import { createEvlog } from 'evlog/next'
import { createBetterStackDrain } from 'evlog/better-stack'
export const { withEvlog, useLogger, log, createError } = createEvlog({
service: 'my-app',
drain: createBetterStackDrain(),
})
import { createBetterStackDrain } from 'evlog/better-stack'
app.use(evlog({ drain: createBetterStackDrain() }))
import { createBetterStackDrain } from 'evlog/better-stack'
app.use(evlog({ drain: createBetterStackDrain() }))
import { createBetterStackDrain } from 'evlog/better-stack'
await app.register(evlog, { drain: createBetterStackDrain() })
import { createBetterStackDrain } from 'evlog/better-stack'
app.use(evlog({ drain: createBetterStackDrain() }))
import { createBetterStackDrain } from 'evlog/better-stack'
EvlogModule.forRoot({ drain: createBetterStackDrain() })
import { createBetterStackDrain } from 'evlog/better-stack'
initLogger({ drain: createBetterStackDrain() })
就是这样!你的日志现在会显示在 Better Stack 中。
配置
适配器会按照优先级从多个来源读取配置(优先级从高到低):
- 传递给
createBetterStackDrain()的 覆盖项 - 运行时配置,位于
runtimeConfig.betterStack(仅限 Nuxt/Nitro) - 环境变量(
BETTER_STACK_*或NUXT_BETTER_STACK_*)
环境变量
| Variable | Nuxt alias | Description |
|---|---|---|
BETTER_STACK_API_KEY | NUXT_BETTER_STACK_API_KEY | Better Stack 源令牌(必需) |
BETTER_STACK_ENDPOINT | NUXT_BETTER_STACK_ENDPOINT | 自定义摄取端点 |
运行时配置(仅限 Nuxt)
在 nuxt.config.ts 中进行类型安全的配置:
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
betterStack: {
apiKey: '', // 通过 NUXT_BETTER_STACK_API_KEY 设置
},
},
})
覆盖选项
直接传递选项以覆盖任何配置:
server/plugins/evlog-drain.ts
const drain = createBetterStackDrain({
apiKey: 'my-key',
timeout: 10000,
})
完整配置参考
| Option | Type | Default | Description |
|---|---|---|---|
apiKey | string | - | Better Stack 源令牌(必需) |
sourceToken | string | - | 已弃用。 请改用 apiKey |
endpoint | string | https://in.logs.betterstack.com | 摄取端点 |
timeout | number | 5000 | 请求超时时间(毫秒) |
日志转换
evlog 广泛事件通过 toBetterStackEvent() 进行转换:
- 时间戳:
timestamp映射为dt(Better Stack 期望的 ISO-8601 时间戳字段) - 所有其他字段:原样展开到事件正文中
Better Stack 接受任意 JSON 字段,因此你所有的广泛事件上下文(level、service、action、用户数据等)都会自动可搜索。
在 Better Stack 中查询日志
Better Stack 提供强大的日志搜索界面:
- 实时追踪:实时流式传输日志
- 全文搜索:跨所有字段进行搜索
- 结构化查询:按
level:error、service:my-app或任何广泛事件字段过滤 - 仪表板:从你的广泛事件数据创建自定义仪表板
- 告警:基于日志模式或阈值设置告警
故障排除
Missing apiKey error
Console
[evlog/better-stack] Missing apiKey. Set NUXT_BETTER_STACK_API_KEY env var or pass to createBetterStackDrain()
请确保已设置环境变量并在添加后重启服务器。
401 未授权
你的源令牌可能无效或被吊销。请在 Better Stack 仪表板的 Telemetry > Sources 中生成新的源令牌。
403 禁止访问
源可能被归档或删除。请在 Better Stack 中创建一个新源。
直接 API 使用
对于高级用例,你可以使用更低层的函数:
server/utils/better-stack.ts
import { sendToBetterStack, sendBatchToBetterStack } from 'evlog/better-stack'
// 发送单个事件
await sendToBetterStack(event, {
apiKey: process.env.BETTER_STACK_API_KEY!,
})
// 批量发送多个事件
await sendBatchToBetterStack(events, {
apiKey: process.env.BETTER_STACK_API_KEY!,
})