ebpfmon 是一个用于监控 eBPF 程序的工具。它设计为与 Linux 内核中的 bpftool 一起使用。ebpfmon 是一个用 Go 编写的 TUI(终端用户界面)应用程序,允许您实时监控 eBPF 程序。
eBPFmon 可以从源代码构建,也可以在 releases 中找到编译版本。
$ sudo apt install linux-tools-`uname -r` libelf-dev zlib1g-dev libcap-dev binutils-dev
$ sudo yum install bpftool elfutils-libelf-devel libcap-devel binutils-devel
$ sudo dnf install elfutils-libelf-devel libcap-devel zlib-devel binutils-devel bpftool
$ sudo apt install bpftool libelf-dev zlib1g-dev libcap-dev binutils-dev
$ ./ebpfmon
注意:bpftool 需要 root 权限,因此 ebpfmon 会运行 sudo bpftool ...。这意味着您可能会被提示输入 sudo 密码。
首先,此工具是用 Go 编写的,因此您需要安装 Go 并将其添加到 PATH 变量中。它应适用于 Go 1.18 或更高版本,尽管也可能在更早版本上工作。只是尚未测试。
接下来,请确保安装以下依赖。
只需运行以下命令。这将在当前目录中构建 ebpfmon 二进制文件。
$ git clone https://github.com/redcanaryco/ebpfmon.git
$ cd ebpfmon
$ make
ebpfmon 的主视图是程序视图。该视图显示系统上当前加载的所有 eBPF 程序。每个窗格都是可选择的,您可以使用 tab 键在窗格之间切换。在给定窗格中,您可以使用箭头键上下滚动文本或列表选择。对于程序或映射等列表,您可以按回车键进行选择。选择一个程序将在其他窗格中填充该程序的相关信息。选择一个映射将切换到映射条目视图,显示该映射的条目。
ebpfmon 中有一些可用的按键绑定。这些按键绑定列在帮助页面上,可以通过按 F1 键或 ? 键访问。
无论您处于哪个视图,要访问程序视图,可以按 Ctrl 和 e。
无论您处于哪个视图,要访问 bpf 功能视图,可以按 Ctrl 和 f。
要访问映射视图,只需为当前 eBPF 程序选择一个映射(如果存在)。这将用映射条目填充映射视图。您可以通过按 d 键删除映射条目。在映射视图中,您可以通过多种方式格式化映射条目数据。要进入格式部分,只需在映射条目列表视图中按 TAB 键。然后您可以使用 TAB 在不同的格式选项之间移动。要返回映射条目列表,请按 ESC 键。
您还可以通过按 ENTER 键来编辑选中的映射条目。在编辑视图中,您可以编辑映射键/值的原始字节值。您可以忽略方括号。
要退出应用程序,您可以按 q 或 Q。
通常,按 ESC 键可返回您之前所在的视图。另外,如果您在帮助视图或错误视图中,按 ESC 键应返回上一个窗口。
-bpftool允许您指定 bpftool 二进制文件的路径。如果您有想要使用的自定义 bpftool 构建版本,这将非常有用。默认情况下将使用系统的 bpftool 二进制文件。您也可以使用环境变量。它将按以下顺序查找:
-bpftool 参数BPFTOOL_PATH。-logfile此参数允许您指定要记录到的文件。默认情况下,它将记录到 ./log.txt。在尝试调试应用程序问题时,这是一个很好的检查文件,因为它会记录运行时发生的错误。
该项目附带一些基础测试。
要运行测试,只需在项目的根目录下运行以下命令
$ go test ./...
如果您想使用自己的 bpftool 二进制文件,可以将 BPFTOOL_PATH 环境变量设置为您 bpftool 二进制文件的路径。否则将默认使用系统自带的。