Traefik v2 如何通过中间件在请求头中添加唯一Trace ID
解决方案
- 你可以直接使用Traefik v2.x内置的
requestid中间件实现需求,该中间件会自动生成UUID格式的唯一请求ID,无需额外引入第三方服务或插件。 - 该中间件支持自定义请求头名称,你可以直接将头名设置为优先需要的
Trace-ID,也可以同时配置多个ID头满足不同场景需求。
修改后的完整配置
version: "3.3" services: traefik: image: traefik:v2.4 container_name: traefik environment: - TRAEFIK_ENTRYPOINTS_WEB=web - TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80 - TRAEFIK_API_INSECURE=true # 启用Dashboard - TRAEFIK_PROVIDERS_DOCKER=true # 启用Docker Provider - TRAEFIK_LOG_LEVEL=INFO # 设置日志级别为INFO - TRAEFIK_ACCESSLOG=true # 启用访问日志 ports: - 80:80 - 8080:8080 volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" headers: image: akalipetis/headers:latest # 该镜像会打印所有HTTP Headers container_name: headers labels: - "traefik.enable=true" - "traefik.http.routers.headers.middlewares=testTraceId" # 配置requestid中间件,生成唯一UUID并存入Trace-ID头 - "traefik.http.middlewares.testTraceId.requestid.header=Trace-ID" # 如果需要同时添加X-Request-ID、X-Trace-ID头,取消注释以下4行配置即可 # - "traefik.http.middlewares.testTraceId.requestid.header=X-Request-ID" # - "traefik.http.middlewares.copyId.headers.customrequestheaders.Trace-ID={X-Request-ID}" # - "traefik.http.middlewares.copyId.headers.customrequestheaders.X-Trace-ID={X-Request-ID}" # - "traefik.http.routers.headers.middlewares=testTraceId,copyId" - "traefik.http.services.headers.loadbalancer.server.port=8000" - "traefik.http.routers.headers.rule=Host(`headers.localhost`)" - "traefik.http.routers.headers.entrypoints=web"
配置生效后,所有访问headers.localhost的请求都会自动携带唯一UUID格式的Trace-ID请求头,每个请求的ID互不重复。
内容的提问来源于stack exchange,提问作者Janshair Khan
相关产品推荐
相关产品推荐

