
bpftool을 사용하여 eBPF 프로그램과 맵을 실시간 모니터링 및 검사하는 터미널 UI로, 커널 수준 관찰 가능 데이터의 실시간 디버깅 및 분석을 가능하게 합니다.
ebpfmon은 eBPF 프로그램을 모니터링하기 위한 도구입니다. 리눅스 커널의 bpftool과 함께 사용하도록 설계되었습니다. ebpfmon은 Go로 작성된 TUI(터미널 UI) 애플리케이션으로, eBPF 프로그램의 실시간 모니터링을 가능하게 합니다.
eBPFmon은 소스에서 빌드하거나 릴리스에서 컴파일된 버전을 사용할 수 있습니다.
$ sudo apt install linux-tools-`uname -r` libelf-dev zlib1g-dev libcap-dev binutils-dev
$ sudo yum install bpftool elfutils-libelf-devel libcap-devel binutils-devel
$ sudo dnf install elfutils-libelf-devel libcap-devel zlib-devel binutils-devel bpftool
$ sudo apt install bpftool libelf-dev zlib1g-dev libcap-dev binutils-dev
$ ./ebpfmon
참고: bpftool은 루트 권한이 필요하므로 ebpfmon은 sudo bpftool ...을 실행합니다. 따라서 sudo 암호를 입력하라는 메시지가 표시될 수 있습니다.
먼저 이 도구는 Go로 작성되었으므로 Go가 설치되어 있고 PATH 변수에 설정되어 있어야 합니다. Go 1.18 이상에서 작동해야 하며, 이전 버전에서도 작동할 가능성이 있지만 테스트되지는 않았습니다.
다음으로, 다음 종속성을 설치해야 합니다.
다음 명령어를 실행하면 됩니다. 현재 디렉토리에 ebpfmon 바이너리가 빌드됩니다.
$ git clone https://github.com/redcanaryco/ebpfmon.git
$ cd ebpfmon
$ make
ebpfmon의 메인 뷰는 프로그램 뷰입니다. 이 뷰는 시스템에 현재 로드된 모든 eBPF 프로그램을 보여줍니다. 각 창은 선택 가능하며, tab 키를 사용하여 창 간에 전환할 수 있습니다. 특정 창에서는 화살표 키를 사용하여 텍스트를 스크롤하거나 목록 선택을 위아래로 이동할 수 있습니다. 프로그램이나 맵과 같은 목록에서는 Enter를 눌러 선택할 수 있습니다. 프로그램을 선택하면 해당 프로그램에 대한 정보가 다른 창에 표시됩니다. 맵을 선택하면 해당 맵의 항목을 보여주는 맵 항목 뷰로 전환됩니다.
ebpfmon에서 사용할 수 있는 몇 가지 키 바인딩이 있습니다. 이는 F1 키 또는 ? 키를 눌러 접근할 수 있는 도움말 페이지에 나열되어 있습니다.
어떤 뷰에 있든 프로그램 뷰에 접근하려면 Ctrl과 e를 누르면 됩니다.
어떤 뷰에 있든 bpf 기능 뷰에 접근하려면 Ctrl과 f를 누르면 됩니다.
맵 뷰에 접근하려면 현재 eBPF 프로그램의 맵(존재하는 경우)을 선택하기만 하면 됩니다. 그러면 맵 항목이 맵 뷰에 표시됩니다. d 키를 눌러 맵 항목을 삭제할 수 있습니다. 맵 뷰에서는 맵 항목 데이터를 다양한 방식으로 포맷할 수 있습니다. 포맷 섹션으로 이동하려면 맵 항목 목록 뷰에서 TAB을 누르면 됩니다. 그런 다음 TAB을 사용하여 다양한 포맷 옵션 간에 이동할 수 있습니다. 맵 항목 목록으로 돌아가려면 ESC를 누르세요.
또한 선택 항목에서 ENTER를 눌러 맵 항목을 편집할 수 있습니다. 편집 뷰에서는 맵 키/값의 원시 바이트 값을 편집할 수 있습니다. 대괄호는 무시해도 됩니다.
애플리케이션을 종료하려면 q 또는 Q를 누르면 됩니다.
일반적으로 ESC 키를 누르면 이전 뷰로 돌아갑니다. 또한 도움말 뷰나 오류 뷰에 있는 경우 escape를 누르면 이전 창으로 돌아갑니다.
-bpftoolbpftool 바이너리의 경로를 지정할 수 있습니다. 사용자 정의 bpftool 빌드를 사용하려는 경우 유용합니다. 기본적으로 시스템의 bpftool 바이너리를 사용합니다. 환경 변수를 사용할 수도 있습니다. 다음 순서로 확인합니다.
-bpftool 인수가 지정되었는지 확인합니다.BPFTOOL_PATH가 설정되었는지 확인합니다.-logfile이 인수는 로그를 남길 파일을 지정할 수 있습니다. 기본적으로 ./log.txt에 로그를 기록합니다. 런타임 중 발생한 오류를 기록하므로 애플리케이션 문제를 디버깅할 때 확인하기 좋은 파일입니다.
이 프로젝트에는 몇 가지 기본 테스트가 포함되어 있습니다.
테스트를 실행하려면 프로젝트 루트 디렉토리에서 다음 명령을 실행하세요.
$ go test ./...
자체 bpftool 바이너리를 사용하려면 BPFTOOL_PATH 환경 변수를 bpftool 바이너리 경로로 설정하면 됩니다. 그렇지 않으면 시스템 기본값을 사용합니다.