• 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)
    
    • 1

    这些工具安装在/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)
    
    • 1
    • 2
    • 3
    • 4

    工具将安装在 /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
    
    • 1

    这时候,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    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()
    
    • 1
    • 2
    • 3
    • 4

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

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

    python hello_world.py 
    
    • 1

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

    ps
    
    • 1

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

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

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

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

  • 相关阅读:
    Seurat包学习:如何查看R包函数源代码
    Spring MVC:请求转发与请求重定向
    瑞芯微 | 如何固定以太口地址为指定ip?
    upload-labs靶场通关指南(第1-3关)
    Flink 流处理API
    想打造私域流量帝国?先解决这4个难题!
    MATLAB绘图
    信息安全工程师软考——第一章 网络信息安全概述笔记!!!!
    CSS盒子模型的详细解析
    工程机械——起重机导电滑环
  • 原文地址:https://blog.csdn.net/weixin_40425640/article/details/125890691