样本是 logfmt 还是结构化 JSON?
引号与重复键掩盖字段时先把 logfmt 转成 JSON;已有类型明确的 JSON 直接分析,不做无意义转换。
Elysia Tools
导航
Workflow Playbook
盘点旧属性、迁移 OTel 语义约定、核对链路上下文传播,并用真实 trace 验收跨服务埋点。
专题
这个流程面向准备升级 OpenTelemetry 语义约定的服务负责人,不是把所有排障工具堆在一起的事故页面。先收集脱敏的旧日志、当前埋点或 Collector 配置、至少经过两个服务的代表性请求,以及源版本和目标版本。用 structured-log-analyzer 看清日志中实际存在的字段。若日志是 logfmt,再用 logfmt-to-json-structured-log-bridge 处理引号、类型转换和重复键;原本就是结构化 JSON 的样本无需多做一步。分享前先清除个人信息和密钥;完整的泄露风险检查属于 pii-log-redaction 工作流。
在代码、Collector 配置或仪表板 JSON 的副本上运行 otel-semantic-convention-migration-tool,记录源和目标版本、建议的重命名、被移除的属性及未映射的旧字段。工具给出的是迁移草稿,不会替你更新线上配置。比如 http.target 需要按语义考虑拆成路径和查询,不能只做字符串替换。由服务负责人审查这些分支,再走正常发布流水线。只看“改了多少字段”也不够,仪表板查询或 Collector 转换规则可能仍引用旧名。
把代表性的 W3C traceparent、tracestate、baggage 与 OTLP 导出头部交给 opentelemetry-w3c-traceparent-tracestate-baggage-and-otlp-protobuf-headers-propagation-validator,核对下游是否保留同一个 trace-id,同时换成新的非零 span-id。头部有效并不代表应用真的上报了 span,所以还应使用 distributed-trace-decoder-waterfall-visualizer 打开升级后的链路 JSON。比对预期服务、父子关系、错误 span 和耗时;缺失的服务要记录,不能凭头部推测它存在。
若发布要求包含延迟目标,再用 api-latency-budget-planner 将观察到的阶段耗时与事先约定的预算并列。单条 trace 只能提示时间花在哪儿,不能统计出可信的 P99。验收记录应包含样本版本、属性差异、头部校验、真实链路证据、仍未映射的字段和预算例外。若主要任务变成线上事故排查或 API 载荷重放,应分别转到 observability-debugging 或 api-request-replay-and-debugging。
工作流指南
分析脱敏的升级前样本;仅在需要时把 logfmt 转为 JSON,先看清带引号的值和重复键。
按选定的 v1.20 升级路径改写可映射属性,审查差异及 Collector 改名草稿,并单列移除项和未映射字段。
检查代表性跨服务请求的 traceparent、tracestate、baggage 和 OTLP 头部,包括 trace-id 延续及子 span-id 的变化。
解码升级后的 OTel、Jaeger 或 Zipkin JSON,对照预期请求路径核查服务顺序、父子 span、错误及耗时。
如果已有 SLO 目标,把观察到的 span 耗时与约定阶段预算并列,记录超出预算的环节。
引号与重复键掩盖字段时先把 logfmt 转成 JSON;已有类型明确的 JSON 直接分析,不做无意义转换。
映射明确的字段可生成改名草稿;http.target 等移除项和未映射属性必须由负责人决定,不能盲目部署转换规则。
用头部校验上下文连续性,用实际导出链路核对 span 关系;只有既定目标存在时才做延迟预算比较。