云端

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. 转到 Telemetry > Sources 并创建一个新源
  3. 复制 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())
})

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

配置

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

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

环境变量

VariableNuxt aliasDescription
BETTER_STACK_API_KEYNUXT_BETTER_STACK_API_KEYBetter Stack 源令牌(必需)
BETTER_STACK_ENDPOINTNUXT_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,
})

完整配置参考

OptionTypeDefaultDescription
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 或任何广泛事件字段过滤
  • 仪表板:从你的广泛事件数据创建自定义仪表板
  • 告警:基于日志模式或阈值设置告警

故障排除

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!,
})

下一步