
고성능 eBPF 기반 네트워크 트래픽 분석기 (Rust로 작성됨).
ayaFlow는 Aya로 구축된 Rust + eBPF 네트워크 트래픽 분석기입니다. 각 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-inspectmacOS를 사용하는 경우, 전체 eBPF 워크플로를 위해 Docker 또는 Linux VM을 사용하세요. 두 경로에 대한 자세한 내용은 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/ 크레이트와 cargo xtask 명령을 사용하세요.
호스트 안전 워크플로는 현재 이 macOS 개발 머신에서 다음을 통과했습니다:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask check-hostLinux 전용 런타임 검증은 eBPF 툴체인이 설치된 Linux 호스트 또는 CI 실행기에서 수행해야 합니다.
이 프로젝트는 구성 요소에 따라 세 가지 다른 라이선스를 사용합니다:
사용자 공간 에이전트 및 공통 라이브러리(ayaflow 및 ayaflow-common)는 다음 중 하나에 따라 이중 라이선스됩니다:
선택 사항입니다.
eBPF 커널 구성 요소(ayaflow-ebpf)는 Linux 커널 검증기와의 호환성을 위해 엄격하게 GNU General Public License v2.0 (GPL)에 따라 라이선스됩니다.
| 플래그 | 설명 | 기본값 |
|---|
-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 텍스트 형식 |