使用bpftrace进行系统追踪,入门教程!

什么是bpftrace?

        bpftrace 是一个用于编写和运行 eBPF 程序的高级语言和工具。它允许用户通过简洁的语法编写追踪脚本,监控系统中的各种事件,如函数调用、系统调用、内存分配等。

        目前我们在使用libbpf进行Linux可观测性软件的开发工作,使用bpftrace进行探针位置可行性验证是一个非常简单好用的工具。

安装bpftrace

在安装之前,请确保你的系统内核版本至少为4.9,并且启用了eBPF支持。

Debian/Ubuntu系统:
sudo apt-get update
sudo apt-get install bpftrace

Centos/OpenEuler
sudo yum update
sudo yum install bpftrace

tracepoint追踪系统调用

bpftrace脚本文件通常以.bt结尾。你可以直接在命令行上编写和运行bpftrace脚本,也可以将脚本保存到文件中再运行。

示例:打印每次调用open系统调用时的进程ID和文件名

bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("PID %d opening file: %s\n", pid, str(args->filename)); }'

在上面的命令中:

  • -e 选项用于指定一个bpftrace脚本。
  • tracepoint:syscalls:sys_enter_open 是事件探针(probe),表示我们要追踪的事件。(进入/sys/kernel/tracing/events/syscalls,可以看到系统的所有系统调用)
  • { printf("PID %d opening file: %s\n", pid, str(args->filename)); } 是事件触发时执行的操作。

kprobe追踪内核函数调用

bpftrace 允许用户追踪内核函数的调用,例如追踪do_sys_open函数的入口和出口:

bpftrace -e 'kprobe:do_sys_open { printf("Entering do_sys_open: PID %d\n", pid); }'
bpftrace -e 'kretprobe:do_sys_open { printf("Exiting do_sys_open: PID %d\n", pid); }'

uprobe追踪用户空间函数调用

使用uprobeuretprobe来追踪用户空间函数调用。例如,追踪/bin/bash中的readline函数:

bpftrace -e 'uprobe:/bin/bash:readline { printf("Calling readline\n"); }'
bpftrace -e 'uretprobe:/bin/bash:readline { printf("Finished readline\n"); }'

使用bpftrace的变量和内置函数

bpftrace 提供了丰富的变量和内置函数来获取各种系统信息。例如,使用@定义的映射(map)可以统计某个事件的发生次数:

bpftrace -e 'tracepoint:syscalls:sys_enter_open { @counter[comm] = count(); }'

常用命令总结

  • bpftrace -l:列出系统中所有可用的探针。
  • bpftrace -e 'script':运行内联的bpftrace脚本。
  • bpftrace script.bt:运行保存在文件中的bpftrace脚本。
  • bpftrace -v:启用详细模式。

bpftrace 是一个功能强大且灵活的工具,适用于各种系统监控和调试任务。通过掌握bpftrace的基本命令和用法,您可以在不影响系统性能的前提下,深入了解系统和应用程序的行为,为性能优化和问题排查提供有力支持。

希望这篇教程能帮助你快速上手bpftrace,并应用于实际工作中。如有任何问题或建议,欢迎在评论区留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeoCache

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值