分布式追踪


问题陈述

微服务架构将应用程序构建为一组松散耦合的微服务,每个服务都可以以敏捷的方式独立开发,以实现持续交付/部署。请求通常跨越多个服务。使用外部监控,我们可以检查总体响应时间和数量。调用的数量,但如何深入了解各个交易/操作。服务可能使用数据库、消息队列、事件源等。如何跟踪跨多个服务的分散日志?

解决方案

我们可以检测旨在执行以下操作的服务 -

  • Corelation ID - 每个外部请求生成一个唯一的外部请求 ID,并将该外部 ID 传递给处理请求所涉及的每个服务。

  • 记录相关 ID - 处理服务生成的每条日志消息都应具有此相关 ID。

  • 记录详细信息- 当服务处理请求时,在日志中记录开始/结束时间和其他相关详细信息。

可搜索的日志

由于日志应放置在集中位置,下图展示了如何使用 Kafka、LogStash 和 Kibana 聚合日志并使用所需的过滤器搜索索引日志。

日志聚合器模式

微服务生成日志,使用 kafka 日志附加程序发布日志,然后将日志消息输出到 kafka 集群。LogStash 从 kafka 获取消息,转换消息并发布到弹性搜索容器。现在 kibana 提供了一个可视化界面来从弹性搜索容器中搜索/读取索引日志,并提供所需的过滤器。