分享最新优惠信息
购买主机更加划算

BCC工具:用于监控Linux系统IO、网络、调用等活动情况

BCC(BPF编译器集合)是一组功能强大的适当工具和示例文件,用于创建资源丰富的内核跟踪和操作程序。该工具利用扩展的BPF(伯克利数据包过滤器),最初称为eBPF ,是Linux 3.15中的新功能之一。

实际上, BCC工具使用的大多数组件都需要Linux 4.1或更高版本,其值得注意的功能包括:

  • 不需要第3方内核模块,因为所有工具都基于内置于内核中的BPF工作,并且BCC使用Linux 4.x系列中添加的功能。
  • 能够观察软件执行情况。
  • 包含多个性能分析工具以及示例文件和手册页。

BCC工具比较适合高级Linux用户,可以使用C语言的内核检测以及Python和lua的前端轻松编写BPF程序。此外,它还支持多种任务,例如性能分析、系统监控、网络流量控制等。

在Linux系统中安装BCC工具

BCC工具使用了Linux内核4.1版本或更高版本添加的功能,并且要求内核在编译时使用以下设置的标志:

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
# [for Linux kernel versions 4.1 through 4.6]
CONFIG_HAVE_BPF_JIT=y
# [for Linux kernel versions 4.7 and later]
CONFIG_HAVE_EBPF_JIT=y
# [optional, for kprobes]
CONFIG_BPF_EVENTS=y
# Need kernel headers through /sys/kernel/kheaders.tar.xz
CONFIG_IKHEADERS=y

一般可以使用单个grep命令检查所有指定的内核配置标志,并提供所有标志名称作为模式。

grep -E 'CONFIG_BPF=y|CONFIG_BPF_SYSCALL=y|CONFIG_NET_CLS_BPF=m|CONFIG_NET_ACT_BPF=m|CONFIG_BPF_JIT=y|CONFIG_HAVE_BPF_JIT=y|CONFIG_HAVE_EBPF_JIT=y|CONFIG_BPF_EVENTS=y|CONFIG_IKHEADERS=y' /boot/config-$(uname -r)

检查Linux内核

验证内核标志后,就可以在Linux系统中安装BCC工具了。

在Debian上安装BCC工具

可以在常规Debian主存储库中找到BCC及其工具,它们来自源包bpfcc并命名为bpfcc-tools、python3-bpfcc、libbpfcc和libbpfcc-dev:

echo deb http://cloudfront.debian.net/debian sid main >> /etc/apt/sources.list
sudo apt-get install -y bpfcc-tools libbpfcc libbpfcc-dev linux-headers-$(uname -r)
在Ubuntu上安装BCC工具

可以在常规Ubuntu Universe存储库中找到不同版本的BCC:

sudo apt-get install bpfcc-tools linux-headers-$(uname -r)
在Fedora上安装BCC工具

从Fedora 40开始,标准存储库中提供了BCC二进制文件:

sudo dnf install bcc
在RHEL上安装BCC工具

BCC已作为bcc-tools包含在官方yum存储库中:

sudo yum install bcc-tools
在Arch Linux上安装BCC工具

BCC在标准Arch存储库中可用,并且可以使用pacman命令进行安装。

pacman -S bcc bcc-tools python-bcc
在openSUSE上安装BCC工具

对于openSUSE Leap 42.2(及更高版本)和Tumbleweed,BCC已包含在官方存储库中:

sudo zypper ref
sudo zypper in bcc-tools bcc-examples

在Linux系统中使用BCC工具

所有BCC工具都安装在/usr/share/bcc/tools目录下。但是,你也可以选择从BCC Github仓库中的/tools目录下运行它们,这些工具以.py扩展名结尾。

ls /usr/share/bcc/tools

BCC工具

接下来将介绍几个示例,监控一般Linux系统性能和网络情况。

跟踪Linux中的open() 系统调用

首先使用opensnoop工具跟踪所有open()系统调用,这使我们能够通过识别数据文件、配置文件等来了解各种应用程序的工作原理:

cd /usr/share/bcc/tools 
sudo ./opensnoop

跟踪Linux中的 open() 系统调用

分析Linux中的磁盘I/O延迟

此示例显示使用biolatency工具对磁盘I/O延迟进行了总结分布,执行命令后,请等待几分钟,然后按Ctrl-C结束并查看输出。

sudo ./biolatency

分析Linux中的磁盘I/O延迟

跟踪Linux中的新进程

这个实际上使用execsnoop工具来跟踪正在执行的新进程,每当一个进程通过fork()和exec()系统调用派生时,它都会显示在输出中。然而,并非所有进程都会被捕获。

sudo ./execsnoop

跟踪Linux中的新进程

跟踪较慢的Ext4文件系统操作

使用ext4slower工具跟踪ext4文件系统中常见操作的延迟超过10毫秒的情况,以帮助我们独立识别通过文件系统导致的慢速磁盘I/O:

sudo ./ext4slower

查找较慢的Ext4操作

使用biosnoop探索磁盘I/O活动

使用biosnoop工具每秒为每个磁盘I/O打印一行,其中包括进程ID、扇区、字节和延迟等详细信息:

sudo ./biosnoop

检查磁盘I/O活动

分析系统缓存性能

接下来继续使用cachestat工具每秒显示系统缓存中的一行汇总统计信息,这可以通过指出低缓存命中率和高丢失率来进行系统调整操作:

sudo ./cachestat

检查系统缓存性能

在Linux系统中监控TCP连接

使用tcpconnect工具每秒监控TCP连接,其输出包括源地址、目标地址以及端口号。该工具对于跟踪意外的TCP连接非常有用,从而帮助我们识别应用程序配置中的低效或攻击者:

sudo ./tcpconnect

在Linux中监控TCP连接

此外,上述所有工具还可以与各种选项一起使用,要启用给定工具的帮助页面,请使用-h选项,示例如下:

sudo ./tcpconnect -h

tcpconnect

跟踪失败的exec()系统调用

要跟踪失败的exec()系统调用,请使用opensnoop的-x选项,如下所示:

sudo ./opensnoop -x

跟踪失败的exec()系统调用

跟踪特定过程函数

最后将演示如何执行自定义跟踪操作,这里正在使用其PID来跟踪特定进程。

首先,确定进程ID:

pidof firefox

稍后运行自定义跟踪命令。下面的命令中,-p指定进程 ID,do_sys_open()是一个动态跟踪的内核函数,包括其第二个参数作为字符串:

sudo ./trace -p 4095 'do_sys_open "%s", arg2'

总结

可以看出,BCC是一个功能强大且易于使用的工具包,适用于各种系统管理任务,例如跟踪系统性能监控、跟踪块设备 I/O、TCP函数、文件系统操作、系统调用、Node.js探针等等。重要的是,它附带了几个示例文件和手册页,用于帮助用户使用,使其用户友好且可靠。

未经允许不得转载:惠主机 » BCC工具:用于监控Linux系统IO、网络、调用等活动情况