其他
需要为应用接入 OpenTelemetry 时,用语言规则…
在应用首次或增量接入 OpenTelemetry,配置 trace、metrics、logs、采样与验证时使用;覆盖从选择 SDK 到部署后验证的完整流程。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 54/100 ×0.15
适用场景
需要为应用接入 OpenTelemetr通用
解决思路
- 从 telemetry 规则入口开始,明确 signal types、信号关联方式和导航。
- 用 resolve-values 规则从代码库中解析配置值。
- 在添加 instrumentation 包之前,用 verify-dependencies 规则验证包和版本存在。
- 按 resources 规则配置 resource attributes,定义服务身份和环境。
- 在 Kubernetes 部署中按 k8s 规则使用 downward API 和 pod spec。
- 按 spans 规则创建 span,处理命名、kind、status 和 hygiene。
- 按 logs 规则接入结构化日志,处理 severity 并与 trace 关联。
- 按 metrics 规则定义指标,处理 instrument 类型、命名、单位和 cardinality。
- 按 sensitive-data 规则防止 PII,执行 sanitization 和 redaction。
- 按 capture-database-query-parameters 规则,针对 Java、.NET、Python、Node.js、Go 捕获 prepared-statement 参数。
- 按 validation 规则执行部署后遥测验证清单。
- 按 Node.js SDK 规则设置 Node.js instrumentation。
- 按 Go SDK 规则设置 Go instrumentation。
- 按 Python SDK 规则设置 Python instrumentation。
- 按 Java SDK 规则设置 Java instrumentation。
- 按 Scala SDK 规则设置 Scala instrumentation。
- 按 .NET SDK 规则设置 .NET instrumentation。
- 按 Ruby SDK 规则设置 Ruby instrumentation。
- 按 PHP SDK 规则设置 PHP instrumentation。
- 按 Browser SDK 规则设置 Browser instrumentation。
- 按 Next.js SDK 规则设置 Next.js 全栈 instrumentation(App Router)。
- 从零接入时,先选择语言对应的 SDK 规则。
- 设置 resource attributes,定义服务身份和环境。
- 按 spans、metrics、logs 规则添加 span、指标和日志。
- 按 sensitive-data 规则在导出前清理 PII。
- 按 validation 规则确认遥测到达后端。
- Node.js span 示例:用 trace.getTracer('my-service', '1.0.0') 获取 tracer。
- 用 tracer.startActiveSpan('operation-name', async (span) => { ... }) 创建活动 span。
- 在 span 内设置业务属性,例如 span.setAttribute('user.id', userId) 和 span.setAttribute('order.id', orderId)。
- 调用业务逻辑后设置结果属性,例如 span.setAttribute('order.status', result.status)。
- 成功时用 span.setStatus({ code: SpanStatusCode.OK }) 标记 span 状态。
- 发生异常时用 span.setStatus({ code: SpanStatusCode.ERROR, message: `${err.name}: ${err.message}` }) 标记错误。
- 异常不要用 span.recordException,而要把异常记录为结构化日志记录;在 logger.error 中包含 trace_id、span_id、exception.type、exception.message、exception.stacktrace。
- 在 finally 中调用 span.end() 结束 span。
- 遵守 signal density over volume:每个 telemetry item 必须用于 Detect、Localize 或 Explain;若不能服务这三个目的,就不要 emit。
- 遵循 sample in the pipeline, not the SDK:每个 SDK 使用 AlwaysOn sampler(默认)。
- 不要配置 SDK-side sampler,因为它们会在请求结果未知前做出不可逆决策。
- 将所有采样推迟到 Collector,在 Collector 中应用 head 或 tail sampling,并让策略可集中修改而无需重新部署应用。
- 采样链路按 SDK(AlwaysOn)→ Collector(head 或 tail sampling)→ Backend(retention/storage policies)组织。
- 参考 OpenTelemetry Documentation 和 Semantic Conventions;如需 Dash0 集成可查 Dash0 Integration Hub。
适用边界 · 注意事项
- 不使用 OpenTelemetry 的遥测体系,或无法引入 OTel SDK/Collector 时。
- 无法把采样决策推迟到 Collector,必须由 SDK 侧提前采样时,本技能的 pipeline sampling 建议不适用。
- 完全不能修改应用代码、也无法添加自动 instrumentation 的场景。