写点什么

eBPF 开发者大会上,乘云技术专家分享 eBPF 在故障定位场景中的应用

  • 2025-04-29
    浙江
  • 本文字数:2363 字

    阅读完需:约 8 分钟

eBPF开发者大会上,乘云技术专家分享eBPF在故障定位场景中的应用

2025 年 4 月 19 日,西安邮电大学计算机学院的第三届 eBPF 开发者大会在长安校区如期举行。本届大会选择以线下举办、线上同步直播的形式进行,吸引了众多技术爱好者和行业专家的关注。乘云数字技术专家匠心受邀参加,并为大家呈上了“ebpf 在故障定位中的应用”的主题演讲。



下面是关于这次演讲的内容精选。

ebpf 在故障定位中的应用

 

故障定位相关的三大类产品

以往与运维或故障定位相关的产品,大致可以分为三大类,NPM, APM 和 BPM。

  • NPM 产品关注的对象是网络设备以及网络流量相关的指标。一方面 NPM 会通过 NetFlow, sFlow, SNMP 等协议采集网络设备的内部数据,另一方面,这类产品还会通过网络旁路抓包的方式,对流量进行协议解析并计算出各类指标。

  • APM 产品关注的对象是应用/服务,是应用/服务的内部工作状态,关注接口相关的黄金指标,如请求/响应的吞吐率、错误率、资源饱和度等。APM 产品的主要功能有链路追踪、日志关联、服务拓扑等,目前主流的实现方案有应用代理、字节码增强等。

  • 最后一类是 BPM,BPM 产品专注于业务指标和流程性能监控的技术领域,涉及业务数据建模技术,业务数据关联等。

 

通过以上三类产品的简单描述,可知它们的目标对象和解决的问题各不相同,甚至由一个公司的不同部门人在使用。平时,每个部门的人只关心他们职能范围之内的事情,比如:

  • NPM 产品通常由网络运维部门的人使用,用来观察公司的网络设备是否正常工作,网络传输是否顺畅;

  • APM 产品可能由软件平台/软件基础设施的团队使用,用来维护公司的基础组件、中间件、数据库等是否运行无误;

  • 而 BPM 产品更多地跟业务团队紧密结合,用来支撑业务的高效运转。

 

相安无事的时候,一切其乐融融,但是当一个故障发生,而又无法快速定位到故障原因时,“故障就会转移”,一会儿怀疑是网络原因,一会儿怀疑是服务原因。三类产品齐上阵,却因各自独立,数据无法关联,无法输出统一有效的排障流程。最终只能多部门联合,通过各种各样的日志信息,靠人工一点一点地对比梳理来确定原因,这过程往往要耗费数天之久。

 

eBPF 打破工具壁垒

eBPF 的出现可以帮助打破工具壁垒,打通三类产品的数据通道,在此简单描述一下这个过程:

  • NPM 从流量中可以很轻易地获取到连接的五元组(协议+ IP + Port),以及以连接为视角的时延、吞吐率等指标。

  • APM 以进程和服务为对象,通过进程 ID、进程名为视角建立接口的各类指标。

  • BPM 同样以进程和服务为对象,建立业务的指标。


通过 eBPF 挂载到如 sendto 的系统调用函数,从中可以获取到进程和套接字信息(包含五元组信息),这样,NPM 和 APM 通过 eBPF 的信息,轻易地实现了连接,就像数据库中两张独立的数据表通过外键实现关联一样。


类似的,eBPF 的 uprobe 可以挂载到用户态的函数,从中获取业务相关的信息,再根据进程信息,完成与 NPM 和 APM 的数据连接。


乘云作为一家专业全面的可观测方案提供商,结合自身产品的特点,我们以 APM+eBPF+NPM 为切入点,提供了核心能力如下:

●     将采集指标深入到系统内部,如 tcp 连接队列、io 时延。

●     拓展 NPM 网络指标的维度,如进程 id, netns.

●     提高 NPM 相关指标的精度,如 rtt, rtt-var.

●     事后分析告警进化为事前预警和事中告警

●     部分业务数据的采集能力

 

案例

下面,我们来看一个案例,如下图:


观察图中的报文数据,我们总结出如下信息:

●     这是一条 HTTP/1.1 的长连接会话。

●     从第 5、9 报文看出,服务端接收到请求数据后,立即确认。

●     从第 10 个报文开始,服务端不会立即确认接收的数据,而是与响应数据一起确认,这说明 tcp 延迟确认机制开始工作。

●     从第 7、11、14、17 报文可以看出,客户端每次都是延迟约 40 ms 回复确认,这是常见的延迟确认机制超时时间。

 

在上图中,接下来有可能会发生以下的情形 (假设服务端没有设置 TCP_NODELAY 选项,即没有关闭 nagle 算法):

●     服务端在发送响应数据时,每次的数据量不足 MSS(1460 字节)大小,常见于通过 chunk 方式传输。

●     由于客户端的延迟确认,服务端每次都必须 40 ms 以后才能发送后续数据,这极大地限制了吞吐量(< 1460 / 40ms = 36 KB/s)。

以上的网络行为,通过 eBPF 的能力可以实时地观察到协议栈的工作状态,再结合 APM 对应用程序的分析,可以清晰地识别应用潜在问题。

 

接下来,我们看一段代码:

 

这段代码的本意是希望设置套接字的接收缓存区为 512 KB,结果程序运行正常,没有任何错误日志,但事实是该设置没有生效。通过下图的报文信息,可以发现原因: 缓存区的大小最终反应在 TCP 协议的接收窗口,大于 64 K 的接收窗口,需要通过 TCP 窗口扩展机制,而该扩展在 TCP 连接的三次握手时就已经完成。因此,对于从 accept 返回的套接字将继承 listen 的套接字设置,结果缓冲区仍然为 256 KB。


NPM 可以观察到 TCP 协议的各种字段值,但是却无法判断这些设置是否是真实的应用设置。而 eBPF 可以观察应用程序的上下文调用,再加上 APM 的跟踪信息,可以准确地检测到类似的问题。

 

Databuff 根因定位

最后,介绍一下乘云的 Databuff 根因定位功能,关于平台的试用申请、操作介绍等详细信息可以参考我司之前的技术文章和视频公众号。这里简要介绍一下目前平台集成的部分 eBPF 能力。

首先,在故障注入时,使用 eBPF 可以制造更多的故障类型,如造成某个请求或是系统调用的超时,或是根据注入时的故障参数,通过 sockops 类型修改某些网络设置,如下图所示


 

其次,通过 eBPF 采集的系统内部指标,为根因分析提供了更精准和实时的数据来源,极大提高故障定位的准确性。下图展示了 Databuff 平台在检测到网络指标出现异常时,推断出出现故障的服务接口,以及受到影响的服务调用链。

 


eBPF 技术对于运维产品带来的技术性推动,促进 NPM, APM,BPM 产品相关功能的整合,从而有助于更高效地定位 IT 故障。此外,我们乘云也在积极地拥抱 eBPF,正逐步地使用 eBPF 技术增强我们的故障注入平台和根因定位功能。

用户头像

聚焦数字化可观测赛道 2023-06-25 加入

让您的业务运行更安全更稳定

评论

发布
暂无评论
eBPF开发者大会上,乘云技术专家分享eBPF在故障定位场景中的应用_可观测性_乘云数字DataBuff_InfoQ写作社区