分布式追踪



问题陈述

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

解决方案

我们可以构建一个服务来执行以下操作:

  • 关联ID - 为每个外部请求生成一个唯一的外部请求ID,并将此外部ID传递给处理该请求的每个服务。

  • 记录关联ID - 处理服务生成的每个日志消息都应包含此关联ID。

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

可搜索日志

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

Log Aggregator Pattern

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

广告