基于eBPF的开源项目

引言

真正意义上的eBPF技术虽然诞生还不到十年时间(2014年首次提出eBPF概念),但已经发展成为当下炙手可热的技术。去年8月,由微软、谷歌、Facebook(已更名为meta) 等公司联合成立了eBPF基金会,大力发展eBPF技术。最近几年,eBPF技术在国内也得到了广泛应用,很多大厂也开始关注并采用eBPF技术。

eBPF简介

eBPF是extended BPF的缩写,而BPF是Berkeley Packet Filter的缩写。对linux网络比较熟悉的小伙伴对BPF应该比较了解,它通过特定的语法规则使用基于寄存器的虚拟机来描述包过滤的行为。比较常用的功能是通过过滤来统计流量,tcpdump就是基于BPF实现的。而eBPF对它进行了扩展来实现更多的功能。eBPF 技术支持在不同的集成点动态地将 eBPF 字节码插入到 Linux 内核中,例如: 网络 IO、应用套接字和跟踪点,以实现安全性、网络和可见性逻辑。eBPF 具有高效率和灵活性。
要了解更多关于 eBPF 的信息,可访问eBPF.io和性能分析大神brendan gregg的主页

开源项目

tracee

tracee是一款易于使用的轻量级系统追踪工具,在该工具的帮助下,开发人员可以实时监控系统调用和其他系统事件。它只会追踪新创建的进程和容器,也就是Tracee运行之后所开启的进程和容器,这样就可以帮助用户将注意力放在相关事件上,而不是系统中所发生的每一件事情。向Tracee添加新事件(尤其是系统调用)也非常简单,而且无需手写任何代码。除了追踪功能之外,Tracee还能够捕捉到写入磁盘或内存的文件,并提取动态加载至应用程序内存中的代码。在这些功能的帮助下,我们将能够获取到运行进程的内部情况。

bpftrace

bpftrace是 Linux 高级追踪工具和语言。该工具基于 eBPF 和 BCC 实现了通过探针机制采集内核和程序运行的信息,然后用图表等方式将信息展示出来,帮助开发者找到隐藏较深的 Bug、安全问题和性能瓶颈。

Falco

Falco是sysdig的安全项目,它使用eBPF和Linux模块作为内核跟踪库开发。Sysdig Falco是一种旨在检测异常活动开源的系统行为监控程序。作为Linux主机入侵检测系统,对Docker也很有用,因为它支持容器上下文,如container.id、container.image或其规则的命名空间。

Cilium

Cilium主要用于提供并透明地保护网络连接和应用程序工作负载(如应用程序容器或进程)之间的负载平衡。在第3/4层运行,提供传统的网络和安全服务,以及第7层保护和安全使用应用协议,如 HTTP、 gRPC 和 Kafka。Cilium 被集成到常见的配器框架中,比如 Kubernetes。

Katran

Katran是一个 c + + 库和 BPF 程序,用于构建高性能的第四层负载平衡转发平台。Katran 利用内核中的 XDP 基础设施为快速数据包的处理提供内核设施。Katran 是 Facebook 开源的高性能第 4 层负载均衡器,目前在 Facebook 内部处于孵化阶段。其主要功能特性在于:

  • 快速(特别是在驱动模式下的 w/ XDP)
  • 性能与多个 NIC 的 RX 队列呈线性关系
  • RSS 友好的封

Elkeid

Elkeid是用Linux模式技术栈开发的内核事件捕获工具,由字节跳动率先开源。其主要功能特性有:

  • 对于同一类事件会有不同的syscall数据描述,进而获得不同的数据信息来源。
  • 采集的数据具有清晰的进程链信息。Driver和Agent会追溯当前进程的父进程和祖先进程,默认driver配置支持最高上溯8个祖先进程,实践中基本可以将绝大部分进程的完整进程链采集下来。
  • 会记录内核中的模块变化以及异常情况。Elkeid 安装后,对后续尝试内核修改的进程均可以直接发现并上报相应数据,同时如果存在任何隐藏内核模块,对/proc/目录的Hook,对进程进行ptrace等行为均可以直接发现并生成数据上报。
  • 针对安全场景增加了独有数据获取和记录维度

kubectl-trace

kubectl-trace是IO Visor开源的,帮助用户在Kubernetes集群中安排执行BPF程序的kubectl插件,可以用来分析系统的性能问题,安装便捷。

eHIDS

eHIDS是一个HIDS的雏形。HIDS全称是Host-based Intrusion Detection System,即基于主机型入侵检测系统,部署在主机内的,主要是对主机的异常行为进行检测,比如新建文件,创建进程,连接等。

Kindling

Kindling是一款基于 eBPF 的云原生可观测性开源项目,旨在帮助用户理解从内核到代码堆栈的应用程序行为。目前,它提供了一种简单的方法来获取 Kubernetes 环境中的网络流视图,以及许多内置的网络监视仪表板,如重传、 DNS、吞吐量、 TPS等。相比于bcc等小工具型产品,它突出了无侵入式地进行7*24小时观测的特性。Kindling集成了sysdig的agent-lib层,但丰富了更多的hook点,加入了kprobe的使用并将在后续开发uprobe功能。Kindling提供了两个具有不同功能但是具有相同agent的版本。轻量级版本集成到了Prometheus中,它使用PromQL来查询来自Prometheus的数据,因此很容易集成。但是由于Prometheus的基数限制,无法存储详细信息。对于标准版本,Kindling提供了更为详细的信息,并使用ElasticSearch作为后端来存储原始信息。

加入我们

关注我们

你可能感兴趣的:(ebpf开源项目介绍云原生)