我正在尝试在整个微服务体系结构中建立分布式事件跟踪。
以下是有关我们的体系结构的一些序言:
Traefik负载平衡器,根据路由路径名将请求转发到适当的后端服务。
“ catchall”路由上的前端应用程序,只要路由没有被另一个微服务捕获,该服务就会被提供。
节点/ dotnetcore中的各种后端服务正在/api/<serviceName>
traefik的设置是将traceContextHeaderName
设置为"trace-id"
。
我如何想象这是可行的,因为前端应用程序从负载均衡器接收到一个标头“ trace-id”,该标头的值可用于将相关请求的跨度“链接”在一起。
示例场景:
当客户加载尝试登录时,他们向Web应用程序发出请求,接收并呈现HTML / CSS / JS,然后可以将/api/auth/login
的后续请求与登录数据和traefik提供的"trace-id"
标头的值。
处理/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
应该如何工作的理解不正确。
答案 0 :(得分:0)
U。我是白痴。
对于其他可能会被卡住的人来说,这是哪里出了问题:
前端应用程序 正在接收标头,我只是在错误的位置查看。
请求从负载均衡器发送到节点前端微服务,该节点将其响应发送到浏览器。
我正在检查浏览器中的标头,但是节点前端微服务没有将此标头转发到浏览器。