BCC – Linux性能监控、网络及更多功能的动态跟踪工具


如果您是Linux用户或管理员,您可能听说过“BCC工具”或“BPF编译器集合”。BCC是一套功能强大的动态跟踪工具,它提供了一种简单而有效的方法来监控系统性能、网络以及更多内容。在本文中,我们将讨论BCC工具是什么、它们的优点以及如何使用它们(附示例)。

什么是BCC工具?

BCC(BPF编译器集合)是一套基于Linux内核中eBPF(扩展伯克利数据包过滤器)技术的动态跟踪工具。eBPF是一个在内核内部运行的虚拟机,它允许对系统事件进行高效且灵活的跟踪,而无需修改内核或重新编译。

BCC工具旨在为使用eBPF跟踪和分析各种系统事件提供一个简单易用的界面。它们是用Python和C语言编写的,可用于广泛的任务,包括系统性能监控、网络分析、安全等。

BCC工具的优点

BCC工具为Linux用户和管理员提供了许多好处。这些包括:

低开销

BCC工具旨在对系统性能的影响最小。它们使用eBPF技术直接在内核内部跟踪事件,从而减少了与传统系统监控工具相关的上下文切换和其他开销。

灵活性

BCC工具可用于各种任务,从监控系统性能到网络分析等等。它们非常灵活且可定制,是Linux用户和管理员的强大工具。

用户友好的界面

BCC工具提供了一个简单易用的界面,用于使用eBPF跟踪系统事件。它们易于使用,不需要专门了解内核内部结构或编程。

活跃的开发社区

BCC工具由庞大的开发者社区积极开发和维护。这意味着不断添加新功能和改进,并且可以快速解决bug。

如何使用BCC工具

BCC工具可用于广泛的任务,包括系统性能监控、网络分析、安全等。在本节中,我们将讨论如何使用一些最常用的BCC工具,并提供示例。

BPFtrace

BPFtrace是一种用于eBPF的高级跟踪语言,旨在简化eBPF程序的编写和阅读。它为跟踪系统事件和分析性能提供了简单易用的界面。

要使用BPFtrace,您首先需要在系统上安装它。您可以使用您发行版的包管理器来完成此操作。例如,在Ubuntu上,您可以通过运行以下命令来安装BPFtrace:

sudo apt-get install bpftrace

安装BPFtrace后,您可以使用它来编写eBPF程序并跟踪系统事件。例如,以下BPFtrace程序将在每次启动进程时打印一条消息:

tracepoint:process:process_start
{
   printf("process %s started
", args->comm); }

您可以将此程序保存到一个文件(例如,“process_start.bt”)中,并使用以下命令运行它:

sudo bpftrace process_start.bt

运行此命令时,BPFtrace将开始跟踪进程事件,并在每次启动进程时打印一条消息。

BCC工具

BCC工具为Linux系统提供了广泛的跟踪和监控功能。一些最常用的BCC工具包括:

Execsnoop

execsnoop工具跟踪系统上新的进程执行。它可用于监控哪些进程正在运行以及它们何时启动。要使用execsnoop,只需运行以下命令:

sudo execsnoop

这将开始跟踪进程执行事件,并在启动新进程时打印有关这些进程的信息。

Opensnoop

opensnoop工具跟踪文件系统事件,包括文件打开、关闭和读取。它可用于监控文件系统活动并查找性能瓶颈。要使用opensnoop,请运行以下命令:

sudo opensnoop

这将开始跟踪文件系统事件,并在发生文件活动时打印有关文件活动的信息。

Tcptracer

tcptracer工具跟踪系统上的TCP连接,包括与远程主机及其关联端口的连接。它可用于监控网络活动并诊断网络相关问题。要使用tcptracer,请运行以下命令:

sudo tcptracer

这将开始跟踪TCP连接,并在发生连接事件时打印有关连接事件的信息。

BCC脚本示例

BCC工具也可用于编写更复杂的脚本以监控和分析系统性能。在本节中,我们将提供一些BCC脚本示例,这些脚本可用于监控CPU使用率、磁盘I/O和网络活动。

CPU使用率

以下BCC脚本可用于监控系统上的CPU使用率:

#!/usr/bin/python

from bcc import BPF

# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>

int count_sched(struct pt_regs *ctx) {
   u64 ts = bpf_ktime_get_ns();
   bpf_trace_printk("Hello, world! %d\
", ts); return 0; } """ # initialize BPF program bpf = BPF(text=bpf_text) # attach BPF program to sched_switch tracepoint bpf.attach_tracepoint(tp="sched:sched_switch", fn_name="count_sched") # print trace messages as they occur bpf.trace_print()

此脚本将在系统上的CPU调度程序切换任务时打印一条消息。

磁盘I/O

以下BCC脚本可用于监控系统上的磁盘I/O活动:

#!/usr/bin/python

from bcc import BPF

# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>

int count_disk_io(struct pt_regs *ctx, const char *rwflag) {
   u64 ts = bpf_ktime_get_ns();
   bpf_trace_printk("Disk I/O %s %d\
", rwflag, ts); return 0; } """ # initialize BPF program bpf = BPF(text=bpf_text) # attach BPF program to blk_account_io_done tracepoint bpf.attach_tracepoint(tp="block:block_rq_complete", fn_name="count_disk_io", ctx="R") # print trace messages as they occur bpf.trace_print()

此脚本将在系统上完成磁盘I/O操作时打印一条消息。

网络活动

以下BCC脚本可用于监控系统上的网络活动:

#!/usr/bin/python

from bcc import BPF

# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>

int count_network(struct pt_regs *ctx, int protocol) {
   u64 ts = bpf_ktime_get_ns();
   bpf_trace_printk("Network %d %d\
", protocol, ts); return 0; } """ # initialize BPF program bpf = BPF(text=bpf_text) # attach BPF program to tcp_v{4,6}_connect trace points bpf.attach_tracepoint(tp="tcp_v4_connect", fn_name="count_network", ctx="R") bpf.attach_tracepoint(tp="tcp_v6_connect", fn_name="count_network", ctx="R") print trace messages as they occur bpf.trace_print()

此脚本将在系统上建立TCP连接时打印一条消息。

除了我们提供的示例之外,BCC工具还有许多其他用例。例如,BCC工具可用于监控系统调用、跟踪用户级事件以及诊断内核级问题。其他一些可能有用的BCC工具包括:

  • csysdig – 一个提供图形界面以使用eBPF分析系统活动的工具。

  • funccount – 一个计算指定函数调用次数的工具。

  • tcpconnect – 一个跟踪系统上TCP连接的工具。

  • biosnoop – 一个在BIOS级别跟踪块I/O操作的工具。

  • syncsnoop – 一个跟踪系统上同步事件的工具。

BCC工具也可以与其他系统监控工具(例如prometheus、grafana和nagios)结合使用,以提供更全面的系统性能视图。

还值得注意的是,BCC工具正在不断地由社区开发和改进,因此定期添加新的功能和能力。因此,务必使您的BCC工具保持最新状态,以利用最新的改进。

结论

总之,BCC工具提供了一套强大的动态跟踪工具,用于监控和分析Linux系统上的系统性能、网络以及更多内容。它们提供用户友好的界面、低开销和高灵活性,使它们成为Linux用户和管理员的必备工具。无论您是系统管理员、开发人员还是安全分析师,BCC工具都可以帮助您深入了解您的系统并快速有效地诊断性能问题。因此,如果您还没有尝试过,请试用BCC工具,看看它们如何使您和您的Linux系统受益。

更新于:2023年4月11日

浏览量:499

启动您的职业生涯

通过完成课程获得认证

开始
广告