云端

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. 获取源令牌

  1. 创建一个 Better Stack 账户
  2. 转到 遥测 > 数据源 并创建一个新源
  3. 复制 源令牌

2. 设置环境变量

.env
BETTER_STACK_API_KEY=your-source-token-here
在 Better Stack 的控制面板中,这个凭据称为 source token。为保持与各适配器一致,evlog 将配置字段命名为 apiKey。旧版 sourceToken 字段在下一个大版本发布前仍然可用。

3. 将排水器接入你的框架

// server/plugins/evlog-drain.ts
import { createBetterStackDrain } from 'evlog/better-stack'

export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('evlog:drain', createBetterStackDrain())
})

就是这样!你的日志现在会显示在 Better Stack 中。

配置

适配器会按照优先级从多个来源读取配置(优先级从高到低):

  1. 覆盖项 传递给 createBetterStackDrain()
  2. 运行时配置 位于 runtimeConfig.betterStack(仅限 Nuxt/Nitro)
  3. 环境变量BETTER_STACK_*

环境变量

变量描述
BETTER_STACK_API_KEYBetter Stack 源令牌(必需)
BETTER_STACK_ENDPOINT自定义摄取端点

运行时配置(仅限 Nuxt)

nuxt.config.ts 中进行类型安全的配置:

nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    betterStack: {
      apiKey: '', // Set via BETTER_STACK_API_KEY
    },
  },
})

覆盖选项

直接传递选项以覆盖任何配置:

server/plugins/evlog-drain.ts
const drain = createBetterStackDrain({
  apiKey: 'my-key',
  timeout: 10000,
})

完整配置参考

选项类型默认值说明
apiKeystring-Better Stack 源令牌(必需)
sourceTokenstring-已弃用。 请改用 apiKey
endpointstringhttps://in.logs.betterstack.com摄取端点
timeoutnumber5000请求超时时间(毫秒)

日志转换

evlog 广泛事件通过 toBetterStackEvent() 进行转换:

  • 时间戳timestamp 映射为 dt(Better Stack 期望的 ISO-8601 时间戳字段)
  • 所有其他字段:原样展开到事件正文中

Better Stack 接受任意 JSON 字段,因此你所有的广泛事件上下文(level、service、action、用户数据等)都会自动可搜索。

在 Better Stack 中查询日志

Better Stack 提供强大的日志搜索界面:

  • 实时追踪:实时流式传输日志
  • 全文搜索:跨所有字段进行搜索
  • 结构化查询:按 level:errorservice:my-app 或任何广泛事件字段过滤
  • 仪表板:从你的广泛事件数据创建自定义仪表板
  • 告警:基于日志模式或阈值设置告警

故障排除

缺少 apiKey 错误

Console
[evlog/better-stack] Missing apiKey. Set 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!,
})

下一步