eBPF入门笔记:通过bpftrace追踪内核

bpftrace安装

官方Install指南
centos repo

curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo
yum install bpftrace bpftrace-tools bpftrace-doc bcc-static bcc-tools

追踪点查询

# 查询所有内核插桩和跟踪点
sudo bpftrace -l

# 使用通配符查询所有的系统调用跟踪点
sudo bpftrace -l 'tracepoint:syscalls:*'

# 使用通配符查询所有名字包含"execve"的跟踪点
sudo bpftrace -l '*execve*'

# -v查看详细参数
bpftrace -lv "tracepoint:syscalls:sys_enter_init_module"
tracepoint:syscalls:sys_enter_init_module
    int __syscall_nr
    void * umod
    unsigned long len
    const char * uargs

其它方式:

  1. 查询 /sys/kernel/debug 路径
    没有该路径,需要挂载 sudo mount -t debugfs debugfs /sys/kernel/debug
  2. perf list

追踪

单行执行

追踪execve 函数,输出 pid与父程序以及参数:

bpftrace -e 'tracepoint:syscalls:sys_enter_execve,tracepoint:syscalls:sys_enter_execveat { printf("%-6d %-8s", pid, comm); join(args->argv);}'
Attaching 2 probes...
180144 bash    groups
180145 bash    /usr/bin/locale-check C.UTF-8
180146 bash    locale
180148 bash    whoami
180150 bash    grep -q history -a

tools

https://github.com/iovisor/bpftrace#tools

执行bpftrace oomkill 追踪工具

执行 tail /dev/zero 触发oom (谨慎操作,先关闭swap swapoff -a

看到OOMKill输出:

# ./oom_kill.bt
Attaching 1 probe...
23:04:36 Triggered by PID 180101 ("tail"), OOM kill of PID 180101 ("tail"), 8218767 pages, loadavg: 0.40 0.14 0.05 2/494 180103

你可能感兴趣的:(eBPF入门笔记:通过bpftrace追踪内核)