Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

xxddpac/go-flow

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 A Lightweight and High-Performance Network Traffic Analyzer built with Go


项目简介

go-flow 是一款轻量级、高性能的网络流量分析工具,基于 Go 语言开发,结合高效的数据处理和低资源占用,适用于边缘计算节点到高吞吐数据中心的多种场景。


核心功能

  • 滑动窗口分析:实时统计指定时间窗口内的 IP、端口和协议流量,支持 Top-N 排序,便于快速定位流量热点。
  • 异常检测与告警:自动检测大流量、高频请求等异常行为,提供灵活的告警配置。
  • Kafka 数据流输出:支持将分析结果异步推送至 Kafka,无缝集成 ELK Stack、Grafana 等可视化平台。

安装与使用

下载 release 包

前往 Releases 下载最新版本压缩文件。

编辑配置文件

Eth = "eth0" # 监听的网卡名

启动服务

chmod +x go-flow
./go-flow -c config.toml

WEB访问

http://server_ip:31415

ScreenShot

Ui


源码编译

git clone https://github.com/xxddpac/go-flow.git
cd go-flow
make build

部署与性能常见问题

Q: 对主机资源占用情况如何?

A: go-flow 使用了如下优化设计以降低资源占用:

  • 高效数据结构:采用堆排序和滑动窗口机制,高效完成流量聚合。

  • 协程池管理:动态调度 Goroutine,避免资源泄漏。

  • 内存缓存:减少重复计算,提升处理效率。

Q: 能支持多大的网络流量?性能如何?

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

Q:为什么选择 AF_PACKET 而非 eBPF?

A: 相较于 eBPFgo-flow 选择使用 AF_PACKET 的原因主要有以下几点:

  • 开发效率:AF_PACKETLinux 原生抓包接口,配合 TPACKETv3 实现零拷贝,无需开发复杂的 eBPF 程序,调试更高效。
  • 广泛兼容性:支持大多数 Linux 系统,无需特定内核版本或额外模块,部署简单可靠。

Q: 为什么最新版只提供了 Linux 版本?

A: go-flow 使用的核心采集机制是 AF_PACKET,这是 Linux 内核特有的高性能网络捕获机制,不支持 Windows 平台。 如需在 Windows 上体验功能,可下载 v1.2.1 版本中的 go_flow_windows.zip,该版本基于 libpcap 构建。

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.