OpenTelemetry Go semconv v1.37.0 迁移指南:GenAI 与容器运行时语义属性移除详解(sliver 仓库依赖视角)
网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载本文聚焦于 sliver 仓库中 vendored 的go.opentelemetry.io/otel/semconv/v1.37.0包的官方迁移文档逐条解析从 v1.36.0 升级到 v1.37.0 时被移除的 25 个声明及其替代 API并结合包内源码attribute_group.go、doc.go、schema.go给出可直接落地的迁移代码示例与编译验证流程。读完本文你将清楚掌握GenAISystem*、GenAIOpenAI*与ContainerRuntime*属性在 v1.37.0 中的去向能够安全、快速地完成升级。一、背景这份 MIGRATION.md 在仓库中的位置与作用在 sliver 仓库中go.opentelemetry.io/otel/semconv/v1.37.0是 OpenTelemetry Go SDK 的 vendored 依赖包路径为 vendor/go.opentelemetry.io/otel/semconv/v1.37.0包内包含MIGRATION.mdv1.36.0 → v1.37.0 的官方迁移说明本文主体attribute_group.go约 15000 行的语义属性定义attribute.Key与KeyValue构造器doc.go包级文档声明该包实现 OpenTelemetry 语义约定semantic conventionsv1.37.0 版本schema.go声明SchemaURL https://opentelemetry.io/schemas/1.37.0即该版本语义约定对应的 schema 标识error_type.go 与 exception.goErrorType(err)辅助函数与ExceptionEventName exception常量。从 vendor/modules.txt 可以看到该 semconv 包隶属于go.opentelemetry.io/otel v1.44.0模块在 go.mod 中以间接依赖登记且仓库同时 vendored 了semconv/v1.37.0、semconv/v1.39.0含httpconv、rpcconv子包与semconv/v1.41.0含otelconv子包三个版本——这正是升级链路中值得注意的多版本并存现象。MIGRATION.md 开头即给出迁移契约Thego.opentelemetry.io/otel/semconv/v1.37.0package should be adrop-in replacementforgo.opentelemetry.io/otel/semconv/v1.36.0with the following exceptions.即v1.37.0 整体上是 v1.36.0 的直接替换包drop-in replacement唯一的例外就是下文列出的被移除声明。这意味着绝大多数依赖 v1.36.0 API 的代码无需改动只需针对例外清单逐一处理。二、移除清单总览25 个声明的三类归属MIGRATION.md 的 Removed 一节列出的全部 25 个声明可归纳为三类类别移除声明数量容器运行时标识ContainerRuntime、ContainerRuntimeKey2OpenAI 专属 GenAI 属性GenAIOpenAIRequestServiceTierAuto、GenAIOpenAIRequestServiceTierDefault、GenAIOpenAIRequestServiceTierKey、GenAIOpenAIResponseServiceTier、GenAIOpenAIResponseServiceTierKey、GenAIOpenAIResponseSystemFingerprint、GenAIOpenAIResponseSystemFingerprintKey7GenAI 系统标识符枚举GenAISystemAWSBedrock、GenAISystemAnthropic、GenAISystemAzureAIInference、GenAISystemAzureAIOpenAI、GenAISystemCohere、GenAISystemDeepseek、GenAISystemGCPGemini、GenAISystemGCPGenAI、GenAISystemGCPVertexAI、GenAISystemGroq、GenAISystemIBMWatsonxAI、GenAISystemKey、GenAISystemMistralAI、GenAISystemOpenAI、GenAISystemPerplexity、GenAISystemXai16关于移除的官方口径MIGRATION.md 原文要点若某声明在语义约定文档中被标记为 deprecated则按官方弃用流程处理若声明在文档中并未被标记为 deprecated则说明它是因为缺乏适用性或使用场景而在本版本中被直接移除如果你在 Go 应用中使用了这些未被标记 deprecated 的声明官方建议提交 issue 说明你的使用场景issue 入口在 MIGRATION.md 中给出本文不展开外部链接。从语义上看这次移除的实质是对 GenAI 语义约定的命名重构旧版用gen_ai.system.*系列标识符区分各家大模型提供商v1.37.0 将其统一收敛到gen_ai.provider.nameOpenAI 专属的服务层级service tier与系统指纹system fingerprint属性则从gen_ai.*前缀收敛到独立的openai.*命名空间。三、替代 API 详解v1.37.0 源码中的新命名3.1GenAISystem*→GenAIProviderName*gen_ai.provider.name在 attribute_group.go 中v1.37.0 保留了核心判别属性GenAIProviderNameKey attribute.Key(gen_ai.provider.name)其文档注释明确解释了设计意图该属性表示由客户端或服务器插桩识别出的生成式 AI 提供商类型为 Enum稳定性级别为 Development建议级别为 Recommended由于 Azure OpenAI、Gemini 以及各类 AI 托管平台都可通过 OpenAI REST API 及对应客户端库访问但可能代理或托管不同提供商的模型因此该属性应基于插桩的最佳认知设置可能与实际模型提供商不同建议结合gen_ai.request.model、gen_ai.response.model与server.address属性辅助识别实际使用的系统gen_ai.provider.name充当判别器discriminator用于标识该条 GenAI 遥测数据所属的提供商专属格式flavor。例如与 AWS Bedrock 相关的 GenAI Span、指标与事件应把gen_ai.provider.name设为aws.bedrock并携带aws.bedrock.*属性而不应携带openai.*属性。对应的枚举值第 6670 行起的 Enum values for gen_ai.provider.name 段完整覆盖了被移除的 16 个GenAISystem*声明新声明v1.37.0属性值对应移除的旧声明GenAIProviderNameOpenAIopenaiGenAISystemOpenAIGenAIProviderNameGCPGenAIgcp.gen_aiGenAISystemGCPGenAIGenAIProviderNameGCPVertexAIgcp.vertex_aiGenAISystemGCPVertexAIGenAIProviderNameGCPGeminigcp.geminiGenAISystemGCPGeminiGenAIProviderNameAnthropicanthropicGenAISystemAnthropicGenAIProviderNameCoherecohereGenAISystemCohereGenAIProviderNameAzureAIInferenceazure.ai.inferenceGenAISystemAzureAIInferenceGenAIProviderNameAzureAIOpenAIazure.ai.openaiGenAISystemAzureAIOpenAIGenAIProviderNameIBMWatsonxAIibm.watsonx.aiGenAISystemIBMWatsonxAIGenAIProviderNameAWSBedrockaws.bedrockGenAISystemAWSBedrockGenAIProviderNamePerplexityperplexityGenAISystemPerplexityGenAIProviderNameXAIx_aiGenAISystemXaiGenAIProviderNameDeepseekdeepseekGenAISystemDeepseekGenAIProviderNameGroqgroqGenAISystemGroqGenAIProviderNameMistralAImistral_aiGenAISystemMistralAI迁移要点GenAISystemKey旧 keygen_ai.system被移除后新的判别 key 为GenAIProviderNameKeygen_ai.provider.name。这是一个纯粹的命名空间迁移 枚举值字符串同步替换过程值语义保持一致。3.2GenAIOpenAI*→openai.*命名空间在 attribute_group.go 的 Namespace: openai 段中v1.37.0 提供了三个新 keyOpenAIRequestServiceTierKey attribute.Key(openai.request.service_tier) OpenAIResponseServiceTierKey attribute.Key(openai.response.service_tier) OpenAIResponseSystemFingerprintKey attribute.Key(openai.response.system_fingerprint)对照被移除的旧声明移除v1.36.0替代v1.37.0说明GenAIOpenAIRequestServiceTierKeyOpenAIRequestServiceTierKey请求中请求的服务层级Enum 类型示例值auto、defaultGenAIOpenAIRequestServiceTierAutoOpenAIRequestServiceTierAuto枚举值auto系统将使用 scale tier 积分直至耗尽GenAIOpenAIRequestServiceTierDefaultOpenAIRequestServiceTierDefault枚举值default系统将使用默认 scale tierGenAIOpenAIResponseServiceTierKey/GenAIOpenAIResponseServiceTierOpenAIResponseServiceTierKey/OpenAIResponseServiceTier(val string)响应实际使用的服务层级字符串类型示例值scale、defaultGenAIOpenAIResponseSystemFingerprintKey/GenAIOpenAIResponseSystemFingerprintOpenAIResponseSystemFingerprintKey/OpenAIResponseSystemFingerprint(val string)用于追踪生成式 AI 环境任何潜在变化的指纹示例值fp_44709d6fcb注意GenAIOpenAIResponseServiceTier与GenAIOpenAIResponseSystemFingerprint原本是函数形式返回attribute.KeyValue新 API 中对应函数名直接去掉了GenAI前缀签名不变因此这类替换可以做到近乎机械的改名即迁移。3.3ContainerRuntime/ContainerRuntimeKey的移除与保留项MIGRATION.md 移除的容器相关声明只有两个ContainerRuntime值常量与ContainerRuntimeKey即旧 keycontainer.runtime。注意container.runtime.*系列下的细粒度属性并未全部移除。在 attribute_group.go 中仍然保留ContainerRuntimeDescriptionKey attribute.Key(container.runtime.description) ContainerRuntimeNameKey attribute.Key(container.runtime.name) ContainerRuntimeVersionKey attribute.Key(container.runtime.version)并配套提供了构造器函数attribute_group.gofunc ContainerRuntimeDescription(val string) attribute.KeyValue func ContainerRuntimeName(val string) attribute.KeyValue func ContainerRuntimeVersion(val string) attribute.KeyValue由此可见移除的只是笼统的container.runtime单个 key取而代之的语义是用三个结构化属性分别描述运行时的描述信息如docker://19.3.1 - CRI: 1.22.0、运行时名称如docker、containerd、rkt与运行时版本。如果你的代码此前用ContainerRuntimeKey.String(docker)表达运行时名称迁移时应当改用ContainerRuntimeName(docker)。四、迁移实战before/after 代码示例以下示例演示如何在 Span 上设置 GenAI 语义属性。迁移前v1.36.0span.SetAttributes( semconv.GenAISystemOpenAI, // gen_ai.system openai semconv.GenAIOpenAIRequestServiceTierDefault, // gen_ai.openai.request.service_tier default semconv.GenAIOpenAIResponseSystemFingerprint(fp_44709d6fcb), // gen_ai.openai.response.system_fingerprint )迁移后v1.37.0可直接编译运行span.SetAttributes( semconv.GenAIProviderNameOpenAI, // gen_ai.provider.name openai semconv.OpenAIRequestServiceTierDefault, // openai.request.service_tier default semconv.OpenAIResponseSystemFingerprint(fp_44709d6fcb), // openai.response.system_fingerprint )容器运行时属性迁移示例// 迁移前v1.36.0 span.SetAttributes(semconv.ContainerRuntimeKey.String(docker)) // 迁移后v1.37.0 span.SetAttributes( semconv.ContainerRuntimeName(docker), semconv.ContainerRuntimeVersion(19.3.1), )从源码结构看所有新 key 都沿用了attribute.Key(...).String(...)的KeyValue构造模式如 attribute_group.go 中的OpenAIRequestServiceTierAuto OpenAIRequestServiceTierKey.String(auto)因此迁移后对attribute.KeyValue的消费链路span.SetAttributes、tracer埋点等无需任何改动。五、遇到非弃用却被移除的声明怎么办MIGRATION.md 明确区分了两种移除情形文档中已标记 deprecated 的声明按 OpenTelemetry 语义约定文档中的弃用说明进行替换文档中未标记 deprecated 的声明因缺乏适用性或使用场景被移除。如果你仍在使用它们官方要求提交 issue 并描述具体使用场景以便上游重新评估是否恢复或提供替代方案。这提示了一个通用的升级策略升级前先对代码库做一次符号扫描用grep -rn GenAISystem\|GenAIOpenAI\|ContainerRuntimeKey\|ContainerRuntime( --include*.go之类的检索或 Go 静态分析工具定位所有受影响的调用点再逐一按上节映射表替换最后交给编译器兜底校验——因为被移除的声明会导致编译错误这反而让迁移过程处处可见、无遗漏。六、升级与验证流程仓库视角针对 sliver 这类将 OTel 作为间接依赖的 Go 项目标准的升级验证步骤如下确认版本来源查看 vendor/modules.txt确认semconv/v1.37.0由go.opentelemetry.io/otel v1.44.0模块提供若上游将 OTel 升级到更高版本semconv 包会随之更新更新依赖在 go.mod 中调整 OTel 相关版本后执行go mod tidy再运行go mod vendor重新生成 vendor 目录编译验证执行go build ./...全仓库与go test ./...被移除的 25 个声明会在编译期直接暴露为 undefined 错误逐个修复即可运行时验证若项目开启了 OTLP 导出可在迁移后检查导出的 span 属性键是否已变为gen_ai.provider.name、openai.request.service_tier、openai.response.system_fingerprint等新键。另外仓库中并存了 vendor/go.opentelemetry.io/otel/semconv/v1.39.0 与 vendor/go.opentelemetry.io/otel/semconv/v1.41.0 两个更新版本分别供httpconv/rpcconv与otelconv子包使用。从 v1.41.0 的 MIGRATION.md 可见该版本的移除清单仅剩DeploymentEnvironmentName一项说明 v1.37.0 的这次 GenAI/容器属性重构是语义约定演进中的关键分水岭——后续版本延续了同一套迁移机制drop-in replacement 显式移除清单读者可复用本文的排查方法处理后续升级。七、总结v1.37.0 是 v1.36.0 的 drop-in replacement唯一例外是 25 个被移除的声明2 个容器运行时 7 个 OpenAI 专属 GenAI 属性 16 个 GenAI 系统标识符GenAI 属性完成命名空间收敛gen_ai.system.*→gen_ai.provider.namegen_ai.openai.*→openai.*容器侧仅移除笼统的container.runtime单 keycontainer.runtime.name/version/description结构化属性继续保留迁移的核心工作是符号级改名对照上文的映射表机械替换后编译错误会帮助校验完整性若被移除声明未被官方标记为 deprecated且你的项目确实需要请按 MIGRATION.md 的指引向上游提交 issue 说明使用场景。本指南以 sliver 仓库中 vendored 的 MIGRATION.md 为骨架所有 API 名称、key 字符串、枚举值与代码片段均可在 attribute_group.go 中逐一核对可放心作为升级依据。赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐OpenTelemetry Go Semconv v1.37.0 迁移指南被移除的 GenAI 与容器属性及替代方案inngest 实践OpenTelemetry Go Semconv v1.37.0 迁移指南被移除的 GenAI 与容器属性及替代方案inngest 实践 导读 本文围绕后端任务调度工作流自动化微服务skopeo 仓库中的 OpenTelemetry semconv v1.36.0 → v1.37.0 迁移指南声明移除明细与替换方案skopeo 仓库中的 OpenTelemetry semconv v1.36.0 → v1.37.0 迁移指南声明移除明细与替换方案 本篇迁移指南以 Ope云原生CLI镜像仓库OpenCloud 中 OpenTelemetry SemConv v1.37.0 迁移指南被移除声明全解析与代码迁移实战OpenCloud 中 OpenTelemetry SemConv v1.37.0 迁移指南被移除声明全解析与代码迁移实战 导读 本文以 OpenCloud后端微服务存储认证鉴权上一篇Kita Html 错误处理异步组件中的异常捕获策略下一篇前端性能优化终极指南如何实现流畅拖拽交互的10个关键技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考