分布式跟踪
问题说明
微服务架构将应用程序构建为一组松散耦合的微服务,每个服务都可以以敏捷的方式独立开发,以实现持续交付/部署。 请求通常跨越多个服务。 使用外部监控,我们可以检查总体响应时间和数量。 调用的数量,但如何深入了解各个交易/操作。 服务可能使用数据库、消息队列、事件源等。如何跟踪跨多个服务的分散日志?
解决方案
我们可以检测旨在执行以下操作的服务 −
相关ID − 为每个外部请求生成一个唯一的外部请求 ID,并将此外部 ID 传递给处理请求所涉及的每个服务。
记录 Corelation ID − 处理服务生成的每条日志消息都应具有此关联 ID。
记录详细信息 − 当服务处理请求时,在日志中记录开始/结束时间和其他相关详细信息。
可搜索日志
由于日志应放置在集中位置,下图展示了如何使用 Kafka、LogStash 和 Kibana 聚合日志并使用所需的过滤器搜索索引日志。
微服务生成日志,使用 kafka 日志附加程序发布日志,然后将日志消息输出到 kafka 集群。 LogStash 从 kafka 获取消息,转换消息并发布到弹性搜索容器。 现在 kibana 提供了一个可视化界面来从弹性搜索容器中搜索/读取索引日志,并提供所需的过滤器。