
Ein leistungsstarker, eBPF-basierter Netzwerkverkehrsanalysator, geschrieben in Rust.
ayaFlow ist ein Netzwerkverkehrsanalysator in Rust + eBPF, erstellt mit Aya. Es führt einen Agenten pro Linux-Knoten aus, bindet einen TC-Klassifikator am Eingang und Ausgang und stellt Live-Verkehrsdaten, historische, SQLite-gestützte Verläufe und Prometheus-Metriken zur Verfügung.
Die Paketerfassungslaufzeit von ayaFlow ist nur unter Linux verfügbar. Die Arbeitsabläufe für Mitwirkende sind bewusst aufgeteilt:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask build-usercargo xtask check-hostcargo xtask build-ebpfcargo xtask buildcargo xtask run -- --deep-inspectWenn Sie auf macOS sind, verwenden Sie Docker oder eine Linux-VM für den vollständigen eBPF-Workflow. Siehe HOW_TO_USE_LOCAL.md für beide Pfade.
cargo xtask check-host
cargo xtask build
sudo ./target/debug/ayaflow --db-path /tmp/traffic.db
Wenn --interface weggelassen wird, erkennt ayaFlow die Standard-Routenschnittstelle aus /proc/net/route automatisch und fällt nur dann auf eth0 zurück, wenn die Erkennung fehlschlägt.
curl http://localhost:3000/api/health
curl http://localhost:3000/api/stats
curl "http://localhost:3000/api/history?limit=5&row_type=raw"
curl http://localhost:3000/metrics
| Flag | Beschreibung | Standard |
|---|---|---|
-i, --interface | Zu überwachende Schnittstelle. Weglassen, um die Standard-Routenschnittstelle unter Linux automatisch zu erkennen. | automatische Erkennung, Fallback eth0 |
-p, --port | API-Server-Port | 3000 |
--db-path | SQLite-Datenbankpfad | traffic.db |
--connection-timeout | Bereinigung veralteter Verbindungen in Sekunden | 60 |
--data-retention | Automatisches Löschen von Verlauf älter als N Sekunden | deaktiviert |
--aggregation-window | Speichern aggregierter Verlaufsfenster anstelle von rohen Paketzeilen | 0 (Rohmodus) |
--allowed-ips | CIDRs, die auf die API zugreifen dürfen | uneingeschränkt |
-c, --config | YAML-Konfigurationsdateipfad | keine |
-q, --quiet | Nicht-Fehler-Logs unterdrücken | false |
--deep-inspect | DNS-Abfrage- und TLS-SNI-Extraktion aktivieren | false |
--enable-ipv6 | IPv6-Paketerfassung aktivieren | false |
--resolve-dns | Reverse-DNS-Abfragen aktivieren | false |
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/api/health | GET | Gesundheitsstatus, Paketzähler und aktive Laufzeitkonfiguration |
/api/stats | GET | Betriebszeit, Durchsatz, Zählungen und aktive Laufzeitkonfiguration |
/api/live | GET | Top 50 aktive Verbindungen nach Paketanzahl |
/api/history | GET | Filterbarer historischer Verkehr mit Paginierungsmetadaten |
/api/stream | WS | Live-Statistiken jede Sekunde |
/metrics | GET | Prometheus-Textformat |
/api/history unterstützt:
limit, offsetstart_time, end_timeprotocolip, src_ip, dst_ipport, src_port, dst_portdirectiondomainrow_type=raw|aggregatedBeispiel:
curl "http://localhost:3000/api/history?limit=20&protocol=TCP&dst_port=443&row_type=raw"
ayaflow/ Benutzerraum-Laufzeit, API, Speicher und host-sichere Tests
ayaflow-common/ Gemeinsame Paket-/Ereignistypen, die von Benutzerraum und eBPF verwendet werden
ayaflow-ebpf/ TC-Klassifikator und Nutzlast-Erfassungsprogramm
xtask/ Build- und Workflow-Helfer
k8s/ Kubernetes-Manifeste
monitoring/ Prometheus- und Grafana-Assets
Der doppelte src/-Baum auf Stammebene ist veraltet und nicht Teil des unterstützten Build-Pfads. Verwenden Sie die ayaflow/-Crate und die oben genannten cargo xtask-Befehle.
Der host-sichere Workflow besteht nun auf diesem macOS-Entwicklungsrechner mit:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask check-hostDie Nur-Linux-Laufzeitvalidierung muss noch auf einem Linux-Host oder CI-Runner mit installierter eBPF-Toolchain durchgeführt werden.
Dieses Projekt verwendet je nach Komponente drei verschiedene Lizenzen:
Der Benutzerraum-Agent und die gemeinsamen Bibliotheken (ayaflow und ayaflow-common) sind unter einer der folgenden Lizenzen dual-lizenziert:
nach Ihrer Wahl.
Die eBPF-Kernel-Komponenten (ayaflow-ebpf) sind streng unter der GNU General Public License v2.0 (GPL) lizenziert, um die Kompatibilität mit dem Linux-Kernel-Verifier zu gewährleisten.