Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載。今回は、「bpftrace」によるトレーシングについて。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載「Berkeley Packet Filter(BPF)入門」。前回はBPFによるトレーシングについて、おおまかな仕組みや概要を説明しました。今回は、BPFによる代表的なトレーシングツール「bpftrace」について、具体的にどのようなことができるのかを紹介します。また、bpftraceの注意点や分かりにくい点についてもまとめます。
bpftraceはBPFを利用したトレーシングツールの一つです。代表的なBPFのライブラリである「BCC(BPF Compiler Collection)」と同じく、現在は「iovisor」が管理しています。BCCと比較すると、bpftraceはトレース処理に特化し、より簡単に利用できるようになっているといえるでしょう。
bpftraceには下記のような特徴があります。
BPFを用いて何かトレーシングしたい場合、一番お薦めのツールです。
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 20.04ではaptからもインストールできますが、snap版の方がパッケージの更新頻度が高いです。
sudo dnf install -y bpftrace
パッケージマネジャーに存在するbpftraceは、場合によってはバージョンが古いことがあります。もしバグと思われる挙動に遭遇した場合は、以下の方法で最新版を試してみてください。bpftraceは現在活発に開発されているので、バグが修正されている可能性があります。
GitHub Actionsのembedded buildから、最新のビルドを入手することが可能です。
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」を参照してください。
Copyright © ITmedia, Inc. All Rights Reserved.