Upgrade to Pro — share decks privately, control downloads, hide ads and more …

eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)

eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)

2025年4月24日 (木) に開催された「いつも監視(み)てるよ 〜ヤバいオブザーバビリティLT会〜」での発表資料です。

https://livesense.connpass.com/event/349898/

Koki Senda

April 24, 2025
Tweet

More Decks by Koki Senda

Other Decks in Programming

Transcript

  1. BPFとは BPF = Berkeley Packet Filter (さいしょはBSD Packet Filter) ▪

    パケットをOS世界でフィルタリングするもの 5 Kernel Packet Filter Network Pakcets
  2. BPFとは BPF = Berkeley Packet Filter ▪ パケットをOS世界でフィルタリングするもの 7 Kernel

    Packet Filter Network Userland Pakcets Application ここをまたぐとコストが高い!
  3. eBPFとは 9 ▪ この仮想マシンが、パケットフィルター以外もできればいいのでは? • → これがextended (拡張された) なところ カーネル上で動く

    プログラム を自分で書ける Packet Filter 仮想マシン カーネルの再コンパイルや計算機の再起動をすることなく、 カーネルに挙動を追加できる!
  4. デモ 11 $ sudo bpftrace -e ' tracepoint:syscalls:sys_enter_execve { printf("PID

    %d executed %s\n", pid, str(args->filename) ); }' Attaching 1 probe... $ Terminal 1 eBPFプログラムをシステムコール呼び 出しにアタッチしてログを出す Terminal 2 システムコールを伴う コマンドを実行する
  5. デモ 12 $ sudo bpftrace -e ' tracepoint:syscalls:sys_enter_execve { printf("PID

    %d executed %s\n", pid, str(args->filename) ); }' Attaching 1 probe... $ ls file_a file_b file_c $ Terminal 1 eBPFプログラムをシステムコール呼び 出しにアタッチしてログを出す Terminal 2 システムコールを伴う コマンドを実行する
  6. デモ 13 $ sudo bpftrace -e ' tracepoint:syscalls:sys_enter_execve { printf("PID

    %d executed %s\n", pid, str(args->filename) ); }' Attaching 1 probe... PID 9817 executed /usr/bin/ls $ ls file_a file_b file_c $ Terminal 1 eBPFプログラムをシステムコール呼び 出しにアタッチしてログを出す Terminal 2 システムコールを伴う コマンドを実行する
  7. 参考文献 ▪ https://ebpf.io/ ▪ The BSD Packet Filter: A New

    Architecture for User-level Packet Capture • Steven McCanne • Van Jacobso • 論文 ▪ Learning eBPF • Liz Rice • 本 ▪ 入門 eBPF ―Linuxカーネルの可視化と機能拡張 • Liz Rice 著 • 武内 覚、近藤 宇智朗 訳 • Learning eBPFの日本語訳 14