English

bpftrace — eBPF 기반 추적 스크립트

Linux / 장애 진단 및 복구 / bpftrace.html

장애 진단 및 복구원문등록 2026-10-18T22:00:00+09:00

💬 "bpftrace 명령어"

bpftrace는 eBPF 기반 추적 스크립트 eBPF로 커널·유저스페이스 이벤트를 실시간 추적합니다. DTrace·SystemTap에 대응합니다.

커널 함수·시스템콜·유저스페이스 프로브를 지원합니다. 단일 명령으로 집계·분포·이벤트 추적을 수행합니다.

  • 개념: 커널 함수·시스템콜·유저스페이스 프로브를 지원합니다.
  • 주요 기능: 단일 명령으로 집계·분포·이벤트 추적을 수행합니다.
  • 장점: DTrace 문법과 유사합니다 (oneliner 위주).
  • 활용: 프로덕션 서버에 안전합니다 (오버헤드 극소).

설치 및 다운로드

bpftrace는 패키지 매니저 또는 공식 스크립트로 설치합니다.

환경명령
Ubuntu 22.04+sudo apt install bpftrace
RHEL 9+sudo dnf install bpftrace
Archsudo 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 호출을 집계한 결과입니다.

bpftrace 명령어 실행 결과

실제 운영 중인 서버

실무에서는 이렇게 씁니다

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 명령어 실행 결과 2

실제 운영 중인 서버

주의할 점

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