跳到主要内容
DevOpsMar 28, 2026

零仪表化可观测性:eBPF如何取代Sidecar舰队

OS
Open Soft Team

Engineering Team

67%的Kubernetes团队已切换到eBPF可观测性

根据CNCF 2026年度调查,67%的Kubernetes团队现在至少使用一个可观测性支柱(指标、追踪或日志)的eBPF工具——较2024年的29%和2025年的41%大幅增长。这种转变不再是渐进的,而是一场洪流。

原因很简单:传统的基于sidecar的可观测性(Envoy代理、OpenTelemetry Collector sidecar、Datadog代理)消耗大量资源,为每个请求增加延迟,并且需要代码更改或容器修改来进行仪表化。eBPF从内核完成所有这些——无需任何应用更改。

什么是eBPF以及为什么重要

eBPF(extended Berkeley Packet Filter)是一种允许沙箱程序在Linux内核中运行的技术,无需更改内核源代码或加载内核模块。最初设计用于网络包过滤,eBPF已发展为通用的内核可编程框架。

工作原理

  1. 编写一个小程序——用C或Rust(或使用高级框架)
  2. 附加到内核钩子点——系统调用、网络事件、追踪点、函数入口/出口
  3. 内核的eBPF验证器检查程序安全性(无无限循环、无越界访问、有界执行)
  4. JIT编译器将eBPF字节码转译为原生机器指令
  5. 程序执行在钩子点以接近原生的性能运行

对于可观测性,这意味着您可以拦截每个HTTP请求、DNS查询、TCP连接、文件系统操作和进程执行——无需修改任何应用代码,无需注入sidecar,无需重启pod。

// 简化的eBPF程序追踪HTTP请求
SEC("kprobe/tcp_v4_connect")
int trace_connect(struct pt_regs *ctx) {
    struct sock *sk = (struct sock *)PT_REGS_PARM1(ctx);
    
    u32 pid = bpf_get_current_pid_tgid() >> 32;
    u16 dport = sk->__sk_common.skc_dport;
    u32 daddr = sk->__sk_common.skc_daddr;
    
    struct event_t event = {
        .pid = pid,
        .dport = ntohs(dport),
        .daddr = daddr,
        .timestamp = bpf_ktime_get_ns(),
    };
    
    bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU,
                          &event, sizeof(event));
    return 0;
}

为什么对可观测性重要

传统可观测性需要仪表化——向应用添加代码、库或sidecar容器。这种方法有三个根本问题:

  1. 资源开销——每个sidecar消耗CPU和内存。在500个pod的集群中使用Envoy sidecar,sidecar本身可能消耗集群总资源的30-40%。
  2. 覆盖盲区——您只能观察到您仪表化的内容。第三方二进制文件、内核级事件和网络基础设施仍然是盲点。
  3. 维护负担——每种语言、框架和运行时都需要自己的仪表化库。

eBPF解决了这三个问题:在内核中运行(零应用开销),看到内核看到的一切(无盲区),且不受应用语言或框架限制。

2026年eBPF可观测性技术栈

生态系统已经成熟为一组经过实战检验的工具:

Cilium + Hubble:网络可观测性

Cilium是Kubernetes的事实标准CNI(容器网络接口)。Hubble是Cilium的可观测性组件,提供:

  • L3/L4流量可见性——pod之间的每个TCP/UDP连接
  • L7协议解析——HTTP、gRPC、Kafka、DNS和PostgreSQL,无需应用更改
  • 网络策略审计——实时查看哪些策略允许或拒绝流量
  • 服务依赖映射——基于观察到的流量模式自动生成服务图

Pixie:应用性能监控

Pixie(CNCF沙箱项目)使用eBPF提供零仪表化APM

  • 自动协议追踪——HTTP/1.1、HTTP/2、gRPC、PostgreSQL、MySQL、Redis、Kafka、DNS
  • 持续CPU分析——来自eBPF栈追踪的每个进程火焰图
  • 动态日志——无需重新部署即可向运行中的应用添加追踪点
  • 完整请求/响应捕获——查看实际的HTTP头、SQL查询、gRPC载荷

Tetragon:运行时安全和审计

Tetragon(由Isovalent/Cilium开发)是基于eBPF的安全可观测性和运行时执行工具:

  • 进程执行跟踪——每个exec、fork和exit事件
  • 文件访问监控——跟踪读取、写入和权限更改
  • 网络连接审计——记录带有进程上下文的每个出站连接
  • 安全策略执行——实时阻止可疑活动

Grafana Beyla:自动仪表化

Grafana Beyla是基于eBPF的自动仪表化代理,生成OpenTelemetry兼容的追踪和指标:

  • 在内核级检测HTTP、gRPC、SQL和Redis请求
  • 发出带有追踪上下文传播的OpenTelemetry span
  • 与Grafana Cloud、Tempo、Mimir和任何OpenTelemetry后端集成

性能:重要的数据

以下是来自500个pod生产Kubernetes集群的真实基准测试:

内存使用对比

组件Sidecar方案eBPF方案节省
Envoy sidecar(500 pod)50 GB0(Cilium CNI)50 GB
OTel Collector sidecar(500 pod)15 GB0(Beyla DaemonSet)15 GB
Cilium代理(20节点)N/A8 GB-8 GB
Beyla代理(20节点)N/A2 GB-2 GB
总计75 GB12 GB降低84%

CPU开销

指标Sidecar方案eBPF方案
每请求增加延迟1-5ms<0.1ms
每节点CPU开销8-12%<1%
尾延迟影响(p99)+15-30ms<1ms

迁移指南:从Sidecar到eBPF

第1阶段:在Sidecar旁边部署eBPF工具(第1-2周)

  • 安装Cilium作为CNI
  • 部署Hubble进行网络可观测性
  • 部署Beyla作为DaemonSet进行自动仪表化追踪
  • 并行运行sidecar和eBPF可观测性

第2阶段:验证和调优(第3-4周)

  • 验证eBPF工具捕获相同的信号
  • 调整Beyla的协议检测
  • 设置镜像现有sidecar仪表板的新仪表板

第3阶段:逐步移除Sidecar(第5-8周)

  • 从非关键服务开始:移除OTel Collector sidecar
  • 监控数据质量回归
  • 从不需要高级流量管理的服务中移除Envoy sidecar

第4阶段:完整eBPF技术栈(第9-12周)

  • 移除剩余sidecar
  • 部署Tetragon进行运行时安全
  • 整合基于eBPF信号的告警
  • 回收释放的资源

常见问题

eBPF可观测性适用于非Kubernetes工作负载吗?

是的。eBPF在Linux内核级运行,适用于任何工作负载——容器、VM、裸机、systemd服务。

eBPF能替代分布式追踪吗?

对于许多团队,是的。Beyla和Pixie从内核观察生成分布式追踪。但eBPF追踪仅限于请求/响应边界——无法追踪函数内的自定义业务逻辑。

加密流量(TLS)怎么办?

eBPF工具可以通过附加到TLS库函数(如OpenSSL的SSL_read和SSL_write)来追踪TLS流量。

eBPF安全吗?有缺陷的eBPF程序会使内核崩溃吗?

不会。eBPF验证器在加载前检查每个程序。有缺陷的程序将无法加载——永远不会使内核崩溃。

eBPF如何处理高吞吐量服务(100K+请求/秒)?

eBPF通过内核内聚合和采样处理高吞吐量。eBPF程序可以在内核映射中计算直方图和计数器,只发送聚合数据到用户空间。