Skip to content

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/traces

TOML 格式:

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/traces

OpenTelemetry gRPC

yaml
tracing:
  otlp:
    grpc:
      endpoint: myotlpcollector:4317
      insecure: true

Jaeger(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.spanNameLimitspan 名称最大长度。0(不限制)
tracing.otlp.httpOTLP HTTP 配置。-
tracing.otlp.grpcOTLP gRPC 配置。-
tracing.samplingType采样类型(rateLimitingprobabilistic)。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: detailed

traceVerbosity 选项

  • min:仅基本 span
  • default:标准详细程度
  • detailed:详细追踪,包括所有中间件操作

适用场景

  • 分布式追踪:跨服务追踪请求路径
  • 性能瓶颈分析:识别慢服务
  • 故障排查:追踪特定请求的处理流程
  • 依赖分析:了解服务依赖关系

最佳实践

  1. 使用 OpenTelemetry:标准协议,可与各种后端集成
  2. 配置采样:使用概率采样(如 1%)减少开销
  3. 设置 serviceName:使用有意义的名称区分环境
  4. 使用 OTLP over gRPC:性能更好
  5. 注意敏感数据:tracing 可能包含敏感头,需要过滤

在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布