Netto est un outil de surveillance réseau basé sur eBPF pour Linux qui mesure le coût CPU de la pile réseau Linux.
NET_RX_SOFTIRQ
dans les fonctions réseau de base par profilage basé sur la trace de pile du noyauBPF_MAP_TYPE_TASK_STORAGE
) Construire Netto en tant qu'application autonome est généralement déconseillé ; les utilisateurs doivent plutôt utiliser le Dockerfile
fourni pour créer une image de conteneur qui simplifiera le déploiement et la gestion de l'outil.
Construisez Netto dans une image de conteneur (ici étiquetée "netto") avec :
docker build -t netto https://github.com/miolad/netto.git#perf-event-mmapable-array
Veuillez noter que l'image résultante nécessitera la capacité CAP_BPF
CAP_SYS_ADMIN
, ce qui, dans la plupart des configurations, signifie que le conteneur doit être exécuté en mode --privileged
.
Si vous préférez toujours créer l'outil de manière autonome, vous aurez besoin de :
Compilez et exécutez avec :
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
Par défaut, Netto expose les résultats en temps réel sous la forme d'une page Web alimentée par Wasm accessible sur http://address:port
. Cette interface est idéale pour consommer le contenu au fur et à mesure de sa production, mais ne fournit pas de prise en charge prête à l'emploi pour stocker les métriques extraites pour un accès différé. Lorsque la surveillance en temps réel de l'hôte n'est pas la principale préoccupation et pour mieux s'intégrer aux piles de collecte de métriques existantes (comme dans les environnements de centres de données), il est recommandé de remplacer l'interface Web personnalisée intégrée par un exportateur basé sur Prometheus. avec l'option de ligne de commande -P
(ou --prometheus
).
Dans la plupart des cas, la méthode recommandée pour exécuter Netto implique une commande similaire à :
docker run --name netto --privileged --restart unless-stopped -d -p 8080:8080 netto -P
Ou avec l'entrée de configuration docker compose
équivalente :
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
...
Avec l'option -P
sélectionnée, Netto peut être ciblé par le grattoir Prometheus et référencé directement dans Grafana. Un exemple de tableau de bord qui présente les principales métriques collectées par Netto est disponible sous le nom grafana_dashboard.json
(qui suppose que la variable « host » est utilisée pour différencier les différents hôtes surveillés via l'étiquette « job » de Prometheus, à configurer dans les paramètres de Prometheus) .
Dossier | Contenu |
---|---|
images | Images utilisées sur ce README |
netto | Caisse binaire principale Rust |
netto/src/bpf | Programmes BPF-C |
metrics-common | Caisse de bibliothèque Bridge Rust pour l'interface main et web-frontend |
web-frontend | Interface WebAssembly de Rust |
www | Fichiers statiques pour l'interface Web |
xtask | Caisse binaire utilitaire pour gérer la coordination entre les autres caisses |