我正在尝试编写一个小脚本来收集 Linux 系统上的网络统计信息。我有办法做到这一点吗?
我想要的是当前网络吞吐量的实时统计数据。我读了一些书,发现这/proc/net/dev
很有用,我可以解析其中的内容来计算出当前的网络速度。这是一种可行/可靠的方法吗?像 iptraf 和 iftop 这样的包如何计算加速和减速?
答案1
是的,/proc/net/dev
这是执行此操作的正常方法。/sys/class/net/eth0/statistics
如果您觉得更容易,也可以使用其中的文件。
或者,更多实用程序包含一个ifdata
可以为您获取此信息的脚本。例如,要打印 ( -sib
) 和输出 ( -sob
) 中的字节数,您可以这样做:
$ ifdata -sib -sob eth0
48115944587
71982675360
输出的顺序与标志的顺序相同,即 48… 输入和 71… 输出。
它还会为您计算最后一秒的位数/秒(sleep 1
基本上通过执行 a ):
$ ifdata -bips -bops eth0
1148
1755
答案2
你熟悉吗sar
?
您可以尝试sar -n ALL
获取所有可能的网络统计信息,或者如果您想要每个网络设备每秒的 rx 和 tx 统计信息 - 请尝试以下操作:
sar -n DEV 1
对于 eth0 的 5 秒平均 rx 和 tx(例如),请执行以下操作:
sar -n DEV 1 5 | grep -i eth0 | tail -n1 | awk '{print $5, $6}'
答案3
过去,我使用 的输出ifconfig
来收集吞吐量统计数据并将其写入石墨。每个接口都有一个 RX 和 TX 计数器,用于计算吞吐量的字节数。您只需要编写一个脚本,定期轮询 ifconfig 并将当前值和先前值之间的差异写入屏幕或文件。
eth0 Link encap:Ethernet HWaddr 00:0c:29:cf:12:d3
inet addr:10.100.3.26 Bcast:10.100.3.31 Mask:255.255.255.248
inet6 addr: fe80::20c:29ff:fecf:12d3/64 Scope:Link
inet6 addr: 2001:xxx:7927:3::26/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:160523475 errors:0 dropped:921 overruns:0 frame:0
TX packets:106097000 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2912933876 (2.7 GiB) TX bytes:3734512667 (3.4 GiB)
eth1 Link encap:Ethernet HWaddr 00:0c:29:cf:12:dd
inet addr:10.100.0.1 Bcast:10.100.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecf:12dd/64 Scope:Link
inet6 addr: 2001:xxx:7927::1/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:92858590 errors:0 dropped:0 overruns:0 frame:0
TX packets:142257564 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1849495529 (1.7 GiB) TX bytes:389856127 (371.7 MiB)
eth2 Link encap:Ethernet HWaddr 00:0c:29:cf:12:e7
inet addr:10.100.4.1 Bcast:10.100.4.255 Mask:255.255.255.0
inet6 addr: 2001:xxx:7927:4::1/64 Scope:Global
inet6 addr: fe80::20c:29ff:fecf:12e7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10951337 errors:0 dropped:0 overruns:0 frame:0
TX packets:16448597 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1437098401 (1.3 GiB) TX bytes:1634328371 (1.5 GiB)
脚本位于https://gist.github.com/MerijntjeTak/1cddb08d191045e66a9c,也许你可以从中得到一些启发。