适配器
Axiom Adapter
将广泛事件发送到 Axiom 以进行强大的查询、仪表板和告警。零配置设置,使用环境变量和自动批处理。
Axiom 是一个具有强大查询能力的云原生日志平台。evlog Axiom 适配器会将你的广泛事件直接发送到 Axiom 数据集。
Prompt
添加 Axiom 排水适配器以将 evlog 广泛事件发送到 Axiom。
1. 确定我正在使用哪个框架并遵循其 evlog 集成模式
2. 如果尚未安装,请安装 evlog
3. 从 'evlog/axiom' 导入 createAxiomDrain
4. 将 createAxiomDrain() 连接到我的框架的排水配置
5. 在 .env 中设置 AXIOM_TOKEN 和 AXIOM_DATASET 环境变量
6. 通过触发请求并检查 Axiom 数据集来测试
适配器文档: https://www.evlog.dev/adapters/axiom
框架设置: https://www.evlog.dev/frameworks
安装
Axiom 适配器随 evlog 一起打包提供:
src/index.ts
import { createAxiomDrain } from 'evlog/axiom'
快速开始
1. 获取你的 Axiom 凭证
- 创建一个 Axiom 账户
- 创建一个用于日志的数据集
- 生成一个具有写入权限的 API 令牌
2. 设置环境变量
.env
AXIOM_TOKEN=xaat-your-token-here
AXIOM_DATASET=your-dataset-name
3. 将排水连接到你的框架
// server/plugins/evlog-drain.ts
import { createAxiomDrain } from 'evlog/axiom'
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('evlog:drain', createAxiomDrain())
})
import { createAxiomDrain } from 'evlog/axiom'
app.use(evlog({ drain: createAxiomDrain() }))
import { createAxiomDrain } from 'evlog/axiom'
app.use(evlog({ drain: createAxiomDrain() }))
import { createAxiomDrain } from 'evlog/axiom'
await app.register(evlog, { drain: createAxiomDrain() })
import { createAxiomDrain } from 'evlog/axiom'
app.use(evlog({ drain: createAxiomDrain() }))
import { createAxiomDrain } from 'evlog/axiom'
EvlogModule.forRoot({ drain: createAxiomDrain() })
import { createAxiomDrain } from 'evlog/axiom'
initLogger({ drain: createAxiomDrain() })
就是这样!你的日志现在会显示在 Axiom 中。
配置
该适配器从多个来源读取配置(优先级从高到低):
- 传递给
createAxiomDrain()的 覆盖项 - 运行时配置 在
runtimeConfig.axiom(仅限 Nuxt/Nitro) - 环境变量(
AXIOM_*或NUXT_AXIOM_*)
环境变量
| 变量 | Nuxt 别名 | 描述 |
|---|---|---|
AXIOM_TOKEN | NUXT_AXIOM_TOKEN | 具有写入权限的 API 令牌 |
AXIOM_DATASET | NUXT_AXIOM_DATASET | 要写入日志的数据集名称 |
AXIOM_ORG_ID | NUXT_AXIOM_ORG_ID | 组织 ID(用于个人访问令牌) |
AXIOM_EDGE_URL | NUXT_AXIOM_EDGE_URL | 边缘部署的写入/查询基础 URL |
AXIOM_URL | NUXT_AXIOM_URL | API 基础 URL(遗留/默认写入端点) |
在 Nuxt/Nitro 中,请使用
NUXT_ 前缀,以便通过 useRuntimeConfig() 获取这些值。在其他所有框架中,请使用无前缀的变量。运行时配置(仅限 Nuxt)
通过 nuxt.config.ts 进行类型安全的配置:
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
axiom: {
token: '', // 通过 NUXT_AXIOM_TOKEN 设置
dataset: '', // 通过 NUXT_AXIOM_DATASET 设置
},
},
})
覆盖选项
直接传递选项以覆盖任何配置:
server/plugins/evlog-drain.ts
const drain = createAxiomDrain({
dataset: 'production-logs',
timeout: 10000,
})
完整配置参考
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
token | string | - | API 令牌(必需) |
dataset | string | - | 数据集名称(必需) |
orgId | string | - | 组织 ID(用于个人访问令牌) |
edgeUrl | string | - | 写入边缘 URL。如果未提供路径,则使用 /v1/ingest/{dataset};自定义路径将按原样使用(去除尾部斜杠)。与 baseUrl 互斥 |
baseUrl | string | https://api.axiom.co | API 基础 URL(/v1/datasets/{dataset}/ingest),与 edgeUrl 互斥 |
timeout | number | 5000 | 请求超时时间(毫秒) |
在 Axiom 中查询日志
evlog 发送结构化广泛事件,非常适合 Axiom 的 APL 查询语言:
Axiom APL 查询
// 查找慢速请求
['your-dataset']
| where duration > 1000
| project timestamp, path, duration, status
// 按端点统计错误率
['your-dataset']
| where level == "error"
| summarize count() by path
| order by count_ desc
// 随时间统计请求量
['your-dataset']
| summarize count() by bin(timestamp, 1h)
| render timechart
故障排除
缺少数据集或令牌错误
控制台
[evlog/axiom] 缺少数据集或令牌。请设置 AXIOM_DATASET 和 AXIOM_TOKEN
请确保已设置环境变量并在添加后重新启动服务器。
401 未授权
你的令牌可能无效或已过期。在 Axiom 仪表板中生成一个具有 写入 权限的新令牌。
403 禁止(使用个人访问令牌)
个人访问令牌需要组织 ID:
.env
AXIOM_ORG_ID=your-org-id
直接 API 使用
对于高级用例,你可以使用更低层级的函数:
server/utils/axiom.ts
import { sendToAxiom, sendBatchToAxiom } from 'evlog/axiom'
// 发送单个事件
await sendToAxiom(event, {
token: 'xaat-xxx',
dataset: 'logs',
})
// 批量发送多个事件
await sendBatchToAxiom(events, {
token: 'xaat-xxx',
dataset: 'logs',
})
下一步
- OTLP 适配器 - 通过 OpenTelemetry 协议发送日志
- PostHog 适配器 - 将日志发送到 PostHog
- 自定义适配器 - 构建你自己的适配器
- 最佳实践 - 安全性和生产环境提示