🚀 A Lightweight and High-Performance Network Traffic Analyzer built with Go
go-flow 是一款轻量级、高性能的网络流量分析工具,基于 Go 语言开发,结合高效的数据处理和低资源占用,适用于边缘计算节点到高吞吐数据中心的多种场景。
- 滑动窗口分析:实时统计指定时间窗口内的 IP、端口和协议流量,支持 Top-N 排序,便于快速定位流量热点。
 - 异常检测与告警:自动检测大流量、高频请求等异常行为,提供灵活的告警配置。
 - Kafka 数据流输出:支持将分析结果异步推送至 Kafka,无缝集成 ELK Stack、Grafana 等可视化平台。
 
前往 Releases 下载最新版本压缩文件。
Eth = "eth0" # 监听的网卡名chmod +x go-flow
./go-flow -c config.toml
http://server_ip:31415
git clone https://github.com/xxddpac/go-flow.git
cd go-flow
make build
A: go-flow 使用了如下优化设计以降低资源占用:
- 
高效数据结构:采用堆排序和滑动窗口机制,高效完成流量聚合。
 - 
协程池管理:动态调度 Goroutine,避免资源泄漏。
 - 
内存缓存:减少重复计算,提升处理效率。
 
A: go-flow 使用 Linux 原生的 AF_PACKET 零拷贝技术,在内核态完成数据捕获和复制,数据通过共享内存直达用户态:
- 性能上限:理论支持网卡带宽的最大吞吐量。
 - 高可靠性:内核态零拷贝确保数据捕获无丢失。
 
在实测网络环境中(4Gbps 带宽、约2万终端),go-flow 运行稳定,未发现丢包。
⚠️ 注意 虽然内核采集是零拷贝高性能的,但在用户态中程序仍需处理流量聚合、滑动窗口维护、堆排序等操作,尤其是在超高并发流量下,如果用户空间处理速度跟不上,仍有概率导致丢包。可通过以下方式优化:
- 增加协程池容量(
 config.toml中的Workers参数)- 调整生产者通道缓冲区(
 config.toml中的PacketChan参数)- 延迟缓存更新频率(
 config.toml中的Interval参数)- 使用 pprof 分析热点函数,默认监听端口
 31414,访问http://server_ip:31414/debug/pprof/查看性能分析数据
另外通过日志可观察丢包情况,默认日志路径/var/log/go_flow.log
A: 相较于 eBPF,go-flow 选择使用 AF_PACKET 的原因主要有以下几点:
- 开发效率:
AF_PACKET是Linux原生抓包接口,配合TPACKETv3实现零拷贝,无需开发复杂的eBPF程序,调试更高效。 - 广泛兼容性:支持大多数 
Linux系统,无需特定内核版本或额外模块,部署简单可靠。 
A: go-flow 使用的核心采集机制是 AF_PACKET,这是 Linux 内核特有的高性能网络捕获机制,不支持 Windows 平台。
如需在 Windows 上体验功能,可下载 v1.2.1 版本中的 go_flow_windows.zip,该版本基于 libpcap 构建。
