Netto es una herramienta de monitoreo de red basada en eBPF para Linux que mide el costo de CPU de la pila de red de Linux.
NET_RX_SOFTIRQ
en las funciones básicas de red mediante perfiles del kernel basados en seguimiento de pilaBPF_MAP_TYPE_TASK_STORAGE
) En general, no se recomienda crear Netto como una aplicación independiente; en su lugar, los usuarios deben usar el Dockerfile
proporcionado para crear una imagen de contenedor que simplifique la implementación y administración de la herramienta.
Construya Netto en una imagen de contenedor (aquí etiquetada como "netto") con:
docker build -t netto https://github.com/miolad/netto.git#perf-event-mmapable-array
Tenga en cuenta que la imagen resultante necesitará la capacidad CAP_BPF
CAP_SYS_ADMIN
, lo que en la mayoría de las configuraciones significa que el contenedor debe ejecutarse en modo --privileged
.
Si aún prefiere crear la herramienta de forma independiente, necesitará:
Compile y ejecute con:
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
De forma predeterminada, Netto expone los resultados en tiempo real como una página web con tecnología Wasm accesible en http://address:port
. Esta interfaz es ideal para consumir el contenido a medida que se produce, pero no proporciona soporte listo para usar para almacenar las métricas extraídas para acceso retrasado. Cuando el monitoreo en tiempo real del host no es la principal preocupación, y para una mejor integración con las pilas de recopilación de métricas existentes (como en entornos de centros de datos), se recomienda reemplazar la interfaz web personalizada incorporada con un exportador basado en Prometheus. con la opción de línea de comando -P
(o --prometheus
).
En la mayoría de los casos, la forma recomendada de ejecutar Netto implica un comando similar a:
docker run --name netto --privileged --restart unless-stopped -d -p 8080:8080 netto -P
O con la entrada de configuración equivalente 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
...
Con la opción -P
seleccionada, el raspador Prometheus puede apuntar a Netto y hacer referencia a él directamente en Grafana. Un panel de ejemplo que muestra las principales métricas recopiladas por Netto está disponible como grafana_dashboard.json
(que supone que la variable "host" se usa para diferenciar entre diferentes hosts monitoreados a través de la etiqueta "trabajo" de Prometheus, que se configurará en la configuración de Prometheus) .
Carpeta | Contenido |
---|---|
images | Imágenes utilizadas en este README |
netto | Caja binaria principal de Rust |
netto/src/bpf | Programas BPF-C |
metrics-common | Caja de biblioteca Bridge Rust para interfaz main y web-frontend |
web-frontend | Interfaz Rust WebAssembly |
www | Archivos estáticos para la interfaz web. |
xtask | Caja binaria de utilidad para gestionar la coordinación entre las otras cajas. |