
bpftoolを使用してeBPFプログラムとマップをリアルタイムで監視・検査するためのターミナルUI。カーネルレベルの可観測性データのライブデバッグと解析を可能にします。
ebpfmon は eBPF プログラムを監視するためのツールです。Linux カーネルの bpftool と組み合わせて使用するように設計されています。ebpfmon は Go で書かれた TUI(ターミナル UI)アプリケーションで、eBPF プログラムのリアルタイム監視を可能にします。
eBPFmon はソースからビルドするか、リリースページ でコンパイル済みのバージョンを入手できます。
$ 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 キーを使用してペイン間を切り替えることができます。特定のペイン内では、矢印キーを使用してテキストのスクロールやリストの選択を上下に移動できます。プログラムやマップなどのリストでは、Enter キーを押して選択できます。プログラムを選択すると、そのプログラムに関する情報が他のペインに表示されます。マップを選択すると、そのマップのエントリを表示するマップエントリビューに切り替わります。
ebpfmon で使用できるキーバインドがいくつかあります。これらは F1 キーまたは ? キーを押すと表示されるヘルプページに一覧表示されています。
どのビューにいても、Ctrl + e を押すとプログラムビューにアクセスできます。
どのビューにいても、Ctrl + f を押すと BPF フィーチャービューにアクセスできます。
マップビューにアクセスするには、現在の eBPF プログラムのマップ(存在する場合)を選択するだけです。これにより、マップエントリがマップビューに表示されます。d キーを押すとマップエントリを削除できます。マップビューでは、マップエントリのデータをさまざまな方法でフォーマットできます。フォーマットセクションに移動するには、マップエントリリストビューで TAB キーを押します。その後、TAB キーを使用して異なるフォーマットオプション間を移動できます。マップエントリリストに戻るには ESC キーを押します。
選択したマップエントリで ENTER を押すと編集することもできます。編集ビューでは、マップキー/バリューの生のバイト値を編集できます。角括弧は無視してかまいません。
アプリケーションを終了するには q または Q を押します。
通常、ESC キーを押すと、前にいたビューに戻ります。また、ヘルプビューやエラービューにいる場合も、Escape キーを押すと前のウィンドウに戻ります。
-bpftoolbpftool バイナリへのパスを指定できます。カスタムビルドの bpftool を使用したい場合に便利です。デフォルトではシステムの bpftool バイナリを使用します。環境変数を使用することもできます。以下の順序で確認します。
-bpftool 引数が指定されているか確認BPFTOOL_PATH が設定されているか確認-logfileこの引数はログファイルを指定できます。デフォルトでは ./log.txt にログを出力します。実行中に発生したエラーをログに記録するため、アプリケーションの問題をデバッグする際に確認するのに適したファイルです。
このプロジェクトにはいくつかの基本的なテストがあります。
テストを実行するには、プロジェクトのルートディレクトリから以下のコマンドを実行します。
$ go test ./...
独自の bpftool バイナリを使用したい場合は、BPFTOOL_PATH 環境変数に bpftool バイナリのパスを設定してください。設定しない場合は、デフォルトでシステムのものが使用されます。