Netto ist ein eBPF-basiertes Netzwerküberwachungstool für Linux, das die CPU-Kosten des Linux-Netzwerkstapels misst.
NET_RX_SOFTIRQ
Einstiegspunkts in die grundlegenden Netzwerkfunktionen durch Stack-Trace-basierte Profilierung des KernelsBPF_MAP_TYPE_TASK_STORAGE
) Vom Aufbau von Netto als eigenständige Anwendung wird generell abgeraten; Benutzer sollten stattdessen die bereitgestellte Dockerfile
verwenden, um ein Container-Image zu erstellen, das die Bereitstellung und Verwaltung des Tools vereinfacht.
Bauen Sie Netto in ein Container-Image (hier mit „netto“ getaggt) ein mit:
docker build -t netto https://github.com/miolad/netto.git#perf-event-mmapable-array
Bitte beachten Sie, dass das resultierende Image die Fähigkeit CAP_BPF
CAP_SYS_ADMIN
benötigt, was bei den meisten Setups bedeutet, dass der Container im --privileged
-Modus ausgeführt werden sollte.
Wenn Sie das Tool dennoch lieber eigenständig erstellen möchten, benötigen Sie:
Kompilieren und ausführen mit:
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
Standardmäßig stellt Netto die Echtzeitergebnisse als Wasm-basierte Webseite zur Verfügung, auf die über http://address:port
zugegriffen werden kann. Diese Schnittstelle eignet sich ideal zum Konsumieren des Inhalts während der Erstellung, bietet jedoch keine sofort einsatzbereite Unterstützung für das Speichern der extrahierten Metriken für einen verzögerten Zugriff. Wenn die Echtzeitüberwachung des Hosts nicht das Hauptanliegen ist und um eine bessere Integration in bestehende Metrik-Sammelstapel (z. B. in Rechenzentrumsumgebungen) zu erreichen, wird empfohlen, stattdessen das integrierte benutzerdefinierte Web-Frontend durch einen Prometheus-basierten Exporter zu ersetzen mit der Befehlszeilenoption -P
(oder --prometheus
).
In den meisten Fällen umfasst die empfohlene Methode zum Ausführen von Netto einen Befehl ähnlich dem folgenden:
docker run --name netto --privileged --restart unless-stopped -d -p 8080:8080 netto -P
Oder mit dem entsprechenden docker compose
Konfigurationseintrag:
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
...
Wenn die Option -P
ausgewählt ist, kann Netto vom Prometheus-Scraper angesprochen und direkt in Grafana referenziert werden. Ein Beispiel-Dashboard, das die wichtigsten von Netto gesammelten Metriken zeigt, ist als grafana_dashboard.json
verfügbar (wobei davon ausgegangen wird, dass die Variable „host“ zur Unterscheidung zwischen verschiedenen überwachten Hosts über die Prometheus-Beschriftung „Job“ verwendet wird, die in den Prometheus-Einstellungen konfiguriert werden muss). .
Ordner | Inhalt |
---|---|
images | In dieser README verwendete Bilder |
netto | Haupt-Rost-Binary-Kiste |
netto/src/bpf | BPF-C-Programme |
metrics-common | Bridge Rust-Bibliothekskiste für main und web-frontend |
web-frontend | Rust WebAssembly-Frontend |
www | Statische Dateien für das Web-Frontend |
xtask | Utility-Binary-Crate zur Verwaltung der Koordination zwischen den anderen Crates |