You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Traefik TCP路由配置Jaeger链路追踪?

Traefik TCP路由无OpenTelemetry追踪Span问题排查与解决

问题场景

已基于Docker Compose部署Jaeger、Traefik v3.1.3和traefik-whoami测试服务:

  • HTTP路由代理正常,Jaeger中能看到完整追踪链路(包含Traefik内部Span)
  • TCP路由代理功能正常,但Jaeger中无任何TCP相关的追踪数据
  • 仅需获取Traefik处理TCP请求的内部Span,无需上下文传播

当前部署配置

docker-compose.yml

version: "3"
services:
  jaeger:
    image: jaegertracing/all-in-one
    ports:
      - "16686:16686"
  traefik:
    image: traefik:v3.1.3
    volumes:
      - ./traefik_cfg/:/etc/traefik/
    ports:
      - "9000:9000"
      - "18080:80"
  whoami:
    image: traefik/whoami
    ports:
      - "28080:80"

traefik.toml

[global]
checkNewVersion = false
sendAnonymousUsage = false

[log]
level = "DEBUG"

[api]
dashboard = true
insecure = true

[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.tcp]
address = ":9000"

[providers]
[providers.file]
filename = "/etc/traefik/dynamic_conf.toml"


[tracing]
addInternals = true
[tracing.otlp.grpc]
endpoint = "jaeger:4317"
insecure = true

dynamic_conf.toml

[tcp]
  [tcp.routers]
    [tcp.routers.whoami-tcp]
      entryPoints = ["tcp"]
      rule = "HostSNI(`*`)"
      service = "whoami-tcp-svc"

    [tcp.services.whoami-tcp-svc.loadBalancer]
      [[tcp.services.whoami-tcp-svc.loadBalancer.servers]]
        address = "whoami:80"


[http.routers]
  [http.routers.whoami-http]
    entryPoints = ["web"]
    rule = "PathPrefix(`/whoami`)"
    service = "whoami-http-svc"

[http.services]
  [http.services.whoami-http-svc]
    [http.services.whoami-http-svc.loadBalancer]
      [[http.services.whoami-http-svc.loadBalancer.servers]]
        url = "http://whoami:80"

解决方法

Traefik v3中,TCP路由的追踪需要显式在TCP路由器配置中开启追踪开关——HTTP路由默认继承全局追踪配置,但TCP路由需单独声明。

修改dynamic_conf.toml中的TCP路由器配置,添加tracing = true:

[tcp]
  [tcp.routers]
    [tcp.routers.whoami-tcp]
      entryPoints = ["tcp"]
      rule = "HostSNI(`*`)"
      service = "whoami-tcp-svc"
      tracing = true  # 新增该行启用TCP路由追踪

验证步骤

  1. 重启Traefik服务加载新配置
  2. 发送TCP请求测试:使用nc localhost 9000,输入GET / HTTP/1.1并回车两次模拟HTTP请求(或直接用telnet发送数据)
  3. 打开Jaeger UI(http://localhost:16686),筛选Traefik服务,即可看到TCP请求的内部追踪Span

额外排查点

  • 查看Traefik DEBUG日志,确认是否有Starting TCP tracing span类日志,若存在说明追踪已触发
  • 确保Jaeger容器的4317端口在Docker网络中正常可达(traefik与jaeger同属默认网络,无需额外配置)

内容的提问来源于stack exchange,提问作者user33262

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:10:07