2

我正在尝试在整个微服务架构中设置分布式事件跟踪。

以下是关于我们架构的一些前言:

  1. Traefik 负载均衡器,根据路由路径名将请求转发到适当的后端服务。

  2. 一个“catchall”路由上的前端应用程序,只要一个路由没有被另一个微服务捕获,就会提供服务。

  3. 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应该如何工作的理解不正确。

4

1 回答 1

1

啊。我是一个白痴。

对于其他可能会遇到这样的问题的人来说,这是出了什么问题:

前端应用程序正在接收标头,我只是看错了地方。

请求来自负载均衡器到节点前端微服务,该微服务将其响应发送到浏览器。

我正在检查浏览器的标头,但节点前端微服务没有将此标头转发到浏览器。

于 2019-07-19T21:47:14.370 回答