天天看点

Envoy分布式链路追踪

虽然Istio一直讲服务治理和服务的可观测性对业务代码零侵入,但是要获得一个质量良好的调用链,应用程序还是要配合做些事情,比如需要在类似HTTP头的地方传递Span信息,这样这些Span才能被正确地链接成一个trace。因此要求应用程序必须收集和传递这些trace相关的头并传递出去。下面以http为例来简单介绍。

实现层面,Envoy分布式跟踪特性的初始化工作由MainImpl::initializeTracers负责,这里先判断是否为HTTP协议,然后使用配置文件中指定的跟踪插件名,调用对应插件factory的HTTP Tracer创建函数,完成HTTP Tracer的初始化。

一、Metric支持

Metric用于对Envoy的核心指标数据进行聚合,具体由stats子系统实现,Envoy stats包括3类核心统计数据。

  • Counter(计数器)

计数器用于对单调递增的统计项进行累加统计,比如请求总的QPS。

  • Gauge

Gauge也是一种很常见的计量,用于记录样本序列。和Counter相比,Gauge可以增加和减少,比如待处理队列中的任务个数、连接池空闲连接个数等,Counter只会增加不会减少,有一个单调变化的特征。

  • Histogram(直方图)

Histogram用于对一定范围内的样本进行统计分析,最终产生各个分位对应的统计值。分位是Histogram中常见的一个概念,比如50分位耗时A和平均耗时B是两个不同的概念。50分位耗时指50%的请求在A时间范围内返回;平均耗时指所有请求的平均处理时间,很多场景下分位统计比平均统计更能反映数据的分布特性。比如对于请求处理耗时,通过Histogram可以得出50分位的耗时统计、99分位的耗时统计等。

二、Log支持

继续阅读