用于网络和监控的动态 Linux 跟踪工具

BCC(BPF 编译器集合)是一组功能强大的适当工具和示例文件,用于创建资源丰富的内核跟踪和操作程序。

它利用扩展的 BPF(伯克利数据包过滤器),最初称为 eBPF,是 Linux 3.15 中的新功能之一。

BCC/BPF – 用于 Linux 性能监控的动态跟踪工具BCC/BPF – 用于 Linux 性能监控的动态跟踪工具

实际上,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 系统中安装 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

密件抄送工具密件抄送工具

我们将介绍几个示例:监控一般 Linux 系统性能和网络。

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

让我们从追踪所有开始 open() 使用 opensnoop 工具进行系统调用。 这使我们能够通过识别数据文件、配置文件等来了解各种应用程序的工作原理:

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

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

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

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

sudo ./biolatency

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

跟踪 Linux 中的新进程

在本节中,我们将使用 execsnoop 工具来跟踪正在执行的新进程。 每次进程被分叉时 fork()exec() 系统调用,它显示在输出中。 然而,并非所有进程都被捕获。

sudo ./execsnoop

跟踪 Linux 中的新进程跟踪 Linux 中的新进程

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

使用ext4slower跟踪ext4文件系统常见的慢于10ms的操作,帮助我们识别通过文件系统独立缓慢的磁盘I/O。

它只输出那些超过阈值的操作:

sudo ./ext4slower

查找较慢的 Ext4 操作查找较慢的 Ext4 操作

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

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

sudo ./biosnoop

检查磁盘 I/O 活动检查磁盘 I/O 活动

分析系统缓存性能

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

sudo ./cachestat

检查系统缓存性能检查系统缓存性能

在 Linux 中监控 TCP 连接

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

sudo ./tcpconnect

在 Linux 中监控 TCP 连接在 Linux 中监控 TCP 连接

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

sudo ./tcpconnect -h

密件抄送工具帮助页面密件抄送工具帮助页面

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

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

sudo ./opensnoop -x

跟踪失败的 exec() 系统调用跟踪失败的 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 探针等等。 重要的是,它附带了几个示例文件和手册页,用于指导您的工具,使其用户友好且可靠。

最后但并非最不重要的一点是,您可以通过下面的评测部分分享您对这个主题的想法、提出问题、提出有用的建议或任何建设性的反馈来联系我们。

资讯来源:由0x资讯编译自TECMINT。版权归作者Aaron Kili所有,未经许可,不得转载

资讯来源:由a0资讯编译自THECOINREPUBLIC。版权归作者A0资讯所有,未经许可,不得转载

上一篇 2024年 5月 31日
下一篇 2024年 5月 31日

相关推荐