单体应用环境下,一次请求的过程可以通过记录日志踩点的方式近似还原请求的执行的过程,但是到了微服务环境下,这种方式就先得捉襟见肘了。当出错误或系统性能瓶颈时,可观测的请求拓扑和调用链详情对解决问题就显得异常重要了。
分布式链路追踪就是将分布式环境下的一次请求还原成调用链路,并将调用过程的详细信息通过可视化方式展现在我们面前,比如:各个节点上接口的耗时、接口的错误信息、请求状态以及问题发生在哪台机器上等。
谈到链路追踪就会涉及到Tracing
、Metrics
、Logging
三个概念,具体如下:
- Tracing:用于记录单个请求的处理流程,包括服务调用、请求耗时以及响应状态等信息
- Metrics:可聚合的监控指标数据,目前以开源的
Prometheus
四种类型为标准,包括:Counter
、Guage
、Histogram
等 - Logging:记录关键节点的日志事件,如:请求接口返回信息、服务建立连接的异常错误等
以上三种类型也存在相交的情况,通常使用也比较广泛:
- Logging & Metrics:可聚合的日志事件。如:统计接口返回错误的数量等
- Metrics & Tracing:请求链路中可计量的数据:如:gRPC调用的总次数、RESTAPI接口耗时分布等
- Tracing & Logging:用于给请求链路中的节点打标签数据。如:链路中请求某个接口具体的错误信息等