eBPF 运维观测入门

eBPF 能在受验证的前提下把程序挂载到内核或用户态事件上,用于网络、性能、安全和故障观测。它可以提供传统应用日志看不到的低层证据,但不是“零成本、自动找到根因”的万能工具。

一、适合解决什么问题

  • 找出某进程在进行哪些系统调用及其耗时;
  • 观察 TCP 建连、重传、丢包和延迟;
  • 分析 CPU 调度、阻塞 I/O、文件访问和内存行为;
  • 在不修改应用代码时补充服务调用与网络可见性;
  • 构建运行时安全检测和策略证据。

如果应用已经有清晰 Trace 和日志,先使用现有证据。eBPF 更适合处理内核边界、未知进程、无埋点组件和短暂性能异常。

二、基本组成

  • eBPF 程序:在内核验证后运行的小程序。
  • Hook:系统调用、kprobe、tracepoint、网络路径、cgroup 或用户态探针等挂载点。
  • Map:内核与用户态共享状态的数据结构。
  • Verifier:检查程序是否满足安全和可终止要求。
  • 用户态加载器:负责加载、附加、读取数据和展示结果。

CO-RE 与 BTF 能改善跨内核版本可移植性,但不代表任意程序在任意内核都兼容。

三、从成熟工具开始

初学阶段优先使用发行版或可信项目提供的 bpftrace、BCC 工具或成熟观测产品,不要一开始就编写内核探针。先在测试环境使用只读脚本观察短时间窗口,并记录工具版本、内核版本和权限。

示例仅用于观察,命令和探针名称以当前工具版本为准:

uname -r
bpftool feature probe
bpftrace -l 'tracepoint:syscalls:sys_enter_*'

四、生产安全边界

  • eBPF 往往需要较高权限,加载器和脚本应受代码审查、签名和最小权限控制。
  • 高频 Hook、过多堆栈采样和高基数标签可能增加 CPU、内存与输出压力。
  • 用户态参数、文件路径和网络载荷可能包含敏感数据,应在采集端过滤。
  • 限制观测持续时间和输出大小,先小范围验证再扩大。
  • 监控 eBPF 工具自身资源消耗,并准备快速卸载方式。

五、一次网络延迟排查思路

  1. 用应用指标确认受影响接口、实例和时间窗口。
  2. 用 Trace 判断延迟发生在应用、数据库还是外部调用。
  3. 若怀疑网络,观察 TCP 建连、重传、RTT 和队列。
  4. 若怀疑主机,观察 CPU 调度延迟、磁盘 I/O 和系统调用。
  5. 将 eBPF 结果与日志、指标和变更时间线关联,而不是孤立解释一张火焰图。

六、常见误区

  • 看见内核函数耗时就直接判定根因,没有对照业务和系统指标。
  • 在所有节点常驻高频采样,造成新的性能和费用问题。
  • 忽略容器命名空间、PID 映射和短生命周期工作负载。
  • 使用来源不明的脚本并授予高权限。
  • 没有保存内核、工具、过滤条件和时间范围,导致结果不可复现。

七、验收清单

  • 工具与目标内核兼容,权限和来源可审计;
  • 采集范围、持续时间、频率和数据量受控;
  • 敏感字段已过滤;
  • 可将进程、容器、Pod、服务和请求上下文关联;
  • 结论由多个独立证据支持;
  • 观测程序可卸载且不会残留异常状态。

延伸阅读

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-16 07:53:13

results matching ""

    No results matching ""