OpenTelemetry GenAI 语义约定变化后如何整理追踪字段
来源:17golang原创
时间:2026-09-15 00:23:31 272浏览 收藏
如果你最近升级了 OpenTelemetry 语义约定,发现旧的 gen_ai.* 字段出现 deprecated,不要把所有字段机械地改名。更稳妥的做法是先按“调用边界、统计边界、内容事件”重新分层:模型和操作名放在 span/metric 的公共字段里,prompt、回复和工具参数按需作为结构化事件或受控内容记录,提供商差异再放到 provider-specific 扩展中。
官方资料入口:https://opentelemetry.io/;GenAI 语义约定仓库:https://github.com/open-telemetry/semantic-conventions-genai
- 核心语义约定仓库中的 GenAI 条目已经迁移,新的埋点应以独立 GenAI 仓库为准。
gen_ai.request.model、gen_ai.provider.name、gen_ai.operation.name和 token 用量适合做检索与聚合。gen_ai.input.messages、gen_ai.output.messages和工具内容可能含敏感数据,默认不要全量采集。
先分清“字段变化”和“语义归属变化”
这次调整最容易误判的地方,是把“字段还叫 gen_ai.*”理解成“原来的定义仍然有效”。OpenTelemetry 的核心语义约定发布说明已经把原先位于 model/gen-ai/、model/openai/ 和 model/mcp/ 的 GenAI 属性、指标、事件和 span 标为 deprecated,并迁移到独立仓库。独立仓库当前仍标记为 Development,因此它既是新的事实来源,也是需要隔离变更的边界。
迁移时先在 instrumentation 的适配层写清三件事:使用哪一版语义约定、发送数据的 schema_url 是什么、旧字段只为兼容哪些消费者保留。不要在业务代码里散落“新字段名 + 旧字段名”的双写判断,否则下一次约定变化时很难收口。

把追踪字段按查询目标重新排一遍
一个 LLM 调用至少要区分“谁提供、做什么、请求了什么、实际消耗什么”。下面这张表可以直接作为字段整理清单:
| 查询目标 | 优先字段 | 使用边界 |
|---|---|---|
| 区分后端提供商 | gen_ai.provider.name | 作为 provider discriminator,不能用模型名猜提供商 |
| 定位调用类型 | gen_ai.operation.name | 统一使用 chat、generate_content 等约定值 |
| 比较模型 | gen_ai.request.model、gen_ai.response.model | 分别记录请求配置与实际响应模型 |
| 估算消耗 | gen_ai.token.type、gen_ai.usage.input_tokens、gen_ai.usage.output_tokens | 把 input/output 作为可聚合维度,不把完整 prompt 当指标标签 |
| 关联会话 | gen_ai.conversation.id | 只有确实需要跨调用串联会话时再记录 |
旧的 gen_ai.system 不应继续承担提供商识别职责;当前资料把它指向 gen_ai.provider.name。同理,gen_ai.usage.prompt_tokens 和 gen_ai.usage.completion_tokens 应分别迁移到 input/output tokens。迁移前后不要只看字段是否有值,还要检查查询面板是否仍按同一维度聚合。
内容字段要从“属性堆积”改成“受控事件”
模型消息、系统指令、工具定义、工具参数和工具结果的体积都可能快速增长,而且可能包含用户输入、个人信息或内部提示词。当前约定要求消息遵循对应 JSON schema;记录在 event 上时应使用结构化形式,记录在 span 上时才考虑后端不支持结构化数据的兼容表示。
工程上可以采用三层开关:
- 默认关闭全文内容。生产环境先采集模型、操作、token、结束原因和错误类型,让成本与链路问题可见。
- 按采样或租户开启。排障时只对测试租户、短时间窗口或低比例请求记录消息,并先过滤密钥、身份证号、订单正文等字段。
- 区分内容事件与调用 span。一个调用中可能出现多次消息或工具结果,事件更适合表达这些独立发生的内容;span 保留调用整体的时间边界。
不要把 prompt、completion 或 tool arguments 放进 metric label,也不要把大段 JSON 复制到每个 span 和 log。这样既会放大存储,也容易形成高基数查询和敏感信息扩散。
用三条样例请求做迁移后的复查
第一条是普通 chat:确认 span 能看到操作名、请求模型、响应模型、结束原因和 input/output token。第二条是带工具调用的 agent:确认工具调用有独立的发生记录,参数与结果能通过调用 ID 对上,但全文内容仍受采集开关控制。第三条是失败请求:确认 span 或对应指标带有低基数的 error.type,同时不把完整异常上下文塞进聚合标签。
复查时再对照 provider-specific 约定:如果请求经过 Azure、Bedrock 或其他兼容接口,不能只根据客户端库名称写 provider。gen_ai.provider.name 应反映 instrumentation 已知的实际提供商,并与对应扩展字段保持一致。最后把这三条样例导出到测试后端,分别验证 trace 关联、token 聚合、错误筛选和内容脱敏。

常见问题
旧字段还能继续发送吗?
可以作为短期兼容策略保留,但新埋点不应继续以旧定义为主。应明确兼容期限,并让新消费者读取独立 GenAI 语义约定。
为什么不把完整 prompt 都放进 span?
因为它可能很大且含敏感信息。优先使用 opt-in、采样、截断和脱敏;只在确有排障价值时记录内容。
schema_url 一定要记录吗?
迁移期间建议记录。它能让下游知道字段来自哪套语义约定,避免同名字段在不同版本间被误解。
模型名能代替 provider.name 吗?
不能。多个服务可能通过同一种 API 代理不同模型,模型名、请求模型和实际提供商是三个不同判断。
整理完成后的标准不是“字段数量更多”,而是公共调用字段可检索、内容数据可控、provider 扩展有边界、schema 版本能追踪。把这些判断集中在 instrumentation adapter 和回归样例里,后续约定继续变化时,业务代码就不必跟着反复改动。
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
430 收藏
-
493 收藏
-
446 收藏
-
226 收藏
-
241 收藏
-
146 收藏
-
科技周边 · 业界新闻 | 10小时前 | 云原生 · 调度器 · kubernetes · 资源调节 · Kubernetes v1.37 调度器抢占 InPlacePodVerticalScaling Pod resize122 收藏
-
科技周边 · 业界新闻 | 11小时前 | kubernetes · Gateway API · TCPRoute · 云原生网络 · 入口迁移 · Gateway API v1.6 TCPRoute v1迁移 Gateway入口规则评估219 收藏
-
科技周边 · 业界新闻 | 12小时前 | 云原生 · kubernetes · job · successPolicy · Kubernetes v1.37 Job successPolicy Indexed Job succeededIndexes succeededCount271 收藏
-
科技周边 · 业界新闻 | 14小时前 | kubernetes · 故障排查 · job · 业界新闻 · 容器编排 · Kubernetes v1.37 PodFailurePolicy Job FailureTarget Pod失败策略249 收藏
-
298 收藏
-
科技周边 · 业界新闻 | 1天前 | 云原生 · kubernetes · Gateway API · 网络迁移 · ingress 路由迁移 Gateway API Ingress2Gateway ingress-nginx335 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习