如何通过端到端的微服务链跟踪请求?

Posted

技术标签:

【中文标题】如何通过端到端的微服务链跟踪请求?【英文标题】:How to tracing a request through a chain of microservices end-to-end? 【发布时间】:2020-01-13 14:25:21 【问题描述】:

我在 Go 中使用 OpenCensus 将跟踪数据推送到 Stackdriver,以处理涉及 2 个或更多微服务链的调用,我注意到我得到了许多跟踪,其中仅包含某些服务的跨度,而不是整个端到端调用。

目前,我将此归因于并非所有调用都被跟踪(仅某个样本)并且每个服务决定是否跟踪其当前跨度这一事实。

这是它的预期工作方式吗?有什么方法可以确保在对跟踪进行采样时,调用链中的所有服务都会这样做?

【问题讨论】:

【参考方案1】:

在架构上,我会说,当您开发微服务时,请确保您的 API 网关创建一个唯一的 ID,如 GUID,该 ID 会通过所有微服务传播,同样,您要确保您有日志聚合器,它将从所有微服务中收集日志服务和最后你得到很好的请求可追溯性。

【讨论】:

谢谢,但是 opencensus 似乎已经在沿途的每个跨度上生成了这个 ID。我不是在这里谈论日志记录或指标,只是跟踪

以上是关于如何通过端到端的微服务链跟踪请求?的主要内容,如果未能解决你的问题,请参考以下文章

第七章分布式链路跟踪(Sleuth)

微服务的调用链

Spring Cloud构建微服务架构 分布式服务跟踪(跟踪原理)Dalston版

rabbitmq+sleuth+zinkip 分布式链路追踪

使用OpenTelemetry进行端到端跟踪

微服务前端和后端的交互