聊聊链路追踪 OpenTracing
聊聊链路追踪 OpenTracing 什么是 Tracing 对 Tracing 的定义是,在软件工程中,Tracing 指使用特定的日志记录程序的执行信息,与之相近的还有两个概念,它们分别是 Logging 和 Metrics。 Logging:用于记录离散的事件,包含程序执行到某一点或某一阶段的详细信息。 Metrics:可聚合的数据,且通常是固定类型的时序数据,包括 Counter、Gauge、Histogram 等。 Tracing:记录单个请求的处理流程,其中包括服务调用和处理时长等信息。 同时这三种定义相交的情况也比较常见。 Logging & Metrics:可聚合的事件。例如分析某对象存储的 Nginx 日志,统计某段时间内 GET、PUT、DELETE、OPTIONS 操作的总数。 Metrics & Tracing:单个请求中的可计量数据。例如 SQL 执行总时长、gRPC 调用总次数。 Tracing & Logging:请求阶段的标签数据。例如在 Tracing 的信息中标记详细的错误原因。 针对每种分析需求,我们都有非常强大的集中式分析工具。 Logging:ELK,近几年势头最猛的日志分析服务,无须多言。 Metrics:Prometheus,第二个加入 CNCF 的开源项目,非常好用。 Tracing:OpenTracing 和 Jaeger,Jaeger 是 Uber 开源的一个兼容 OpenTracing 标准的分布式追踪服务。目前 Jaeger 也加入了 CNCF。 原理 分布式追踪系统大体分为三个部分,数据采集、数据持久化、数据展示。数据采集是指在代码中埋点,设置请求中要上报的阶段,以及设置当前记录的阶段隶属于哪个上级阶段。数据持久化则是指将上报的数据落盘存储,例如 Jaeger 就支持多种存储后端,可选用 Cassandra 或者 Elasticsearch。数据展示则是前端根据 Trace ID 查询与之关联的请求阶段,并在界面上呈现。 上图是一个请求的流程例子,请求从客户端发出,到达负载均衡,再依次进行认证、计费,最后取到目标资源。 请求过程被采集之后,会以上图的形式呈现,横坐标是时间,圆角矩形是请求的执行的各个阶段。 ...