用途:在分布式系统中追踪请求链路,理解延迟、服务依赖与失败点,排查延迟问题、识别瓶颈、追踪错误传播并分析请求路径。
核心概念:Trace(端到端请求)、Span(单次操作)、Context(服务间传播的元数据)、Tags(过滤键值对)、Logs(Span 内时间戳事件)。
部署方式:Jaeger 可用 Kubernetes(Jaeger Operator)或 Docker Compose(jaegertracing/all-in-one 镜像,UI 端口 16686);Tempo 以 Kubernetes ConfigMap/Deployment 部署,接收 Jaeger 与 OTLP 协议,后端存储支持 S3。
埋点:推荐 OpenTelemetry,资料提供 Python(Flask)、Node.js(Express)、Go 示例,涵盖 TracerProvider 初始化、Jaeger 导出器与框架自动埋点。
上下文传播:使用 W3C traceparent/tracestate 头,Python 用 opentelemetry.propagate.inject,Node.js 用 propagation.inject 注入下游请求头。
采样:支持概率采样(如 0.01)、限流采样(如每秒 100 条)和基于 TraceId 的自适应采样(ParentBased + TraceIdRatioBased)。
分析:Jaeger 查询可按 service、duration > 1s、error=true、http.status_code >= 500 过滤,并自动生成服务依赖图,展示关系、请求率、错误率与平均延迟。
最佳实践:生产采样 1-10%、添加有意义标签、跨边界传播上下文、在 Span 中记录异常、统一操作命名、监控追踪开销(CPU 影响 <1%)、为追踪错误配置告警、实现 baggage、使用 Span 事件标记里程碑、记录埋点标准。日志可通过 trace_id 与追踪关联。
排障:无追踪时检查采集端点、网络、采样配置与应用日志;开销过高时降低采样率、使用批量 Span 处理器、检查导出器配置。
相关技能:prometheus-configuration、grafana-dashboards、slo-implementation。
限制:资料未提供具体版本兼容性说明、成本与性能基准数据,也未给出生产环境完整验证步骤;示例配置需结合实际环境调整。