SuperAPI AI 工具集

distributed-tracing

部署与运维

查看项目

更新于 10-16 06:57

技能介绍

分布式追踪技能用于跨微服务追踪请求链路,核心基于 OpenTelemetry 进行埋点,并配合 Jaeger 或 Grafana Tempo 作为后端存储与查询界面。

主要能力与用途:帮助定位微服务调用链中的瓶颈、失败点与链路断点。资料给出的排查关注点包括:长耗时 Span(瓶颈识别)、错误 Span(请求失败位置)、扇出(一个请求触发大量下游调用,服务级别的 N+1 问题)、缺失 Span(服务未埋点)、Trace 断点(服务间上下文未传播)。

快速启动 Jaeger:通过 Docker 运行 all-in-one 实例,命令为 docker run -d --name jaeger -p 16686:16686 -p 4317:4317 -p 4318:4318 jaegertracing/jaeger:latest,UI 地址为 http://localhost:16686。

Node.js 接入:安装依赖 npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-grpc;编写 tracing.js,在应用代码之前加载,使用 NodeSDK 配合 OTLPTraceExporter(url 为 http://localhost:4317)与 getNodeAutoInstrumentations,并设置 serviceName;运行方式为 node -r ./tracing.js app.js。

Python 接入:安装 pip install opentelemetry-sdk opentelemetry-exporter-otlp opentelemetry-instrumentation;使用自动插桩命令 opentelemetry-instrument --service_name my-service --exporter_otlp_endpoint http://localhost:4317 python app.py。

查询 Trace:可通过 Jaeger API 以 curl 查询,例如按服务查找 Trace(http://localhost:16686/api/traces?service=my-service&limit=10)、查找慢 Trace(minDuration=1000000,即大于 1 秒)、查找带错误标签的 Trace(tags 为 {"error":"true"}),并可配合 jq 提取 traceID、Span 数量与耗时。

自定义 Span:使用 @opentelemetry/api 的 trace.getTracer 获取 tracer,通过 tracer.startActiveSpan 创建 Span,设置属性(如 order.id、order.total),捕获异常时调用 span.recordException 与 span.setStatus(code 2 表示错误),并在 finally 中结束 Span。

注意事项:自动插桩可覆盖 HTTP、数据库与消息队列调用;服务间需通过 traceparent 等 Header 传播追踪上下文;生产环境应采样,不要追踪每个请求,建议从 1%–10% 起步;Jaeger 适合开发环境,Grafana Tempo 更适合生产环境(可与 Grafana 仪表盘集成);Trace、指标与日志三者结合构成完整可观察性,可通过 trace ID 关联。

限制与暂未提供:资料未说明该技能的收费、价格、平台支持范围、性能指标或具体版本兼容性;Grafana Tempo 仅提及定位,未给出部署与配置步骤。