我正在尝试在整个微服务架构中设置分布式事件跟踪。
以下是关于我们架构的一些前言:
Traefik 负载均衡器,根据路由路径名将请求转发到适当的后端服务。
一个“catchall”路由上的前端应用程序,只要一个路由没有被另一个微服务捕获,就会提供服务。
node/dotnetcore 中的各种后端服务正在监听
/api/<serviceName>
traefiktraceContextHeaderName
设置为"trace-id"
.
我想象这将如何工作是前端应用程序从负载均衡器接收标头“trace-id”,其值可用于将跨度“链接”在一起以获取相关请求。
示例场景:
当客户加载尝试登录时,他们向 Web 应用程序发出请求,接收并呈现 HTML/CSS/JS,然后/api/auth/login
可以使用登录数据和"trace-id"
traefik 提供的标头值发布后续请求。处理/api/auth/login
端点的后端服务可以捕获此"trace-id"
标头值并将一些跨度发布到 jaeger,这些跨度与它为验证用户所做的工作相关。
怎么了:
当对前端 HTML 发出请求时,不会"trace-id"
收到任何标头,因此任何后续发布的跨度都被视为单独的跟踪,并且不会链接在一起。
traefik.toml:
...
[tracing]
backend = "jaeger"
serviceName = "traefik"
spanNameLimit = 0
[tracing.jaeger]
samplingServerURL = "http://jaeger:5778/sampling"
samplingType = "const"
samplingParam = 1.0
localAgentHostPort = "jaeger:6831"
traceContextHeaderName = "trace-id"
...
我了解 StackOverflow 不是“为我编写代码”服务。我正在寻找可能出现问题的指导,因为我是分布式事件跟踪的新手。我试过谷歌搜索和寻找答案,但我走到了死胡同。
任何有关在哪里查看的帮助/建议将不胜感激。
请让我知道我是否在吠叫错误的树,错误地接近它,或者我对traceContextHeaderName
应该如何工作的理解不正确。