调用链追踪
#1. 调用链追踪
DeepFlow 通过调用链追踪
将一次调用涉及到的应用 Span、系统 Span 及网络 Span 都在一张火焰图中呈现,真正让业务开发团队、框架开发团队、服务网格运维团队、容器运维团队、DBA 团队、云运维团队多部门在一个平台协作起来。
#1.1 总览介绍
对调用链追踪
功能页面中的一个调用发起追踪
操作,然后通过右滑框的形式展现,此图为链路调用追踪的展示方式,如下图所示。
注: 调用链追踪的火焰图和拓扑图暂时不支持加入视图
00-总览
调用追踪右滑框分三部分:头部信息、数据可视化、调用信息数据列表
- ① 头部信息: 展示链路的基本信息,如客户端,服务端,开始请求时间,持续时间,请求类型,请求资源等
- ① 数据可视化: 调用追踪 Span 数据以火焰图方式展示或调用追踪的服务以拓扑图的方式展示
- ② 调用信息数据列表: 展示调用的关联信息
#1.1.1 火焰图
01-火焰图
火焰图由多个条状 bar
组成,每个条状 bar
代表一个 Span,x 轴以时间为维度,y 轴以调用堆栈深度为维度,按 Span 调用的顺序从上到下进行展示,下面将进行详细的介绍:
- 长度: 结合 x 轴,表达的是一个 Span 的执行时间,两端分别对应这个开始时间及结束时间
- 服务列表: 展示每个服务消耗的时延占比,点击服务可与
火焰图
联动,高亮服务对应的 Span- 颜色: 应用 Span 与系统 Span 为每一个服务代表一种颜色;所有的网络 Span 都为灰色(因为网络 Span 不属于任何一个服务)
- 显示信息: 条状 bar 的
显示信息
由图标
+调用信息
+执行时间
组成- 图标: 通过图标来区分不同类型的 Span
- A: 应用 Span,通过 Opentelemetry 协议收集的 Span,覆盖业务代码、框架代码
- S: 系统 Span,通过 eBPF 零侵入采集的 Span,覆盖系统调用、应用函数(如 HTTPS)、API Gateway、服务网格 Sidecar
- N: 网络 Span,通过 BPF 从网络流量中采集的 Span,覆盖 iptables、ipvs、OvS、LinuxBridge 等容器网络组件
- 调用信息: 不同 Span 展示的
调用信息
略有不同- 应用 Span 和系统 Span:
应用协议
、请求类型
、请求资源
- 网络 Span:
观测点
- 应用 Span 和系统 Span:
- 执行时间: Span 从开始到结束消耗的所有时间
- 图标: 通过图标来区分不同类型的 Span
- 操作: 支持
悬停
与点击
- 悬停: 悬停到 Span,以 TIP 的形式展示
调用信息
+实例信息
+执行时间
- 实例信息: 应用 Span 展示的是
服务
+资源实例
;系统 Span 展示的是进程
+资源实例
;网络 Span 展示的是网卡
+资源实例
- 执行时间: 展示了 Span 的整个执行时间,即自身执行时间的占比
- 实例信息: 应用 Span 展示的是
- 点击: 点击 Span,高亮自身及父 Span,也可查看被点击 Span 的详细信息
- 悬停: 悬停到 Span,以 TIP 的形式展示
- 收起侧边栏: 点击后支持将
服务列表
收起
#1.1.2 调用拓扑图
02-调用拓扑图
调用拓扑图将数据进行有序结构化展示,数据以服务聚合为节点,每个节点之间用水平竖的折线将 Span 之间的父子关系展示出其请求调用关系,下面将进行详细的介绍:
- 节点: 对应到火焰图中服务列表的服务,将同一个服务下的一个或者多个 Span 聚合为一个节点,并展示该服务在调用链中所用耗时
- 显示信息: 以方形节点
显示信息
由图标
+调用信息
+自身耗时
组成- 图标: 通过图标来区分不同类型的 Span,使用详情,请参阅【火焰图】章节
- 自身耗时:服务所对应的一个或多个 Span 的耗时总和
- 显示信息: 以方形节点
- 路径: 对应火焰图中的
父Span
到子Span
的关系进行拓扑路径绘制 - 操作: 支持
悬停
与点击
,使用详情,请参阅【火焰图】章节
#1.1.3 下方 Tab
#1.1.3.1 调用详情
通过列表的形式展示火焰图中 Span 的详情信息,点击火焰图的 Span 则对应的调用详情会在列表高亮;反之,点击列表中的行则能高亮对应的 Span。
调用详情
#1.1.3.2 IO 事件
点击火焰图中系统 Span 时,如果系统 Span 对应的进程存在 IO 读写事件时,则可以查看对应的 IO 事件。通过 IO 事件 Tab 可快速的查看 Span 对于文件读写消耗的时间。
IO 事件
① 第一行: 叠加下面所有线程的 IO 事件块,重叠越多,颜色越重。 ② 线程行: 展示每个线程的 IO 事件,每一个块对应一个事件,块的长度根据 IO 事件的开始时间与结束时间计算而来
- Tip:由
文件名称
+IO 事件类型
+事件持续时间
组成 ③ 详情信息: 展示 IO 事件的详情
#1.1.3.3 流日志
点击火焰图中网络 Span 时,分析调用日志对应时间段流日志的时延数据。
流日志
① 状态行: 确定观测点、流持续时间以及流日志状态
② 时延: 可分析网络相关时延,包含 TCP 建连时延、TLS 建连时延、平均数据时延、平均系统时延、平均客户端等待时延。时延的计算方式可参考指标示意图
#1.1.3.4 Span 溯源
当需要分析火焰图中的 Span 为什么存在时,可使用 Span 溯源功能。点击火焰图中 Span 时,通过列表的形式展示与其他 Span 的关联关系。DeepFlow 的分布式追踪是根据一系列 ID 来计算完成的,包含 TraceID、SpanID、ParentSpanID、请求 X-Request-ID、响应 X-Request-ID、请求 Syscall TraceID、响应 Syscall TraceID、请求 TCP Seq 号、响应 TCP Seq 号,当 ID 存在关联关系时,Span 之间就能关联显示在一张火焰图中,其中 ID 的关联关系在列表中会通过紫色标注出来。
Span 溯源
① 被点击 Span: 火焰图被点击 Span ① 关联 Span: 与被点击 Span 存在关联关系的 Span
#1.1.4 火焰图快速理解
火焰图示例
火焰图从左到右代表了时间的流逝,在上图的样例调用链中,一次业务请求的完整处理经过了如下过程:
- (1) 「Client」进程发起了 http get 请求,经过多个网卡的传输到达「前端服务」;
- (2) 「前端服务」为了完成此次业务处理,首先向「DNS 服务」发起 dns query,并经过网络传输到达「DNS 服务」;
- (3) 「DNS 服务」对 query 进行处理,向「前端服务」返回 dns response,经网络传输到达「前端服务」;
- (4) 「前端服务」继续发起 sql 查询,经过网络传输到达「MySQL 服务」;
- (5) 「MySQL 服务」经过查询处理,向「前端服务」返回 sql 响应,并经过网络传输到达「前端服务」;
- (6) 「前端服务」继续发起 rpc 请求,经过网络传输到达「RPC 服务」;
- (7) 「RPC 服务」经过处理,返回 rpc 响应,并经过网络传输到达「前端服务」;
- (8) 「前端服务」收到 rpc 响应后,向「Client」回复最终的 http 响应,并经过网络传输最终到达「Client」。
任意两个 Span 的长度的差值,表征了两个位置之间引入的时延量。
#1.1.5 火焰图分析示例
- 示例 1:网络 Span 间差值明显
在下图中两个网络 Span 之间的差值明显,即说明调用数据包在 2 个网卡之间传递出现了明显时延。如果 2 个网卡分别为「客户端容器节点」、「服务端容器节点」,则说明慢响应的根源是容器节点间的转发网络。
慢调用火焰图示例 1-网络 Span差值明显
- 示例 2:系统 Span 间差值明显
在下图中「前端服务」两个系统 Span 之间的差值明显,即说明慢响应根源在「前端服务」进程处理过程。
慢调用火焰图示例 2-系统间 Span差值明显
- 示例 3:末端系统 Span 长度明显
在下图中「DNS 服务」的长度明显,即说明慢响应源自「DNS 服务」进程处理过程。
慢调用火焰示例 3-末端系统 Span长度明显