应用监控 eBPF 版:实现高效协议解析的技术探索
内容提要
ARMS推出了应用监控eBPF版,提供无侵入、语言无关的可观测能力。eBPF具有实时性、精确性、灵活性、低开销和安全性等优势。本文提出了一种高效的协议解析方案,通过数据采集、协议推断、事件分流和协议解析提高效率。
延伸解读
传统协议解析的瓶颈
传统基于eBPF的协议解析方案在数据采集阶段无法筛选协议,导致大量无关数据占用perf buffer,引发高内存占用。高QPS下perf buffer迅速填满,处理不及时会丢失事件,尤其是控制层事件可能因数据层事件过多而丢失。此外,用户态解析需要遍历尝试所有支持协议,造成大量无效解析,增加CPU负担。这些瓶颈在高流量微服务场景中尤为突出。
新方案的核心改进
新方案在数据采集后增加协议推断和事件分流两个环节。协议推断在内核态通过协议帧头快速判断是否为支持协议,仅将疑似数据传递至用户态,减少无效传输。事件分流将控制事件与数据事件分别放入不同perf buffer,避免控制事件被数据事件淹没。用户态中,控制事件用于连接维护,数据事件按流向放入发送/接收队列,周期性分帧后匹配协议解析器,提升解析效率。
连接维护与请求响应匹配
在长连接场景下,连接元数据(如源IP、端口)通常不变,新方案在用户态维护连接信息,仅传递连接ID,降低网络带宽。部分协议如MySQL的版本号、编码等信息仅在连接建立时发送,维护连接信息才能正确解析。数据分帧依据协议结束标识(如MySQL的EOF帧)从数据流中拆解出独立帧,再按协议解析。请求与响应按时间序匹配,形成完整可观测记录,用于生成Span。
Q&A
ARMS 应用监控 eBPF 版是什么?它有什么特点?
ARMS 应用监控 eBPF 版是阿里云应用实时监控服务 ARMS 推出的监控方案,通过 eBPF 技术提供无侵入、语言无关的可观测能力,用于完善应用监控体系。
eBPF 技术在可观测性方面有哪些优势?
eBPF 在可观测性方面具有实时性、精确性、灵活性、低开销和安全性等优势。它能实时捕获分析数据,通过精细 hook 点准确收集数据,支持定制监控,且程序直接在内核空间运行避免上下文切换,执行前还会经过严格安全检查。
传统的 eBPF 协议解析方案存在哪些问题?
传统方案存在三个主要问题:高内存占用,因为数据采集时无法筛选协议,大量无关数据占满 perf buffer;事件丢失风险,高 QPS 下 perf buffer 迅速填满,处理不及时会丢失事件,尤其是控制层事件可能因数据层事件过多而丢失;解析效率低,需要遍历尝试所有支持协议才能找到正确协议,导致大量无效解析,增加 CPU 负担。
高效的协议解析方案包含哪些主要步骤?
高效协议解析方案主要分为四部分:数据采集、协议推断、事件分流和协议解析。其中协议解析又细分为连接维护、数据分帧、协议解析和请求-响应匹配。
协议推断是如何工作的?
协议推断在内核态进行,通过检查数据包的协议帧头来推测是否为支持的协议类型。例如对于 MySQL 协议,会检查第一帧数据是否为命令帧(如 connect、query、stmtPrepare 等),如果是则初步判断为请求,传递至用户态进一步解析,否则不处理。
conn tracker 组件的主要功能是什么?
conn tracker 组件负责协议解析流程,主要能力包括:连接维护、数据分帧、协议解析和请求-响应匹配。它能在用户态维护连接信息,减少 perf buffer 中重复的元数据传输,并支持从数据流中分解出每一帧进行解析,最终匹配请求和响应生成完整的可观测记录。