Github每日精选(第9期):bcc跟踪内核和操作程序的工具集

bcc

BCC 是一个用于创建高效内核跟踪和操作程序的工具包,包括几个有用的工具和示例。它利用了扩展的 BPF(Berkeley Packet Filters),正式名称为 eBPF,这是首次添加到 Linux 3.15 的新功能。BCC 使用的大部分内容都需要 Linux 4.1 及更高版本。

github上的地址在[这里](https://github.com/iovisor/bcc)

在这里插入图片描述

BCC 使 BPF 程序更易于编写,使用 C 中的内核工具(并包括围绕 LLVM 的 C 包装器),以及 Python 和 lua 中的前端。它适用于许多任务,包括性能分析和网络流量控制。

安装

Ubuntu的源中包含生成的二进制包,可以在packages.ubuntu.com找到。

sudo apt-get install bpfcc-tools linux-headers-$(uname -r)

这些工具安装在/sbin/usr/sbinUbuntu 18.04 中)并带有-bpfcc扩展名。尝试运行sudo opensnoop-bpfcc

签名包安装:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD
echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list
sudo apt-get update
sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r)

工具将安装在 /usr/share/bcc/tools 下。

BCC自带工具

BCC自带的部分工具(/usr/share/bcc/tool)的基本用法:

  • execsnoop
  • opensnoop
  • ext4slower (or btrfs, xfs, zfs*)
  • biolatency
  • biosnoop
  • cachestat
  • tcpconnect
  • tcpaccept
  • tcpretrans
  • runqlat
  • profile

把地址转到 /usr/share/bcc/tool 下,等下我们要测试几个工具。

我们来看一个比较简单的例子,比如我们想分析一个软件,一开始我们想看看这个软件读写了哪些文件,例如把数据存在某个目录下,或者log放到哪里了,都可以通过opensnoop命令进行监控。如下:

在这里插入图片描述
开启另一个命令窗口,创建一个文件:

 touch 1.txt

这时候,opensnoop输入如下的信息:

10880  touch               3   0 /etc/ld.so.cache
10879  opensnoop          -1   2 /usr/lib/python2.7/encodings/ascii.x86_64-linux-gnu.so
10879  opensnoop          -1   2 /usr/lib/python2.7/encodings/ascii.so
10879  opensnoop          -1   2 /usr/lib/python2.7/encodings/asciimodule.so
10879  opensnoop          11   0 /usr/lib/python2.7/encodings/ascii.py
10879  opensnoop          12   0 /usr/lib/python2.7/encodings/ascii.pyc
10880  touch               3   0 /lib/x86_64-linux-gnu/libc.so.6
10880  touch               3   0 /usr/lib/locale/locale-archive
10880  touch               3   0 1.txt

是不是觉得很神奇,其他的命令可以参考其文档。

BCC下的python开发

如果觉得工具用起来比较死板,当然也是可以通过编程进行定制的,BCCpython的demo在这个路径下/usr/share/bcc/examples,我们先看下helloworlddemo写的是什么。

from bcc import BPF

# This may not work for 4.17 on x64, you need replace kprobe__sys_clone with kprobe____x64_sys_clone
BPF(text='int kprobe__sys_clone(void *ctx) { bpf_trace_printk("Hello, World!\\n"); return 0; }').trace_print()

代码很少 kprobe__sys_clone 关键是这句话,他说如果调用到系统的clone的话,那么就打印一次Hello, World,聪明的你当然会知道如果要监控其他函数,那应该怎么改了。

我们运行程序,先转到 /usr/share/bcc/examples目录下:

python hello_world.py 

在另外一个命令窗口输入:

ps

就会输出如下的监控信息:

bash-10846 [000] .... 77868.616684: 0x00000001: Hello, World!

这是为什么呢?很简单 ps命令在实现的时候,用到了clone这个函数,他被捕捉到了。

其他的可以看相应的文档,继续了解了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

go2coding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值