[转帖]eBPF监控工具bcc系列一启航

ebpf,监控,工具,bcc,系列,启航 · 浏览次数 : 0

小编点评

**BPF 工具框架 Bcc 的使用指南** **安装** 1. 下载并安装 LLVM 工具包:`sudo apt-get install LLVM-3.7-dev` 2. 下载 Bcc 工具包:`git clone --depth https://github.com/iovisor/bcc.git` 3. 编译 Bcc 工具包:`cd bcc/build; cmake ..; make` **使用** 1. 创建一个名为 `bitehist.py` 的文件,并添加以下代码: ```python import bcc # 跟踪磁盘 I/O 块大小的柱状图 ``` 2. 运行脚本:`./bitehist.py` **其他选项** * 设置 `CONFIG_BPF_JIT=y` 以启用 Bcc JIT 模式。 * 设置 `CONFIG_NET_CLS_BPF=m` 以启用 Bcc NET 类过滤器。 * 设置 `CONFIG_NET_ACT_BPF=m` 以启用 Bcc NET 操作类过滤器。 * 设置 `CONFIG_BPF_JIT=y` 以启用 Bcc JIT 模式。 **示例脚本** `bitehist.py` 示例脚本可以跟踪磁盘 I/O 块大小的柱状图。运行以下命令可以生成此图: ``` ./bitehist.py ``` **内核要求** Bcc 需要内核版本 4.1 或更高。 **注意** 示例脚本可能需要一些时间才能运行。

正文

https://blog.51cto.com/u_15333820/3453313

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

  使用 BCC 进行 BPF 的开发仍然需要开发者自行利用 C 来设计 BPF 程序,其他的工作,包括编译、解析 ELF、加载 BPF 代码块以及创建 map 等等基本可以由 BCC 承担。

USDT 为user-mode statically defined traces

bcc大概,基本可以理解成eBPF的使用框架。

1.   安装

在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要求内核在4.1以上的版本。

2.   Ubuntu编译

如果进行源码编译,对环境有些要求:

l   LLVM3.7.1版本以上。

l   通过LLVM编译的Clang

l   Cmake大于等于3.1版本

l   Gcc大于等于4.7

l   如果要支持Lua,需要LuaJIT.

VER=trusty

echo "deb http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main deb-src http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main" | tee /etc/apt/sources.list.d/llvm.list

wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | apt-key add -

apt-get update 

# All versions

apt-get -y install bison build-essential cmake flex git libedit-dev libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev  netperf  iperf

# 支持Lua,安装luajit。

sudo apt-get -y install luajit luajit-5.1-dev

环境准备完毕后,进行编译安装

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

mkdir bcc/build;

cd bcc/build

cmake .. -DCMAKE_INSTALL_PREFIX=/usr

make

make install

3.   红帽环境编译

红帽编译:llvm的下载路径: http://releases.llvm.org/download.html#6.0.0

  下载cmake,链接地址:https://cmake.org/download/

    LLVM source code

  Clang source code

  Clang Tools Extra source code

  Compiler RT source code

  LibC++ source code

1)clang-tools-extra-3.6.0.src.tar.xz解压后重命名为extra

2)cfe-3.6.0.src.tar.xz解压后重命名为clang

3)llvm-3.6.0.src.tar.xz解压后重命名为llvm

4)compiler-rt-3.6.0.src.tar.xz解压后命名为compiler-rt

mv clang/ llvm/tools/ 

mv extra/ llvm/tools/clang/ 

mv compiler-rt llvm/projects/

把四个文件按如下的目录结构进行存放:

#cd llvm

#mkdir build && cd build

#cmake ..

#make

需要足够大的编译空间。

或者使用外部源,设置llvm源如下:

[alonid-llvm-3.9.0]

name=Copr repo for llvm-3.9.0 owned by alonid

baseurl=https://copr-be.cloud.fedoraproject.org/results/alonid/llvm-3.9.0/epel-7-$basearch/

type=rpm-md

skip_if_unavailable=True

gpgcheck=1

gpgkey=https://copr-be.cloud.fedoraproject.org/results/alonid/llvm-3.9.0/pubkey.gpg

repo_gpgcheck=0

enabled=1

enabled_metadata=1

然后运行#yum update

#yum install llvm-3.9.0 clang-3.9.0 compiler-rt-3.9.0 llvm-3.9.0-devel clang-3.9.0-devel llvm-3.9.0-static

此外还需要安装iperf。

进行安装。

最后设置PATH环境变量, 为其增加如下变量:

/opt/llvm-3.9.0/bin/

4.   内核要求

CONFIG_BPF=y

CONFIG_BPF_SYSCALL=y

# [optional, for tc filters]

CONFIG_NET_CLS_BPF=m

# [optional, for tc actions]

CONFIG_NET_ACT_BPF=m

CONFIG_BPF_JIT=y

CONFIG_HAVE_BPF_JIT=y

# [optional, for kprobes]

CONFIG_BPF_EVENTS=y

 

5.   示例

示例脚本主要位于examples/tracing文件夹中,用过之后就难以戒掉了。

例如跟踪磁盘I/O块大小的柱状图:

./bitehist.py

# ./bitehist.py

Tracing... Hit Ctrl-C to end.

^C

     kbytes              : count     distribution

         0 -> 1          : 1        |****************************************|

跟踪块I/O延时:

./disksnoop.py

输出如下:

TIME(s)            T  BYTES    LAT(ms)

9151.779756000     R  8           0.26

9153.795887000     R  8           0.31

9155.811593000     R  8           0.21

第一列是时间戳,第二列是IO类型,第三列是IO字节数,第四列是本次的IO时间。

 

6.   bcc工具框架

bcc相关的工具框架如下:

eBPF监控工具bcc系列一启航_重命名

与[转帖]eBPF监控工具bcc系列一启航相似的内容:

[转帖]eBPF监控工具bcc系列一启航

https://blog.51cto.com/u_15333820/3453313 在eBPF篇中,我们知道虽然可用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码。工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BC

[转帖]python 性能优化监控工具_Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]Linux性能优化(四)——BCC性能监控工具

原文 https://blog.51cto.com/9291927/2593705 1、BCC简介 一、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不一样的前端支持,包括Python和Lua,实现了map建立、

【转帖】Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]基于eBPF的微服务网络安全

https://www.cnblogs.com/charlieroro/p/12724848.html 翻译自:Network security for microservices with eBPF 一些开源的kubernetes工具已经开始使用eBPF,这些工具大多数与网络,监控和安全相关。 本

[转帖]一文入门前景广阔的 eBPF

https://zhuanlan.zhihu.com/p/567375673 【摘要】eBPF带来的最大的好处即是可以对内核进行编程性处理,实现对内核中不灵活的部分,实现自定义的处理。这种灵活性使得对于不可见的kernel具有了可观测性的基础,在进行内核监控、网络故障分析、文件系统分析等方面具有广泛

[转帖]一文入门前景广阔的 eBPF

https://zhuanlan.zhihu.com/p/567375673 【摘要】eBPF带来的最大的好处即是可以对内核进行编程性处理,实现对内核中不灵活的部分,实现自定义的处理。这种灵活性使得对于不可见的kernel具有了可观测性的基础,在进行内核监控、网络故障分析、文件系统分析等方面具有广泛

[转帖]eBPF 技术实践:加速容器网络转发,耗时降低 60%+

https://my.oschina.net/u/6150560/blog/5587717 背景 Linux 具有功能丰富的网络协议栈,并且兼顾了非常优秀的性能。但是,这是相对的。单纯从网络协议栈各个子系统的角度来说,确实做到了功能与性能的平衡。不过,当把多个子系统组合起来,去满足实际的业务需求,功

[转帖]eBPF 技术实践:加速容器网络转发,耗时降低60%+

https://new.qq.com/rain/a/20221103A03ZHE00 作者 | 王栋栋 背 景 Linux 具有功能丰富的网络协议栈,并且兼顾了非常优秀的性能。但是,这是相对的。单纯从网络协议栈各个子系统的角度来说,确实做到了功能与性能的平衡。不过,当把多个子系统组合起来,去满足实际