← ClaudeAtlas

otel-golisted

Go OpenTelemetry 可观测性专家 - 分布式追踪、指标收集、日志关联、上下文传播、采样策略、Baggage 传递。适用:微服务链路追踪、APM 监控、多信号(traces/metrics/logs)统一采集、vendor-neutral 遥测方案、gRPC/HTTP 自动 instrumentation。不适用:单体应用仅需简单日志排障、性能极敏感热路径(SDK 有微量开销)、已深度绑定特定 APM 厂商 SDK 且无迁移计划。触发词:opentelemetry, otel, tracing, span, metric, 可观测性, 链路追踪, 指标, 采样, propagation, baggage, jaeger, tempo, otlp
omeyang/Thoth · ★ 0 · AI & Automation · score 73
Install: claude install-skill omeyang/Thoth
# Go OpenTelemetry 专家 使用 Go OpenTelemetry SDK 开发可观测性功能:$ARGUMENTS --- ## 1. Observer 抽象模式 XKit 使用 `xmetrics.Observer` 统一观测接口,底层可切换 OTel 或 NoOp 实现。 ### 核心接口 ```go // Observer - 统一观测接口 type Observer interface { Start(ctx context.Context, opts SpanOptions) (context.Context, Span) } // Span - 观测区间 type Span interface { End(result Result) } // SpanOptions - 观测配置 type SpanOptions struct { Component string // 组件名 (如 "user-service") Operation string // 操作名 (如 "GetUser") Kind Kind // Internal/Server/Client/Producer/Consumer Attrs []Attr // 自定义属性 } // Result - 操作结果 type Result struct { Status Status // StatusOK 或 StatusError(未设置时从 Err 推导) Err error Attrs []Attr // 结果属性 } ``` ### 使用示例 ```go ctx, span := observer.Start(ctx, xmetrics.SpanOptions{ Component: "order-service", Operation: "CreateOrder", Kind: xmetrics.KindServer, Attrs: []xmetrics.Attr{xmetrics.String("order.id", orderID)}, }) defer span.End(xmetrics.Result{Err: err}) ``` ### NoOp 实现(用于测试或禁用观测) ```go type NoopObserver struct{} func (NoopObserver) Start(ctx context.Context, _ SpanOptions) (context.Context, Span) { return ctx, NoopSpan{} } // 安全的 nil 检查辅助函数 func Start(ctx context.Context, observer Observer, opts SpanOptions) (context.Context, Span) { if observer == nil { return ctx, NoopSpan{} } return observer.Start(ctx, opts) } ``` --- ## 2. OTel Observer 实现 ### 初始化 ```go // 默认使用全局 OTel Provider observer, err := xme