ayaFlow 是一个基于 Rust + eBPF 的网络流量分析工具,构建于 Aya 之上。它在每个 Linux 节点上运行一个代理,在入口和出口附加 TC 分类器,并暴露实时流量数据、基于 SQLite 的历史记录以及 Prometheus 指标。
/metrics 端点。ayaFlow 的数据包捕获运行时仅限 Linux。贡献者工作流出于目的被拆分:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask build-usercargo xtask check-hostcargo xtask build-ebpfcargo xtask buildcargo xtask run -- --deep-inspect如果你使用的是 macOS,请使用 Docker 或 Linux VM 进行完整的 eBPF 工作流程。参见 HOW_TO_USE_LOCAL.md 了解两种路径。
cargo xtask check-host
cargo xtask build
sudo ./target/debug/ayaflow --db-path /tmp/traffic.db
如果省略了 --interface,ayaFlow 会从 /proc/net/route 自动检测默认路由接口,只有在检测失败时才回退到 eth0。
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
/api/history 支持:
limit, offsetstart_time, end_timeprotocolip, src_ip, dst_ipport, src_port, dst_portdirectiondomainrow_type=raw|aggregated示例:
curl "http://localhost:3000/api/history?limit=20&protocol=TCP&dst_port=443&row_type=raw"
ayaflow/ 用户态运行时、API、存储和主机安全检查
ayaflow-common/ 用户态和 eBPF 共享的数据包/事件类型
ayaflow-ebpf/ TC 分类器和负载捕获程序
xtask/ 构建和工作流辅助工具
k8s/ Kubernetes 清单
monitoring/ Prometheus 和 Grafana 资源
根目录下的重复 src/ 树是遗留内容,不属于支持的构建路径。请使用上面的 ayaflow/ crate 和 cargo xtask 命令。
主机安全检查工作流现在可以在本 macOS 开发机上通过以下命令顺利运行:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask check-host仅限 Linux 的运行时验证仍需在安装了 eBPF 工具链的 Linux 主机或 CI 运行器上进行。
本项目根据组件采用三种不同的许可证:
用户态代理和公共库(ayaflow 和 ayaflow-common)根据以下任一许可证进行双许可证授权:
你可以自行选择。
eBPF 内核组件(ayaflow-ebpf)严格根据 GNU General Public License v2.0(GPL)授权,以确保与 Linux 内核验证器的兼容性。
| 标志 | 描述 | 默认值 |
|---|
-i, --interface | 要监控的接口。省略时自动检测 Linux 上的默认路由接口。 | 自动检测,回退 eth0 |
-p, --port | API 服务器端口 | 3000 |
--db-path | SQLite 数据库路径 | traffic.db |
--connection-timeout | 清理过期连接的秒数 | 60 |
--data-retention | 自动删除超过 N 秒的历史记录 | 禁用 |
--aggregation-window | 存储聚合的历史窗口,而非原始数据包行 | 0(原始模式) |
--allowed-ips | 允许访问 API 的 CIDR 地址 | 无限制 |
-c, --config | YAML 配置文件路径 | 无 |
-q, --quiet | 抑制非错误日志 | false |
--deep-inspect | 启用 DNS 查询 + TLS SNI 提取 | false |
--enable-ipv6 | 启用 IPv6 数据包捕获 | false |
--resolve-dns | 启用反向 DNS 查找 | false |
| 端点 | 方法 | 描述 |
|---|
/api/health | GET | 健康状态、数据包计数和活动运行时配置 |
/api/stats | GET | 运行时间、吞吐量、计数和活动运行时配置 |
/api/live | GET | 按数据包计数排序的前 50 个活动连接 |
/api/history | GET | 可过滤的历史流量,包含分页元数据 |
/api/stream | WS | 每秒实时统计 |
/metrics | GET | Prometheus 文本格式 |