如何分析某服务器上哪个进程的流量多 ? 猜不少人都有类似的需求, 社区里已经有 c 写的 nethogs 工具, 该工具很方便的获取流量较高的 TOP N 进程列表。
既然有 nethogs 工具,为什么还需要用 goalng 来实现一遍 ?主要是 nethogs 不够灵活,没有开放接口供其他程序调用。对的,我们现在就需要这类接口。当然,不是每个公司都有这类需求,大家通常都是当流量异常时,登上去分析下异常流量。
代码
项目名为 go-netflow
, 代码已经提交到 github。
地址为 https://github.com/rfyiamcool/go-netflow,有兴趣的可以看看,记得点 star 哈。
从设计到流量测试完毕,用了差不多 两天半
的时间。go-netflow 的接口方面还算完善,最少满足了我们容器云团队及 sre 的需求。但他的 cli 终端部分很是简陋,有兴趣的同学可以帮忙提交 pr。
实现
像 promethues, openfalcon 这类开源监控软件,通过 /proc/net/snmp
和 /proc/net/netstat
获取连接和流量信息。
/proc/net/snmp
文件只是提供了主机各层的IP、ICMP、ICMPMsg、TCP、UDP详细数据/proc/net/n