eBPF Observability 是一项使用 eBPF(扩展伯克利数据包过滤器)实现深度可观测性的技能。eBPF 允许在 Linux 内核中运行沙箱程序,无需修改内核源码或加载内核模块,即可实现内核级追踪、网络监控与安全强制。本技能覆盖 Cilium、Tetragon、bpftrace 等工具的使用方式。
用途 当需要以下场景时,适合使用基于 eBPF 的可观测性:
- 深度性能调试:追踪内核级延迟、系统调用开销和调度延迟,这些是应用层指标无法揭示的。
- 无 sidecar 的网络可观测性:直接从内核捕获 L3/L4/L7 流、DNS 查询和 TCP 状态转换,消除 sidecar 代理的 CPU 与内存开销。
- 内核边界安全监控:实时检测容器逃逸、异常进程执行、敏感文件访问和异常系统调用模式。
- 生产环境持续性能分析:以可忽略的开销(通常低于 1% 的 CPU)生成 CPU 火焰图和内存分配曲线。
- 服务网格替代或增强:Cilium 可以替代 kube-proxy,并在内核层面提供身份感知的网络策略。
不适用场景:内核版本低于 4.19、托管平台限制 BPF 能力、或应用层追踪已完全满足调试需求时,应避免使用 eBPF。
主要能力
- 系统调用追踪:通过 bpftrace 追踪 read() 等系统调用的延迟分布,或统计最慢的系统调用。
- DNS 追踪:追踪 UDP 53 端口的 DNS 查询,按进程统计查询次数。
- TCP 重传追踪:追踪 tcp_retransmit_skb,输出源/目的地址及端口。
- 磁盘 I/O 延迟:按设备统计块 I/O 延迟直方图,或按进程统计 I/O 字节数。
- 容器感知追踪:通过 cgroup 过滤追踪容器内进程执行和内存分配热点。
- Cilium 网络可观测性:借助 Hubble 实时观察所有流、按命名空间或 verdict 过滤、导出 JSON 供 SIEM 使用。
- Tetragon 安全策略:通过 TracingPolicy 监控进程执行、文件访问、网络连接,并实施 Sigkill 等强制动作。
- Prometheus 集成:Hubble 暴露指标,配合 ServiceMonitor 和 Grafana 仪表板;eBPF Exporter 可采集自定义内核指标如 OOM 终止、运行队列延迟。
使用方式 前置条件:
- 内核版本要求:基础 BPF 映射与探针最低 4.9,推荐 5.10+;BPF CO-RE 最低 5.2;BPF 环形缓冲区最低 5.8;BPF LSM 钩子最低 5.7;Cilium 完整功能最低 4.19;Tetragon 最低 4.19。
- 验证内核支持:uname -r 查看版本;ls /sys/kernel/btf/vmlinux 检查 BTF;mount | grep bpf 检查 BPF 文件系统;cat /proc/sys/net/core/bpf_jit_enable 确认 JIT 启用。
- 安装工具链:Ubuntu/Debian 使用 apt install bpftrace bpfcc-tools libbpf-dev linux-headers-$(uname -r);Fedora/RHEL 使用 dnf install bpftrace bcc-tools libbpf-devel kernel-devel。
Cilium 安装(Helm): helm repo add cilium https://helm.cilium.io/ && helm repo update helm install cilium cilium/cilium --version 1.16.4 --namespace kube-system --set kubeProxyReplacement=true --set hubble.enabled=true --set hubble.relay.enabled=true --set hubble.ui.enabled=true ... 等待就绪:cilium status --wait
Hubble 使用: cilium hubble port-forward & hubble observe --follow hubble observe --namespace production --follow hubble observe --verdict DROPPED --follow hubble observe --protocol DNS --follow hubble observe --to-label "app=api-server" --protocol HTTP --follow
Tetragon 安装: helm install tetragon cilium/tetragon --namespace kube-system --set tetragon.grpc.enabled=true ... 使用 tetra CLI 查看事件,并可通过 TracingPolicy 自定义监控文件访问、限制出站连接、检测权限提升。
bpftrace 一行命令示例: 追踪 read 系统调用延迟:sudo bpftrace -e 'tracepoint:syscalls:sys_enter_read { @start[tid] = nsecs; } ...' 追踪 DNS 查询:sudo bpftrace -e 'kprobe:udp_sendmsg { ... }' 追踪 TCP 重传:sudo bpftrace -e 'kprobe:tcp_retransmit_skb { ... }'
Prometheus 集成:配置 ServiceMonitor 或部署 cloudflare/ebpf_exporter,并提供 Grafana 仪表板 ID(16611、16612、16613)。常用查询如 rate(hubble_drop_total[5m])。
网络可观测性:hubble observe 支持 L3/L4 流日志、L7 协议可见性(需注解启用)、DNS 监控,并可生成服务依赖图。
适用场景
- Kubernetes 集群的网络与安全可观测性。
- 生产环境中低开销的性能剖析与故障排查。
- 容器安全监控与运行时策略强制。
- 替代或增强服务网格的数据平面。
限制
- 内核版本低于 4.19 时不可用;部分高级特性需要更高版本。
- 托管平台可能限制 BPF 能力,导致无法使用。
- 若应用层追踪已满足需求,则不必引入 eBPF 的复杂度。
- 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。