BPFによるトレーシングが簡単にできる「bpftrace」の使い方Berkeley Packet Filter(BPF)入門(9)

Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載。今回は、「bpftrace」によるトレーシングについて。

» 2020年06月15日 05時00分 公開
[味曽野雅史OSSセキュリティ技術の会]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載「Berkeley Packet Filter(BPF)入門」。前回はBPFによるトレーシングについて、おおまかな仕組みや概要を説明しました。今回は、BPFによる代表的なトレーシングツール「bpftrace」について、具体的にどのようなことができるのかを紹介します。また、bpftraceの注意点や分かりにくい点についてもまとめます。

bpftraceとは

 bpftraceはBPFを利用したトレーシングツールの一つです。代表的なBPFのライブラリである「BCC(BPF Compiler Collection)」と同じく、現在は「iovisor」が管理しています。BCCと比較すると、bpftraceはトレース処理に特化し、より簡単に利用できるようになっているといえるでしょう。

 bpftraceには下記のような特徴があります。

  • トレーシング処理を専用の言語で記述
    • BPFプログラム特有の細かい制約や注意事項を気にせずにトレースプログラムが書ける
  • 主要トレーシング機能のサポート
    • カーネルトレーシング
      • tracepoints
      • k(ret)probe
      • k(ret)func
      • perf event
    • ユーザープログラムトレーシング
      • u(ret)probe
      • USDT(Userland Statically Defined Tracing)
  • カーネルの最新機能の対応
    • BTF(BPF Type Format)によるカーネルデータ構造の取得
    • BPF Trampolineによるトレーシング

 BPFを用いて何かトレーシングしたい場合、一番お薦めのツールです。

bpftraceの入手

 bpftraceをインストールする主要な方法を紹介します。前提として、一般にLinux 4.9以上のBPFが有効化されたカーネルが必要です。Ubuntu 18.04+、Fedora 31+、REHL(Red Hat Enterprise Linux) 8、REHL 7(BPF機能がバックポートされている)などで利用できます。もしbpftraceを試すために新規のOS環境を構築する場合は、BTFのサポートがあるFedora 32がお薦めです。

パッケージマネジャーからの入手

 多くのパッケージマネジャーでbpftraceを取り扱っています。

sudo snap install bpftrace --devmode
sudo snap connect bpftrace:system-trace
Ubuntu

 Ubuntu 20.04ではaptからもインストールできますが、snap版の方がパッケージの更新頻度が高いです。

sudo dnf install -y bpftrace
Fedora

 パッケージマネジャーに存在するbpftraceは、場合によってはバージョンが古いことがあります。もしバグと思われる挙動に遭遇した場合は、以下の方法で最新版を試してみてください。bpftraceは現在活発に開発されているので、バグが修正されている可能性があります。

GitHubのembeded buildを取得

 GitHub Actionsのembedded buildから、最新のビルドを入手することが可能です。

Dockerイメージの利用

 quay.ioにbpftraceのDockerイメージがあります。このDockerイメージには最新版のbpftraceが含まれています。このDockerイメージは、以下のようにカーネルソースやdebugfsを適切にコンテナにマウントした上でprivilegeなコンテナとして利用します。

$ docker run -ti -v /usr/src:/usr/src:ro \
       -v /lib/modules/:/lib/modules:ro \
       -v /sys/kernel/debug/:/sys/kernel/debug:rw \
       --net=host --pid=host --privileged \
       quay.io/iovisor/bpftrace:latest

 コンテナ内の/usr/bin/bpftraceにbpftraceがあります。また/usr/local/bin/以下にbpftraceのスクリプトがインストールされています。

自分でビルドする

 bpftraceの最新機能、特にBTFに関する機能を利用する場合は、自分でBCC、libbpfとbpftraceをビルドする必要があります。詳細については「INSTALL.md」を参照してください。

bpftrace入門

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。