尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
你的 agents 一直在记录凭证:将 Elastic Agent Builder 内置的 OTel traces 转换为 Kibana 中的 token 成本仪表板(TaoToken 统一 Key
1. 你的 Agent 一直在记账只是没人看账本Elastic Agent Builder 从正式发布那天起就默认把每一次对话轮次写成完整的 OpenTelemetry trace。LLM 请求、工具执行、token 计数全部落到 Elasticsearch 的 data stream 里用 ES|QL 就能查。问题在于绝大多数团队只在出事之后才翻这些数据——某次对话悄悄烧掉整月预算或者某个工具调用慢得离谱都是事后才发现。这篇要解决的就是这件事把 Agent Builder 内置的 OTel traces通过 TaoToken 统一 Key/API 通道接进来在 Kibana 里搭一个能看 token 成本的仪表板再配一条超阈值告警。适合已经在用 Elastic Agent Builder、手里有 Kibana space、但还没把 trace 数据变成运营指标的人。读完你能拿到可复制的config.toml、settings.json骨架OTel exporter 配置片段以及在 Kibana 里验证 traces 落库和成本字段的具体检查动作。先说清楚 trace 里有什么。一次 agent 运行就是一个 trace可以理解成一次对话轮次的记录凭证。每个 LLM 请求、工具调用、agent 操作都是一个独立 span。span 类型大致分四层invoke_agent name的 CHAIN 覆盖整轮生命周期AGENT 是单次 agent 执行chat model是一次 LLM 请求带模型、延迟、token 数量execute_tool toolName是工具调用带参数、耗时、结果。数据写进每个 Kibana space 专属的 data stream默认 space 对应traces-agent_builder.otel-default。查询时直接指定索引别用通配符否则会把不同 space 的数据混在一起。2. 用 TaoToken 统一 Key 打通 OTel 出口Agent Builder 自己会产 trace但如果你想让 trace 里的模型调用走统一通道、方便按 Key 维度对账就需要一个统一的 API 入口。TaoToken 在这里的角色是统一 Key/API 通道官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口 https://taotoken.net/api 。把模型调用的 base_url 指到它Key 统一管理trace 里的gen_ai.*字段就能和你的成本口径对上。前置准备分三步。第一在 TaoToken 控制台建一个 API Key路径是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 建完复制出来后面写进环境变量。第二确认你的 Kibana space 里 Gen AI 设置下 Agent Traces 的开关状态。agentBuilder:tracing:enabled默认开启管 trace 采集下面还有一组隐私控制默认屏蔽提示词和工具输出需要更完整 trace 才打开agentBuilder:tracing:includeUserPrompts、includeLlmResponses、includeToolDetails、includeSystemPrompt、includeRealNames、includeRealIds。最后两个要特别小心includeRealIds会保留真实对话标识符而不是哈希版本等于把 trace 和具体用户会话关联起来属于 PII 范畴。只有在你清楚 agent 处理的数据类型、并且有数据治理机制时才开。第三确认 OTel exporter 的出口。Agent Builder 用 OpenTelemetry 语义约定span 属性名是gen_ai.usage.input_tokens、gen_ai.usage.output_tokens、gen_ai.conversation.id、gen_ai.operation.name这一套。你的 exporter 要把这些属性原样送进 Elasticsearch别在中间做字段改名否则后面 Lens 面板的公式会对不上。3. 可复制的 config.toml 与 settings.json 骨架下面这份config.toml是 OTel Collector 的骨架负责把 Agent Builder 产出的 trace 转发到 Elasticsearch同时把模型调用的出口指向 TaoToken。字段按你的实际环境替换注释保留。# config.toml - OTel Collector 骨架 receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: timeout: 5s send_batch_size: 512 # 保留 gen_ai.* 语义约定字段不做改名 attributes: actions: - key: gen_ai.usage.input_tokens action: upsert - key: gen_ai.usage.output_tokens action: upsert exporters: elasticsearch: endpoints: [https://your-es-endpoint:9200] # 写入 space 专属 data stream默认 space 用 otel-default logs_index: traces-agent_builder.otel-default api_key: ${ES_API_KEY} mapping: mode: otel service: pipelines: traces: receivers: [otlp] processors: [batch, attributes] exporters: [elasticsearch]模型调用侧的settings.json骨架把 base_url 指向 TaoToken 的 API 入口Key 从环境变量读别硬编码进文件。{ llm: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model: your-model-name, timeout_seconds: 60 }, tracing: { enabled: true, otlp_endpoint: http://localhost:4318, service_name: elastic-agent-builder, include_user_prompts: false, include_llm_responses: false, include_tool_details: false, include_real_ids: false } }环境变量这样设Key 从控制台复制的那串填进去export TAOTOKEN_API_KEYsk-你的key export ES_API_KEY你的es-api-keyOTel exporter 片段单独拎出来方便你贴进已有的 collector 配置。注意mapping.mode: otel这行它让 Elasticsearch 按 OTel 语义约定建映射gen_ai.usage.*才会被识别成数值字段而不是字符串否则后面求和会报类型错。exporters: elasticsearch: endpoints: [https://your-es-endpoint:9200] logs_index: traces-agent_builder.otel-default api_key: ${ES_API_KEY} mapping: mode: otel retry: enabled: true max_requests: 34. 验证 traces 落库与成本字段配置写完别急着搭面板先在 Kibana 里确认数据真的进来了。打开 Discover索引模式直接指定traces-agent_builder.otel-default时间范围拉到最近 15 分钟跑一次 agent 对话看有没有新文档进来。有文档说明 exporter 通了。接着验证成本字段。在 Discover 的字段列表里找gen_ai.usage.input_tokens和gen_ai.usage.output_tokens点进去看类型是不是 number。如果是 keyword 或 text说明映射没按 OTel 约定建回上一步检查mapping.mode。确认类型后用 ES|QL 跑一条聚合看单次对话的 token 总量FROM traces-agent_builder.otel-default | WHERE timestamp NOW() - 15 minutes | WHERE gen_ai.operation.name chat | STATS total_tokens SUM(gen_ai.usage.input_tokens) SUM(gen_ai.usage.output_tokens) BY conversation_id gen_ai.conversation.id | SORT total_tokens DESC | LIMIT 10返回结果里每行是一个对话 ID 和它的 token 总量这就是成本仪表板的数据源。如果返回空先确认gen_ai.operation.name的值确实是chat不同版本的 span 命名可能有差异用| STATS COUNT(*) BY gen_ai.operation.name先看一眼实际值。落库验证通过后搭第一个 Lens 面板水平条形图x 轴gen_ai.conversation.id降序取前 10y 轴用公式sum(gen_ai.usage.input_tokens) sum(gen_ai.usage.output_tokens)。这就是「按 token 消耗排序的最活跃对话」。第二个面板可以换成 ES|QL 可视化统计 LLM 往返次数最多的对话FROM traces-agent_builder.otel-default | WHERE timestamp ?_tstart AND timestamp ?_tend | WHERE gen_ai.operation.name chat | STATS Chat Span Count COUNT(*) BY Conversation ID gen_ai.conversation.id, Span Name span.name | SORT Chat Span Count DESC | LIMIT 100告警规则也基于同一份数据。导航到 Observability Alerts Manage Rules Create Rule选 Elasticsearch query 类型用下面这条 ES|QL单次对话超过 256000 token 就触发FROM traces-agent_builder.otel-default | WHERE timestamp NOW() - 15 minutes | STATS total_tokens SUM(gen_ai.usage.input_tokens) SUM(gen_ai.usage.output_tokens) BY gen_ai.conversation.id | WHERE total_tokens 256000 | KEEP gen_ai.conversation.id, total_tokens调度周期设 15 分钟触发动作配 Slack 通知或 PagerDuty incident。告警负载里的gen_ai.conversation.id就是你要去查的那次对话。5. 本篇常见错排查trace 没进 Elasticsearch先看 collector 日志有没有 export 失败。最常见的是logs_index写错默认 space 必须是traces-agent_builder.otel-default写成别的 space id 数据就进错地方了。其次是ES_API_KEY没权限写 data stream检查 API Key 的角色。token 字段求和报类型错gen_ai.usage.input_tokens被映射成字符串了。原因是 exporter 没开mapping.mode: otel或者字段第一次写入时就是字符串。删掉索引重新灌一次或者用 index template 强制映射。面板里对话 ID 是哈希值agentBuilder:tracing:includeRealIds没开。默认是哈希版本开了才保留真实 ID。但开之前想清楚 PII 问题别为了好看把用户会话暴露了。告警一直不触发检查调度周期和查询时间窗口是否匹配。查询里写NOW() - 15 minutes调度周期也设 15 分钟两者对齐。如果调度 5 分钟但窗口 15 分钟会重复统计同一批数据。不同 space 数据混在一起查询用了通配符索引。永远指定具体 space 的索引名别用traces-agent_builder.otel-*。模型调用 401TaoToken 的 Key 没设对或者base_url写成了带路径的形式。API 入口就是https://taotoken.net/api别自己拼/v1之类的后缀具体路径以接入文档为准。6. 把 Key 和文档收好下次直接查排障和接入相关的入口放这里下次遇到 401 或者字段对不上直接翻API Keys 管理在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先验证模型通不通用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 跑一轮确认返回正常再回去看 trace。如果你是要长期跑编码类 agent、或者把 agent 接进 CI 流程Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 按套餐走比单次调用好对账。最后留一个实操习惯每次改完 collector 配置先在 Discover 里跑一遍| STATS COUNT(*) BY gen_ai.operation.name确认 span 类型分布正常再去动 Lens 面板。这一步花三十秒能省掉后面半小时的字段排查。
RELATED

相关推荐

AI Coding 零基础实战教程(4)AI技能系统(Skills)深度实践:用 TaoToken 统一 Key 打通 Claude Code 的 SKILL.md 配置

AI Coding 零基础实战教程(4)AI技能系统(Skills)深度实践:用 TaoToken 统一 Key 打通 Claude Code 的 SKILL.md 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 16:59:55
最新版本TensorFlow训练模型TinyML部署到ESP32入门实操:用TaoToken统一Key打通配置链路

最新版本TensorFlow训练模型TinyML部署到ESP32入门实操:用TaoToken统一Key打通配置链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 16:59:55
保定seo公司怎么选避坑指南防黑客

保定seo公司怎么选避坑指南防黑客

保定seo公司怎么选避坑指南防黑客 在保定找建站公司,最怕的不是功能少,而是花大价钱买个“裸奔”网站,上线三天就被挂马。很多老板觉得SEO优化就是堆关键词,其实安全才是地基。地基不稳,流量再高也是给别人送人头。今天咱们不聊虚的,直接拆解保定…

📅 2026/9/27 16:59:55
MORE NEWS

更多资讯

📰

vim g系列命令补充:用 TaoToken 统一 Key 打通 AI 补全配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Agent Skills 实战:用 SKILL.md 把 PRD 需求文档写成可复用 Skill

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

用记事本手写 ASP.NET Web 应用程序:TaoToken 统一 Key 接入与本地调试配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Java Codex 开发极致提效实战大全:TaoToken 统一 Key 接入 IDEA 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

网站建设首选这3个免费工具 告别高价坑

网站建设首选这3个免费工具 告别高价坑 找建站公司怕被坑高价?别急。很多老板花几万块建个站,打开速度慢如蜗牛,手机端排版还错乱。其实, 网站建设首选 的不是最贵的报价单,而是你能看懂的技术标准和 免费工具 验证能力。…

📰

【小白也能轻松用】OpenClaw 零基础一键搭建自动化工具:TaoToken 统一 Key 配置与 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬