
Un analizador de tráfico de red de alto rendimiento basado en eBPF, escrito en Rust.
ayaFlow es un analizador de tráfico de red escrito en Rust + eBPF, construido con Aya. Ejecuta un agente por nodo Linux, adjunta un clasificador TC en ingreso y egreso, y expone datos de tráfico en vivo, historial respaldado por SQLite y métricas de Prometheus.
/metrics de Prometheus.El entorno de ejecución de captura de paquetes de ayaFlow es solo para Linux. Los flujos de trabajo para colaboradores están divididos intencionalmente:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask build-usercargo xtask check-hostcargo xtask build-ebpfcargo xtask buildcargo xtask run -- --deep-inspectSi estás en macOS, usa Docker o una máquina virtual Linux para el flujo completo de eBPF. Consulta HOW_TO_USE_LOCAL.md para ambas rutas.
cargo xtask check-host
cargo xtask build
sudo ./target/debug/ayaflow --db-path /tmp/traffic.db
Si se omite --interface, ayaFlow detecta automáticamente la interfaz de ruta predeterminada desde /proc/net/route y recurre a eth0 solo si falla la detección.
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
| Banderas | Descripción | Predeterminado |
|---|---|---|
-i, --interface | Interfaz a monitorear. Omitir para detectar automáticamente la interfaz de ruta predeterminada en Linux. | detección automática, recurre a eth0 |
-p, --port | Puerto del servidor API | 3000 |
--db-path | Ruta de la base de datos SQLite | traffic.db |
--connection-timeout | Limpieza de conexiones inactivas en segundos | 60 |
--data-retention | Eliminación automática del historial más antiguo que N segundos | deshabilitado |
--aggregation-window | Almacenar ventanas de historial agregadas en lugar de filas de paquetes sin procesar | 0 (modo sin procesar) |
--allowed-ips | CIDR permitidos para acceder a la API | sin restricciones |
-c, --config | Ruta del archivo de configuración YAML | ninguno |
-q, --quiet | Suprimir registros que no sean de error | false |
--deep-inspect | Habilitar extracción de consultas DNS + SNI de TLS | false |
--enable-ipv6 | Habilitar captura de paquetes IPv6 | false |
--resolve-dns | Habilitar búsquedas DNS inversas | false |
| Endpoint | Método | Descripción |
|---|---|---|
/api/health | GET | Estado de salud, contadores de paquetes y configuración activa en tiempo de ejecución |
/api/stats | GET | Tiempo de actividad, rendimiento, recuentos y configuración activa en tiempo de ejecución |
/api/live | GET | Top 50 conexiones activas por recuento de paquetes |
/api/history | GET | Tráfico histórico filtrable con metadatos de paginación |
/api/stream | WS | Estadísticas en vivo cada segundo |
/metrics | GET | Formato de texto de Prometheus |
/api/history admite:
limit, offsetstart_time, end_timeprotocolip, src_ip, dst_ipport, src_port, dst_portdirectiondomainrow_type=raw|aggregatedEjemplo:
curl "http://localhost:3000/api/history?limit=20&protocol=TCP&dst_port=443&row_type=raw"
ayaflow/ Entorno de ejecución de espacio de usuario, API, almacenamiento y pruebas seguras para el host
ayaflow-common/ Tipos de paquetes/eventos compartidos usados por espacio de usuario y eBPF
ayaflow-ebpf/ Programa clasificador TC y de captura de carga útil
xtask/ Compilación y ayudantes de flujo de trabajo
k8s/ Manifiestos de Kubernetes
monitoring/ Recursos de Prometheus y Grafana
El árbol duplicado src/ en el nivel raíz es legado y no forma parte de la ruta de compilación compatible. Usa el crate ayaflow/ y los comandos cargo xtask anteriores.
El flujo de trabajo seguro para el host ahora funciona en esta máquina de desarrollo macOS con:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask check-hostLa validación del entorno de ejecución solo Linux aún debe realizarse en un host Linux o en un runner de CI con el toolchain de eBPF instalado.
Este proyecto utiliza tres licencias diferentes dependiendo del componente:
El agente de espacio de usuario y las bibliotecas comunes (ayaflow y ayaflow-common) tienen doble licencia bajo cualquiera de:
a tu elección.
Los componentes del kernel eBPF (ayaflow-ebpf) tienen licencia estrictamente bajo la Licencia Pública General de GNU v2.0 (GPL) para garantizar la compatibilidad con el verificador del kernel Linux.