Netto — это инструмент мониторинга сети для Linux на основе eBPF, который измеряет стоимость процессора сетевого стека Linux.
NET_RX_SOFTIRQ
на основные сетевые функции с помощью профилирования ядра на основе трассировки стека.BPF_MAP_TYPE_TASK_STORAGE
). Создание Netto как отдельного приложения обычно не рекомендуется; вместо этого пользователям следует использовать предоставленный Dockerfile
для создания образа контейнера, который упростит развертывание инструмента и управление им.
Встройте Netto в образ контейнера (здесь с тегом «netto») с помощью:
docker build -t netto https://github.com/miolad/netto.git#perf-event-mmapable-array
Обратите внимание, что полученному образу потребуется возможность CAP_BPF
CAP_SYS_ADMIN
, что в большинстве настроек означает, что контейнер должен запускаться в режиме --privileged
.
Если вы по-прежнему предпочитаете создавать автономный инструмент, вам понадобится:
Скомпилируйте и запустите с помощью:
cargo xtask run [--release]
$ ./netto -h
eBPF-based network diagnosis tool for Linux
Usage: netto [OPTIONS]
Options:
-f, --frequency Perf-event's sampling frequency in Hz for the NET_RX_SOFTIRQ cost breakdown [default: 1000]
-a, --address Bind address for the web frontend [default: 0.0.0.0]
-p, --port Bind port for the web frontend [default: 8080]
--user-period User-space controller update period in ms [default: 500]
-l, --log-file Path to a log file to which measurements are to be saved. If logging is enabled by providing this argument, any other form of web interface will be disabled
-P, --prometheus Enable Prometheus logging in place of the web interface. The Prometheus-compatible endpoint will be available at `http://address:port`
-h, --help Print help
-V, --version Print version
По умолчанию Netto предоставляет результаты в реальном времени в виде веб-страницы на базе Wasm, доступной по адресу http://address:port
. Этот интерфейс идеально подходит для использования контента по мере его создания, но не обеспечивает готовой поддержки для хранения извлеченных показателей для отложенного доступа. Когда мониторинг хоста в режиме реального времени не является основной задачей и для лучшей интеграции с существующими стеками сбора метрик (например, в средах центров обработки данных), рекомендуется вместо этого заменить встроенный настраиваемый веб-интерфейс экспортером на основе Prometheus. с параметром командной строки -P
(или --prometheus
).
В большинстве случаев рекомендуемый способ запуска Netto включает команду, подобную:
docker run --name netto --privileged --restart unless-stopped -d -p 8080:8080 netto -P
Или с помощью эквивалентной записи конфигурации docker compose
:
services:
netto:
build: https://github.com/miolad/netto.git#perf-event-mmapable-array
image: netto
container_name: netto
privileged: true
command: -P
restart: unless-stopped
...
Если выбрана опция -P
, Netto может быть выбран скребком Prometheus и на него можно напрямую ссылаться в Grafana. Пример информационной панели, демонстрирующей основные показатели, собранные Netto, доступен как grafana_dashboard.json
(предполагается, что переменная «хост» используется для различения разных отслеживаемых хостов с помощью метки «задание» Prometheus, которая настраивается в настройках Prometheus). .
Папка | Содержание |
---|---|
images | Изображения, использованные в этом README |
netto | Основной бинарный ящик Rust |
netto/src/bpf | Программы БПФ-С |
metrics-common | Библиотека Bridge Rust для main и web-frontend |
web-frontend | Интерфейс Rust WebAssembly |
www | Статические файлы для веб-интерфейса |
xtask | Утилита двоичного ящика для управления координацией между другими ящиками |