Traefik 链路追踪(Tracing)
链路追踪
Traefik Proxy 中的链路追踪使你能够跟踪系统中操作的流转。使用 traces 和 spans,你可以识别性能瓶颈,定位导致速度变慢的应用程序,从而有效地优化响应时间。
Traefik Proxy 使用 OpenTelemetry 来导出 traces。OpenTelemetry 是一个开源的可观测性框架。你可以将 traces 发送到 OpenTelemetry 收集器,然后导出到各种后端,如 Jaeger、Zipkin 或 Datadog。
配置
要在 Traefik Proxy 中启用链路追踪,你需要在静态配置文件或 Helm values 中进行配置。
OpenTelemetry HTTP
YAML 格式:
yaml
tracing:
otlp:
http:
endpoint: http://myotlpcollector:4318/v1/tracesTOML 格式:
toml
[tracing.otlp.http]
endpoint = "http://myotlpcollector:4318/v1/traces"Helm Chart Values:
yaml
tracing:
otlp:
enabled: true
http:
enabled: true
endpoint: http://myotlpcollector:4318/v1/tracesOpenTelemetry gRPC
yaml
tracing:
otlp:
grpc:
endpoint: myotlpcollector:4317
insecure: trueJaeger(OpenTelemetry 替代)
Jaeger 现在通过 OpenTelemetry 协议支持。请使用 OTLP 并部署 Jaeger OTel collector。
Zipkin(OpenTelemetry 替代)
Zipkin 现在通过 OpenTelemetry 协议支持。请使用 OTLP 并部署 Zipkin OTel collector。
Datadog
yaml
tracing:
datadog:
localAgentHostPort: "127.0.0.1:8126"
prioritySampling: true
traceID128BitGenerationEnabled: true配置选项
| 字段 | 描述 | 默认值 |
|---|---|---|
tracing.serviceName | 服务名称。 | traefik |
tracing.spanNameLimit | span 名称最大长度。 | 0(不限制) |
tracing.otlp.http | OTLP HTTP 配置。 | - |
tracing.otlp.grpc | OTLP gRPC 配置。 | - |
tracing.samplingType | 采样类型(rateLimiting、probabilistic)。 | rateLimiting |
tracing.samplingParam | 采样参数。 | 100(rateLimiting)或 1.0(probabilistic) |
Per-Router 追踪
可以为每个路由器单独启用或禁用追踪:
yaml
http:
routers:
my-router:
rule: Path(`/foo`)
service: service-foo
observability:
tracing: false
traceVerbosity: detailedtraceVerbosity 选项
min:仅基本 spandefault:标准详细程度detailed:详细追踪,包括所有中间件操作
适用场景
- 分布式追踪:跨服务追踪请求路径
- 性能瓶颈分析:识别慢服务
- 故障排查:追踪特定请求的处理流程
- 依赖分析:了解服务依赖关系
最佳实践
- 使用 OpenTelemetry:标准协议,可与各种后端集成
- 配置采样:使用概率采样(如 1%)减少开销
- 设置 serviceName:使用有意义的名称区分环境
- 使用 OTLP over gRPC:性能更好
- 注意敏感数据:tracing 可能包含敏感头,需要过滤
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。