🌙

ebpf在欧拉系统上的使用

一、检查一下你的欧拉系统版本,确保它支持 eBPF:

[root@anonymous ~]# cat /etc/openEuler-release
openEuler release 24.03 (LTS-SP3)
[root@anonymous ~]# uname -r
6.6.0-140.0.0.123.oe2403sp3.x86_64

二、准备工作

先给你的欧拉系统装好“调料”。打开终端,执行下面的命令就行:

sudo dnf install -y bcc bpftrace kernel-devel llvm clang

 

每个软件包是干什么的?(核心重点)

1.bcc(BPF Compiler Collection)

  • 全名:BPF 编译器集合
  • 通俗理解:一个“工具百宝箱”,里面装了 50+ 个可以直接使用的 eBPF 监控命令,比如 execsnoop(追踪新进程)、biolatency(看磁盘慢不慢)。
  • 为什么需要它:你不需要自己写代码,直接敲这些命令就能用 eBPF。

2. bpftrace

  • 全名:BPF Trace(BPF 追踪脚本语言)
  • 通俗理解:一个“一行命令搞定监控”的神器。你可以像写简短的句子一样,写出强大的监控脚本。比如前面教程里的:
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("打开了文件: %s\n", str(args->filename)); }'

1. 事件源:tracepoint:syscalls:sys_enter_openat

  • tracepoint:内核中预先埋好的“钩子点”。相当于在马路上提前装好的感应器。

  • syscalls:系统调用类别。系统调用是程序请求内核干活(比如读写文件、创建进程)的“官方通道”。

  • sys_enter_openat:具体的事件名称。openat 是一个打开文件的系统调用(程序想打开某个文件时会触发)。sys_enter_ 表示“刚进入这个系统调用时”,也就是程序刚要打开文件的那一瞬间。

通俗理解:我们在内核的“文件打开操作”的入口处,安装了一个监听器。每当任何一个程序试图打开文件,这个监听器就会立刻触发。

2. 动作:{ printf("打开了文件: %s\n", str(args->filename)); }

大括号 { ... } 里定义了事件发生时要执行的代码。

  • printf(...):输出一行文字,类似其他编程语言里的打印。

  • "打开了文件: %s\n":输出模板。%s 是一个占位符,会被后面的内容替换;\n 表示换行。

  • str(args->filename)

    • args 是一个特殊变量,包含了事件发生时内核传递的所有信息(比如要打开的文件名、打开模式等)。

    • args->filename 取出文件名(原始格式是指针)。

    • str(...) 将指针转换为可读的字符串。

通俗理解:当有人打开文件,就打印一行字:“打开了文件: 具体文件名.txt”。

 

你运行这条命令后,bpftrace 会把这个小脚本编译成 eBPF 字节码,并注入到 Linux 内核里。

脚本在内核中静静等待。每当系统中的任何一个程序调用 openat 想打开文件时,内核就会执行脚本里的 printf。

输出结果打印在你的终端上,显示刚刚哪个文件被打开了。

 

为什么需要它:快速写自定义监控,不用学复杂的 C 语言。

3. kernel-devel

  • 全名:Kernel Development(内核开发头文件)

  • 通俗理解:内核的“说明书”和“零件库”。eBPF 程序需要知道内核里有哪些函数、数据结构,这个包提供了这些定义。

  • 为什么需要它:没有它,eBPF 工具无法编译和加载到内核里。

4. llvm

  • 全名:Low Level Virtual Machine(底层虚拟机编译器)

  • 通俗理解:一个“翻译官”。把人类写的 C 语言代码(或 bpftrace 脚本)翻译成 eBPF 虚拟机能够理解的“字节码”。

  • 为什么需要它:eBPF 程序运行在内核中的一个沙盒虚拟机里,必须经过 LLVM 编译。

5. clang

  • 全名:C Language Frontend for LLVM(LLVM 的 C 语言前端)

  • 通俗理解:LLVM 的“嘴巴”,专门负责“吃”C 语言代码。写 eBPF 程序主要用 C 语言,clang 负责解析并交给 LLVM 编译。

  • 为什么需要它:编译 eBPF 程序的标准工具。

 

posted @ 2026-05-24 21:13  星火撩原  阅读(9)  评论(0)    收藏  举报
本站已运行:0
🌙 夜间模式
🌙
🌙