bpftrace

Linux向けの高レベルなトレーシング言語兼フロントエンド。ユーザーが書いたトレーシングスクリプトをコンパイルし、eBPFバイトコードとしてカーネル空間で安全に実行する。eBPFのオブザーバビリティ用途を代表するツールの一つ。 #linux #kernel #observability

設計

  • 言語デザインはawk、C、および先行するトレーサーであるDTrace・SystemTapから影響を受けている
  • バックエンドとしてLLVM(スクリプトのコンパイル)とlibbpf(BPFサブシステムとのやり取り)を使用する

probeの種類

  • kprobe/kretprobe: カーネル関数の呼び出し時/リターン時に発火する。動的で、デバッグ・調査向け
  • uprobe/uretprobe: ユーザー空間関数版のkprobe。アプリケーション内部の可視化に使う
  • tracepoint: カーネルソースコードに静的に定義されたプローブ地点。kprobeと異なりカーネルバージョン間で安定しているため、本番監視向け
  • usdt (User Statically-Defined Tracing): ユーザー空間アプリケーションに静的に埋め込まれたトレースポイント

使い分けの目安として、本番監視には安定したtracepoint、デバッグ・調査にはkprobe、アプリケーション内部を見たい場合はuprobeを使うとされる。

実行モード

  • Dynamic Mode: スクリプトを即座にコンパイル・実行する通常の使い方
  • Listing Mode (-l): 実行せず利用可能なprobe地点を列挙する
  • Ahead-of-Time Mode (--aot): スクリプトを移植可能な実行ファイルに事前コンパイルする
  • Test Mode (--test-mode): カーネル実行なしでの検証・ベンチマーク用

実験

実際にインストールして動かした記録はbpftraceを動かしてeBPFトレーシングを体感するを参照。

出典

作成日時: 2026-08-13 08:32 / 更新日時: 2026-08-13 08:32