Linux에서 eBPF를 사용할 때 프로그램을 작성하는 것만큼 중요한 것이 현재 커널에 어떤 eBPF 프로그램이 로드되어 있는지 확인하고 관리하는 작업입니다.
이를 위해 Linux Kernel에서 공식적으로 제공하는 관리 도구가 바로 bpftool입니다.
bpftool은 현재 실행 중인 eBPF 프로그램, BPF Map, 링크(Link), BTF(BPF Type Format), 네트워크 연결 상태 등을 확인하고 관리할 수 있는 강력한 CLI(Command Line Interface) 도구입니다.
운영 서버에서 eBPF를 사용하는 경우 거의 필수적으로 사용하는 도구이며, Cilium, Falco, Katran, BCC, bpftrace 같은 다양한 eBPF 기반 프로젝트에서도 내부적으로 활용됩니다.
이번 글에서는 bpftool의 개념과 구조, 주요 기능, 설치 방법, 자주 사용하는 명령어, 그리고 실무 활용 사례를 자세히 알아보겠습니다.
Linux bpftool이란?
bpftool은 Linux Kernel의 eBPF 객체를 조회하고 관리하기 위한 공식 명령줄 도구입니다.
기본 구조는 다음과 같습니다.
Administrator
↓
bpftool
↓
BPF System Call
↓
Linux Kernel
↓
Program / Map / Link / BTF
사용자는 bpftool을 통해 커널 내부의 eBPF 정보를 직접 확인할 수 있습니다.
bpftool이 필요한 이유
예를 들어 운영 서버에서 다음과 같은 상황이 발생했다고 가정해 보겠습니다.
- 어떤 eBPF 프로그램이 실행 중인지 모름
- XDP가 제대로 적용되었는지 확인 필요
- BPF Map 데이터 확인 필요
- 메모리를 사용하는 BPF 객체 확인 필요
이런 경우 bpftool 하나로 대부분의 정보를 확인할 수 있습니다.
bpftool의 주요 기능
bpftool은 다음과 같은 기능을 제공합니다.
| 기능 | 설명 |
|---|---|
| Program 조회 | 로드된 eBPF 프로그램 확인 |
| Map 조회 | BPF Map 확인 |
| Link 조회 | Hook 연결 상태 확인 |
| BTF 조회 | BTF 정보 확인 |
| Network 조회 | XDP, TC 연결 확인 |
| Feature 조회 | Kernel 지원 기능 확인 |
운영 환경에서 가장 많이 사용하는 기능은 Program, Map, Net입니다.
bpftool 설치
Ubuntu
sudo apt update
sudo apt install bpftool
RHEL 계열
sudo dnf install bpftool
버전 확인
bpftool version
Program 확인
현재 Kernel에 로드된 eBPF 프로그램
sudo bpftool prog show
출력 예시
1: tracing
2: xdp
3: tc
4: socket_filter
Program ID와 타입을 확인할 수 있습니다.
특정 Program 상세 보기
Program ID가 5인 경우
sudo bpftool prog show id 5
출력 예시
name my_xdp
type xdp
loaded_at
uid
map_ids
프로그램의 상세 정보를 확인할 수 있습니다.
Map 확인
현재 생성된 Map 조회
sudo bpftool map show
예시
id 10
type hash
key 4B
value 16B
Map 종류와 크기를 확인할 수 있습니다.
Map 데이터 확인
Map 내용 출력
sudo bpftool map dump id 10
출력 예시
key:
01 00 00 00
value:
64 00 00 00
실제 저장된 데이터를 확인할 수 있습니다.
Network 정보 확인
현재 XDP와 TC 연결 확인
sudo bpftool net
출력 예시
xdp:
eth0
prog_id 12
인터페이스별 eBPF 연결 상태를 확인할 수 있습니다.
Link 확인
현재 Link 정보
sudo bpftool link show
출력 예시
id 5
prog 12
type tracing
어떤 Program이 어떤 Hook에 연결되어 있는지 확인할 수 있습니다.
BTF 확인
Kernel의 BTF 정보 확인
sudo bpftool btf show
BTF는 eBPF 프로그램이 Kernel 구조체를 안전하게 참조하기 위한 메타데이터입니다.
Kernel 기능 확인
현재 Kernel이 지원하는 eBPF 기능
sudo bpftool feature
예시
Kernel Helpers
Map Types
Program Types
지원 가능한 기능을 한 번에 확인할 수 있습니다.
Program Pin 확인
Pinned Program 확인
sudo bpftool prog show pinned /sys/fs/bpf
Pinned 객체를 사용하는 환경에서는 자주 활용됩니다.
실무에서 자주 사용하는 명령어
버전 확인
bpftool version
Program 조회
sudo bpftool prog show
Map 조회
sudo bpftool map show
Map 데이터 확인
sudo bpftool map dump id 10
Network 확인
sudo bpftool net
Link 확인
sudo bpftool link show
Kernel 기능 확인
sudo bpftool feature
BTF 확인
sudo bpftool btf show
bpftool과 bpftrace의 차이
| 항목 | bpftool | bpftrace |
|---|---|---|
| 목적 | eBPF 관리 | eBPF 추적 |
| Program 조회 | 가능 | 제한적 |
| Map 조회 | 가능 | 불가능 |
| 실시간 이벤트 | 불가능 | 가능 |
| 운영 관리 | 매우 적합 | 분석 중심 |
bpftool은 관리 도구이고, bpftrace는 분석 도구라는 점이 가장 큰 차이입니다.
실무 사례
예를 들어 운영 서버에서 XDP 기반 DDoS 방어 프로그램을 배포했다고 가정해 보겠습니다.
다음과 같은 절차로 확인할 수 있습니다.
bpftool prog show로 XDP 프로그램이 정상적으로 로드되었는지 확인bpftool net으로 네트워크 인터페이스 연결 여부 확인bpftool map show로 생성된 BPF Map 확인bpftool map dump로 차단 대상 IP 데이터 확인bpftool feature로 Kernel 기능 지원 여부 확인
이러한 과정을 통해 eBPF 프로그램이 정상적으로 동작하는지 빠르게 점검할 수 있습니다.
자주 묻는 질문
bpftool은 반드시 설치해야 하나요?
eBPF를 사용하는 환경에서는 설치를 권장합니다. 특히 운영 서버에서 프로그램과 BPF Map을 확인하거나 문제를 진단할 때 매우 유용합니다.
bpftool과 BCC는 어떤 차이가 있나요?
BCC는 eBPF 프로그램을 개발하고 실행하기 위한 프레임워크입니다. 반면 bpftool은 이미 로드된 eBPF 프로그램과 관련 객체를 조회하고 관리하는 공식 도구입니다.
bpftool은 운영 서버에서도 사용할 수 있나요?
가능합니다. 대부분의 조회 명령은 시스템에 큰 부담을 주지 않으며, 실제 운영 환경에서도 상태 확인과 문제 분석을 위해 자주 사용됩니다.
마무리
Linux bpftool은 eBPF 생태계에서 가장 중요한 관리 도구입니다. 로드된 eBPF 프로그램과 BPF Map, Link, XDP, TC, BTF 정보를 한곳에서 확인할 수 있어 운영 환경의 상태 점검과 문제 해결에 필수적입니다. bpftrace가 분석 도구라면 bpftool은 관리 도구이며, 두 가지를 함께 활용하면 eBPF 기반 시스템을 더욱 효과적으로 운영할 수 있습니다.