什么是BCC Tools
直接通过BPF指令编写BPF 程序是非常繁琐的事情,尤其对于运维人员来说,花70%的时间来编写一个BPF程序来实现一个检查点,不如花70%的时间来熟悉别人已经写好的BPF程序,并且把别人的BPF程序有效的串联起来形成自己分析问题的套路,等有了闲暇时间再去尝试突破自己,写一些现有BPF程序满足不了的额外需求。
因此针对BPF程序,提供了两种支持支持高级编程语言的BPF前端,在跟踪用途方面,主要为BCC和ftrace。
BCC(BPF 编译器集合,BPF Compiler Collection)是最早用于开发 BPF 跟踪程序的高级框架。它提供了一个编写内核 BPF 程序的C语言环境,同时还提供了其他高级语言(如Python、Lua和C++)环境来实现用户端接口。它也是
libbcc和libbpf库'的前身,这两个库提供了使用BPF 程序对事件进行观测的库函数。
当前版本的BCC Tool中提供了120多个BPF工具命令,可以用来支持性能分析和排障工作。
BCC的github地址:
https://github.com/iovisor/bcc/tree/master/tools
BCC Tools安装
在配置yum源的情况下,安装非常简单。
[root@server02 ~]# yum -y install bcc-tools
......
Installing:bcc-tools x86_64 0.23.0-1.r2.hce2 updates 454 k
...... 12/12 Installed:bcc-0.23.0-1.r2.hce2.x86_64 bcc-tools-0.23.0-1.r2.hce2.x86_64 clang-12.0.1-1.r3.hce2.x86_64 clang-resource-filesystem-12.0.1-1.r3.hce2.x86_64 compiler-rt-12.0.1-1.hce2.x86_64 emacs-filesystem-1:27.2-3.r7.hce2.noarch gcc-c++-10.3.1-10.r18.hce2.x86_64 kernel-devel-5.10.0-182.0.0.95.r1941_123.hce2.x86_64 libstdc++-devel-10.3.1-10.r18.hce2.x86_64 llvm-libs-12.0.1-2.r1.hce2.x86_64 python3-bpfcc-0.23.0-1.r2.hce2.noarch python3-netaddr-0.8.0-3.r1.hce2.noarch Complete![root@server02 ~]# rpm -qa | grep bcc-tool
bcc-tools-0.23.0-1.r2.hce2.x86_64
安装问题解决
使用BCC工具报错
顺利完成BCC-tool工具安装后,执行命令报错,如下
[root@server02 ~]# /usr/share/bcc/tools/execsnoop
modprobe: FATAL: Module kheaders not found in directory /lib/modules/5.10.0-60.18.0.50.r1083_58.hce2.x86_64
Unable to find kernel headers. Try rebuilding kernel with CONFIG_IKHEADERS=m (module) or installing the kernel development package for your running kernel version.
chdir(/lib/modules/5.10.0-60.18.0.50.r1083_58.hce2.x86_64/build): No such file or directory
Traceback (most recent call last):File "/usr/share/bcc/tools/execsnoop", line 227, in <module>b = BPF(text=bpf_text)File "/usr/lib/python3.9/site-packages/bpfcc/__init__.py", line 479, in __init__raise Exception("Failed to compile BPF module %s" % (src_file or "<text>"))
Exception: Failed to compile BPF module <text>
经过对报错内容进行排查确认,此类报错一般就是需要更新内核模块
内核升级
根据报错提示内容“ kheaders not found in directory”,先安装kernel header (yum -y install kernel-headers),其次安装kernel-devel安装包(yum -y install kernel-devel-$(uname -r))。
[root@server02 ~]# yum -y install kernel-headers
Last metadata expiration check: 0:51:49 ago on Mon 15 Jul 2024 03:42:51 PM CST.
Package kernel-headers-5.10.0-182.0.0.95.r1941_123.hce2.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@server02 ~]# yum -y install kernel-devel-$(uname -r)
......
Total download size: 17 M
Downloading Packages:
kernel-devel-5.10.0-60.18.0.50.r1083_58.hce2.x86_64.rpm
Installed:kernel-devel-5.10.0-60.18.0.50.r1083_58Complete!
使用验证
[root@server02 ~]# /usr/share/bcc/tools/opensnoop
PID COMM FD ERR PATH
775 hostwatch 5 0 /proc/775/stat
775 hostwatch 5 0 /proc/804/stat
775 hostwatch 5 0 /usr/local/hostguard/run/heartbeat.tick
775 hostwatch 5 0 /proc/1659/stat
775 hostwatch 5 0 /sys/devices/system/cpu/online
775 hostwatch 5 0 /usr/local/hostguard/run/restart.conf
775 hostwatch 5 0 /proc/meminfo
670 irqbalance 7 0 /proc/irq/affinity_hint_notify
670 irqbalance 7 0 /proc/irq/affinity_hint_notify
775 hostwatch 5 0 /proc/775/stat
775 hostwatch 5 0 /proc/804/stat
775 hostwatch 5 0 /usr/local/hostguard/run/heartbeat.tick
775 hostwatch 5 0 /proc/1659/stat
775 hostwatch 5 0 /sys/devices/system/cpu/online
775 hostwatch 5 0 /usr/local/hostguard/run/restart.conf
775 hostwatch 5 0 /proc/meminfo
BCC命令汇总
bcc tools中,总计有124个命令,涉及到十个方面。
经过分类,大致命令和对应的作用关系如下,后续等有时间,针对其中有价值的几个再重点分析一下。
如果有兴趣,所有命令的注解都可以自行在/usr/share/bcc/tools/doc下面找到对应的example.txt
原创 KennyQiu 运维成长手记