关于日志记录:如何跨多个 Web 应用程序、多个微服务跟踪会话

How to track session across several web apps, multiple microservices

我想跨多个 Web 应用程序、多个微服务跟踪会话。我所有的 Web 应用程序都是静态文件,并且微服务在带有 Kubernetes 的 nodejs 容器下运行。

我在单独的 Web 应用程序和单独的微服务之间进行了跟踪设置。但是在一个视图中合并和查看所有内容太麻烦了。

有什么方法可以在单个会话下查看所有这些吗?


Kubernetes 本身不支持任何请求跟踪,但是你可以将 Istio 与具有分布式跟踪功能的 Kubernetes 一起使用。

简而言之,您的应用程序需要重新发送附加的标头,而 Istio 会检测到它,从您的所有服务中收集信息并向您显示请求跟踪。

此外,它还支持 Mesh,因此,理论上,您的应用程序可以运行得更快、更安全(因为网络规则)。

您可以在此处阅读有关 Istio 的信息,在此处了解有关跟踪的信息,这里是有关如何在 Kubernetes 中设置它的说明。


您可以使用特殊标头跟踪不同微服务(应用程序)的 HTTP 请求,以将所有后续请求与原始请求相关联。

例如,您的 Web 应用向第一个微服务 (A) 发送 HTTP 请求(REST API 调用),该微服务发现该请求没有关联 ID(x-correlationid 标头)并添加它,然后保存该关联id 到当前调用/会话上下文中,并将其转发给所有后续对其他微服务的 API 调用。那么当所有其他微服务都遵循相同的逻辑时,它们也将添加/使用关联 ID,您将能够在系统中的所有微服务中跟踪请求。

许多 APM(应用程序性能监控)工具都使用这种模式。一旦您的所有日志汇总到一个位置,您就可以按某个相关 ID 过滤查询,以查看特定用户请求/操作的完整跟踪。