写点什么

Envoy 分布式链路追踪

作者:阿泽🧸
  • 2022 年 7 月 21 日
  • 本文字数:976 字

    阅读完需:约 3 分钟

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 支持

Envoy Log 当前只有对 HTTP 协议有着完善的支持,内置对 HTTP 访问日志的支持。HTTP 访问日志特性主要由日志过滤、日志格式化和日志输出 3 部分组成。HTTP 日志输出时,首先通过相应的日志过滤模块过滤获取匹配的日志,然后通过日志格式化模块对日志进行格式化和标准化,最后将格式化日志按照日志输出模块的要求,输出到相应的位置,方便后续的日志分析和查询。


HTTP 网络协议处理插件 HttpConnectionManager 负责 HTTP 协议的解析和路由转发处理,会解析 HTTP 启动配置,用于 HTTP 协议的处理。针对 access_log 特性,调用 access_log 的工厂方法,根据 access_log 配置,创建相应的 access_log 实例。


access_log 实例构建具体由 AccessLogFactory::fromProto 负责完成。fromProto 会先根据配置创建相应的日志过滤器,然后调用 factory.createAccessLogInstance 创建相应的 access_log 实例。

发布于: 刚刚阅读数: 4
用户头像

阿泽🧸

关注

还未添加个人签名 2020.11.12 加入

还未添加个人简介

评论

发布
暂无评论
Envoy分布式链路追踪_envoy_阿泽🧸_InfoQ写作社区