
Интерфейс терминала для мониторинга и проверки eBPF-программ и карт в реальном времени с помощью bpftool, обеспечивающий живую отладку и анализ данных наблюдения на уровне ядра.
ebpfmon — это инструмент для мониторинга программ eBPF. Он предназначен для использования с bpftool из ядра Linux. ebpfmon — это TUI (терминальный интерфейс) приложение, написанное на Go, которое позволяет осуществлять мониторинг 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 требует прав root, поэтому ebpfmon будет выполнять sudo bpftool ....
Это означает, что, скорее всего, будет запрошен ваш sudo-пароль.
Прежде всего, этот инструмент написан на 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 должно вернуть вас в предыдущее окно.
-bpftoolПозволяет указать путь к бинарнику bpftool. Это полезно, если у вас есть собственная сборка bpftool, которую вы хотите использовать. По умолчанию используется системный бинарник bpftool. Также можно использовать переменную окружения. Поиск происходит в следующем порядке:
-bpftool в командной строке.BPFTOOL_PATH.-logfileЭтот аргумент позволяет указать файл для ведения журнала. По умолчанию логирование ведётся в ./log.txt. Это отличный файл для проверки при попытке отладки проблем приложения, так как в него записываются ошибки, возникшие во время выполнения.
В проекте есть несколько базовых тестов.
Чтобы запустить тесты, выполните следующую команду из корневой директории проекта:
$ go test ./...
Если вы хотите использовать свой бинарник bpftool, можно установить переменную окружения BPFTOOL_PATH в путь к вашему бинарнику. Если этого не сделать, будет использоваться системный.