Linux 上的网络统计

Linux 上的网络统计

我正在尝试编写一个小脚本来收集 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,也许你可以从中得到一些启发。

相关内容