Linux未来监控tracing框架——eBPF

简介:

eBPF源于早年间的成型于 BSD 之上的传统技术 BPF(Berkeley Packet Filter)。BPF 的全称是 Berkeley Packet Filter,顾名思义,这是一个用于过滤(filter)网络报文(packet)的架构。

BPF 是在 1997 年首次被引入 Linux 的,Linux 内核中的报文过滤机制其实是有自己的名字的:Linux Socket Filter,简称 LSF。

 

从 3.15 开始,一个套源于 BPF 的全新设计开始,在3.17被添置到了 kernel/bpf 下。全新设计最终被命名为了 extended BPF(eBPF);为了后向兼容,传统的 BPF 仍被保留了下来,并被重命名为 classical BPF(cBPF)。相对于 cBPF,eBPF 带来的改变可谓是革命性的:一方面,它已经为内核追踪(Kernel Tracing)、应用性能调优/监控、流控(Traffic Control)等领域带来了激动人心的变革;另一方面,在接口的设计以及易用性上,eBPF 也有了较大的改进。

cBPF 所覆盖的功能范围很简单,就是网络监控和 seccomp 两块,数据接口设计的粗放;而 eBPF 的利用范围要广的多,性能调优、内核监控、流量控制什么的,数据接口的多样性设计。

由一个文件(net/core/filter.c)进化到一个目录(kernel/bpf)

目前,支持生成 BPF 伪代码的编译器只有 llvm 一家,即使是通篇使用 gcc 编译的 Linux 内核,samples 目录下的 bpf 范例也要借用 llvm 来编译完成。

 

1.   运行监测

  eBPF 其实是内核模块,比内核模块更短小精干,实现的功能也更新颖, eBPF注入的代码是要在内核中运行的,会有安全隐患。

为了最大限度控制安全隐患,cBPF 时代就开始加入了代码检查机制以防止不规范的注入代码;到了 eBPF则在载入程序(bpf_load_program())时加入了更复杂的verifier 机制,会进行一系列的安全检查。

 

2.   架构

架构如下:

8899234fd0559155fc43306fd62932a6f7b1c4bd

3.   bcc

现在可以用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码。这工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BCC),BCC 是一个 python 库,但是其中有很大一部分的实现是基于 C 和 C++的,python实现了对 BCC 应用层接口的封装。

使用 BCC 进行 BPF 的开发仍然需要开发者自行利用 C 来设计 BPF 程序——但也仅此而已,余下的工作,包括编译、解析 ELF、加载 BPF 代码块以及创建 map 等等基本可以由 BCC 一力承担,无需多劳开发者费心。

3.1     bcc安装

github的地址链接如下:

https://github.com/iovisor/bcc

执行:git clone https://github.com/iovisor/bcc.git

在Ubuntu中直接安装二进制文件,命令如下:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD

echo "deb https://repo.iovisor.org/apt/xenial xenial main" | sudo tee /etc/apt/sources.list.d/iovisor.list

sudo apt-get update

sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r)

这样就可以 使用bcc/example/tracing中的python用例。

 

 

 

 

目录
相关文章
|
3月前
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
1月前
|
监控 安全 Linux
使用NRPE和Nagios监控Linux系统资源的方法
通过遵循以上步骤,可以有效地使用NRPE和Nagios监控Linux系统资源,确保系统运行稳定,并及时响应任何潜在的问题。这种方法提供了高度的可定制性和灵活性,适用于从小型环境到大型分布式系统的各种监控需求。
42 2
|
2月前
|
存储 监控 Linux
监控Linux服务器
详细介绍了如何监控Linux服务器,包括监控CPU、内存、磁盘存储和带宽的使用情况,以及使用各种系统监控工具如vmstat、iostat、sar、top和dstat来分析系统性能,并推荐了一些开源监控系统。
49 0
监控Linux服务器
|
4月前
|
监控 Ubuntu Unix
Linux |Nethogs 监控网络使用情况
Linux |Nethogs 监控网络使用情况
69 9
Linux |Nethogs 监控网络使用情况
|
3月前
|
存储 Prometheus 监控
在Linux中,如何进行系统资源的监控?
在Linux中,如何进行系统资源的监控?
|
3月前
|
存储 监控 Ubuntu
在Linux中,如何进行用户行为监控?
在Linux中,如何进行用户行为监控?
|
3月前
|
Prometheus 监控 网络协议
在Linux中,如何监控网络服务的状态和性能?
在Linux中,如何监控网络服务的状态和性能?
|
3月前
|
运维 监控 网络协议
在Linux中,如何进行网络服务的监控?
在Linux中,如何进行网络服务的监控?
|
3月前
|
监控 网络协议 Linux
在Linux中,如何监控系统性能?
在Linux中,如何监控系统性能?
|
3月前
|
监控 Linux
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?