如何以每秒字节数获取机器网络 IO?

How to get the machine network IO in bytes per second?

我正在尝试计算 "bytes per second" 中给定 EC2 机器 (linux os) 的网络使用情况。

起初我使用 TcpInsegsTcpOutsegsUdpInDatagramsUdpOutDatagrams,从 /proc/net/netstat//proc/net/snmp 中检索。但我很快意识到这些指标的单位是"count per second"。

我需要"bytes per second"因为我得到的网络容量信息就在这个单元里。有没有办法获取这些信息?

我知道 IpExtInOctetsIpExtOutOctets 这两个指标,但不知道它们是否适合我。而且我没有找到他们的文档。

任何人都知道如何以每秒字节数获取机器网络 IO?非常感谢!

在 SNMP 中,在接口 table 下,您可以获得每个接口的输入和输出(总数据包和总字节数),因此您不必添加单个接口来获得总数。

除此之外,所有计数器 TcpInSegsTcpOutSegs 等都由相同数量的计数器补充,但以字节为单位(它们后缀为 octets,相反,但意思相同。)你没有发现它们的问题是命名问题。在 SNMP 术语中,字节称为八位字节,TCP 数据包称为段,UDP 称为数据报,在以太网中它们称为数据包(不确定最后一点)。

该信息存储在文件 /proc/net/dev 的 linux 中,格式如下:

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
enp2s0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
wlp3s0:  164083     571    0    0    0     0          0         0    16635      98    0    0    0     0       0          0
    lo:     660      10    0    0    0     0          0         0      660      10    0    0    0     0       0          0
$ _

可能就够了。