
Un analyseur de trafic réseau haute performance basé sur eBPF et écrit en Rust.
ayaFlow est un analyseur de trafic réseau Rust + eBPF construit avec Aya. Il exécute un agent par nœud Linux, attache un classifieur TC à l'entrée et à la sortie, et expose les données de trafic en direct, l'historique basé sur SQLite et les métriques Prometheus.
/metrics.Le runtime de capture de paquets d'ayaFlow est uniquement Linux. Les flux de travail des contributeurs sont intentionnellement divisés :
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask build-usercargo xtask check-hostcargo xtask build-ebpfcargo xtask buildcargo xtask run -- --deep-inspectSi vous êtes sur macOS, utilisez Docker ou une VM Linux pour le flux de travail eBPF complet. Consultez HOW_TO_USE_LOCAL.md pour les deux chemins.
cargo xtask check-host
cargo xtask build
sudo ./target/debug/ayaflow --db-path /tmp/traffic.db
Si --interface est omis, ayaFlow détecte automatiquement l'interface de route par défaut depuis /proc/net/route et revient à eth0 uniquement si la détection échoue.
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
| Drapeau | Description | Valeur par défaut |
|---|---|---|
-i, --interface | Interface à surveiller. Omettre pour détecter automatiquement l'interface de route par défaut sur Linux. | détection automatique, repli eth0 |
-p, --port | Port du serveur API | 3000 |
--db-path | Chemin de la base de données SQLite | traffic.db |
--connection-timeout | Nettoyage des connexions périmées en secondes | 60 |
--data-retention | Supprimer automatiquement l'historique plus ancien que N secondes | désactivé |
--aggregation-window | Stocker des fenêtres d'historique agrégées au lieu de lignes de paquets brutes | 0 (mode brut) |
--allowed-ips | CIDRs autorisés à accéder à l'API | non restreint |
-c, --config | Chemin du fichier de configuration YAML | aucun |
-q, --quiet | Supprimer les logs non-erreur | false |
--deep-inspect | Activer l'extraction des requêtes DNS et TLS SNI | false |
--enable-ipv6 | Activer la capture de paquets IPv6 | false |
--resolve-dns | Activer les recherches DNS inverses | false |
| Point de terminaison | Méthode | Description |
|---|---|---|
/api/health | GET | État de santé, compteurs de paquets et configuration d'exécution active |
/api/stats | GET | Temps de fonctionnement, débit, compteurs et configuration d'exécution active |
/api/live | GET | Top 50 des connexions actives par nombre de paquets |
/api/history | GET | Trafic historique filtrable avec métadonnées de pagination |
/api/stream | WS | Statistiques en direct chaque seconde |
/metrics | GET | Format texte Prometheus |
/api/history prend en charge :
limit, offsetstart_time, end_timeprotocolip, src_ip, dst_ipport, src_port, dst_portdirectiondomainrow_type=raw|aggregatedExemple :
curl "http://localhost:3000/api/history?limit=20&protocol=TCP&dst_port=443&row_type=raw"
ayaflow/ Userspace runtime, API, storage, and host-safe tests
ayaflow-common/ Shared packet/event types used by userspace and eBPF
ayaflow-ebpf/ TC classifier and payload capture program
xtask/ Build and workflow helpers
k8s/ Kubernetes manifests
monitoring/ Prometheus and Grafana assets
L'arborescence src/ dupliquée à la racine est héritée et ne fait pas partie du chemin de construction pris en charge. Utilisez la crate ayaflow/ et les commandes cargo xtask ci-dessus.
Le flux de travail sécurisé pour l'hôte passe désormais sur cette machine de développement macOS avec :
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask check-hostLa validation d'exécution uniquement Linux doit encore avoir lieu sur un hôte Linux ou un runner CI avec la chaîne d'outils eBPF installée.
Ce projet utilise trois licences différentes selon le composant :
L'agent espace utilisateur et les bibliothèques communes (ayaflow et ayaflow-common) sont sous double licence :
à votre choix.
Les composants noyau eBPF (ayaflow-ebpf) sont strictement sous licence GNU General Public License v2.0 (GPL) pour garantir la compatibilité avec le vérificateur du noyau Linux.