【发布时间】:2009-07-13 14:12:37
【问题描述】:
我正在寻找一种以编程方式(无论是调用库还是独立程序)监控 Linux 中实时 IP 流量的方法。我不想要总数,我想要正在使用的当前带宽。我正在寻找与 OS X 的 istat 菜单的网络流量监视器类似(但非图形)的工具。
我相当确定存在这样的东西,但我不确定该去哪里寻找,我宁愿不必重新发明轮子。
是否像监控套接字一样简单?还是我需要一个可以为我处理大量开销的实用程序?
【问题讨论】:
我正在寻找一种以编程方式(无论是调用库还是独立程序)监控 Linux 中实时 IP 流量的方法。我不想要总数,我想要正在使用的当前带宽。我正在寻找与 OS X 的 istat 菜单的网络流量监视器类似(但非图形)的工具。
我相当确定存在这样的东西,但我不确定该去哪里寻找,我宁愿不必重新发明轮子。
是否像监控套接字一样简单?还是我需要一个可以为我处理大量开销的实用程序?
【问题讨论】:
我们在 /proc/net/dev 中有字节和数据包计数器,所以:
import time
last={}
def diff(col): return counters[col] - last[iface][col]
while True:
print "\n%10s: %10s %10s %10s %10s"%("interface","bytes recv","bytes sent", "pkts recv", "pkts sent")
for line in open('/proc/net/dev').readlines()[2:]:
iface, counters = line.split(':')
counters = map(int,counters.split())
if iface in last:
print "%10s: %10d %10d %10d %10d"%(iface,diff(0), diff(8), diff(1), diff(9))
last[iface] = counters
time.sleep(1)
【讨论】:
/sys/class/net/$dev/statistics 中有更详细的每设备统计信息
我使用了一个名为dstat 的小程序,它将许多类似“stat”的函数组合成一个快速输出。非常可定制。它将为您提供当前的网络吞吐量以及更多。
在 linux 中,netstat 程序将为您提供原始网络统计信息。您可以自己解析这些统计信息以产生有意义的输出(这就是 dstat 所做的)。
【讨论】:
您可以使用以下dstat 命令获取网络吞吐量和数据包计数:
dstat -n --net-packets -f 10
或者如果你想监控特定的接口,你可以这样做:
dstat -n --net-packets -N eth0,wlan0 10
如果您更喜欢更传统的bits per second 输出:
dstat -n --net-packets -N eth0,wlan0 --bits 10
这将为您提供 10 秒的平均值。如果您希望将其写出来以进行后处理,可以使用以下命令导出到 CSV 文件:
dstat -n --net-packets -N eth0,wlan0 --bits 10
Dstat 附带了许多插件来将这些指标与系统中的其他指标相关联,如果您需要自定义数据或监控特定于您的环境的某些内容,它使您可以灵活地添加自己的 (python) 插件。
【讨论】: