bpftrace — eBPF 기반 추적 스크립트
Linux / 장애 진단 및 복구 / bpftrace.html
💬 "bpftrace 명령어"
bpftrace는 eBPF 기반 추적 스크립트 eBPF로 커널·유저스페이스 이벤트를 실시간 추적합니다. DTrace·SystemTap에 대응합니다.
커널 함수·시스템콜·유저스페이스 프로브를 지원합니다. 단일 명령으로 집계·분포·이벤트 추적을 수행합니다.
- 개념: 커널 함수·시스템콜·유저스페이스 프로브를 지원합니다.
- 주요 기능: 단일 명령으로 집계·분포·이벤트 추적을 수행합니다.
- 장점: DTrace 문법과 유사합니다 (oneliner 위주).
- 활용: 프로덕션 서버에 안전합니다 (오버헤드 극소).
설치 및 다운로드
bpftrace는 패키지 매니저 또는 공식 스크립트로 설치합니다.
| 환경 | 명령 |
|---|---|
| Ubuntu 22.04+ | sudo apt install bpftrace |
| RHEL 9+ | sudo dnf install bpftrace |
| Arch | sudo pacman -S bpftrace |
| 소스 빌드 | github.com/bpftrace/bpftrace |
| 확인 | bpftrace --version |
설치 확인은 bpftrace --version으로 합니다.
자주 쓰는 옵션
| 옵션 | 설명 |
|---|---|
bpftrace -e '<prog>' | 인라인 스크립트를 실행합니다 |
bpftrace <file.bt> | 파일에서 스크립트를 실행합니다 |
-l | 사용 가능한 프로브 목록 |
BEGIN { } | 시작 시 실행 (초기화) |
END { } | 종료 시 실행 (집계 출력) |
필수 명령어 조합 3가지
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { @[comm] = count(); }'— 프로세스별 open 호출 집계bpftrace -e 'kprobe:do_sys_openat2 { @[probe] = count(); }'— 커널 프로브 집계bpftrace -l 'tracepoint:syscalls:*'— 사용 가능한 프로브 확인
💬 "실제 서버에서 bpftrace를 사용하는 예시를 보여줘"
실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.
1단계 · 설치 확인
설치 여부를 확인합니다.
bpftrace --version || sudo apt install -y bpftrace
2단계 · 프로브 확인
사용 가능한 프로브를 확인합니다.
sudo bpftrace -l 'tracepoint:syscalls:sys_enter_openat'
3단계 · 추적 실행
프로세스별 open 호출을 집계합니다.
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { @[comm] = count(); }'
실제 실행 화면
bpftrace로 프로세스별 open 호출을 집계한 결과입니다.

실제 운영 중인 서버
실무에서는 이렇게 씁니다
1. I/O 병목 추적
상황 — 디스크 I/O가 느려진 원인을 찾습니다.
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { @[comm] = count(); }'
결과 — postgres가 2891회로 가장 많습니다.
포인트 — 프로세스별 open 호출 횟수로 병목을 찾습니다.
2. 파일별 분석
상황 — 특정 프로세스가 어떤 파일을 자주 여는지 봅니다.
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat /comm == "postgres"/ { @[str(args->filename)] = count(); }'
결과 — base/16384/1259 파일이 1024회로 가장 많습니다.
포인트 — DB 파일 접근 패턴을 분석할 수 있습니다.
실제 실행 화면
bpftrace로 파일별 open 호출을 분석한 결과입니다.

실제 운영 중인 서버
주의할 점
- bpftrace는 루트 권한이 필요하며 커널 버전에 따라 사용 가능한 프로브가 다릅니다.
- 과도한 프로브는 커널 오버헤드를 유발합니다. 프로덕션에서는 샘플링 간격을 조정합니다.
- 상용 커널에서는 BTF(BPF Type Format) 지원이 필요합니다.