如何在没有 ifconfig 的情况下获取 TX/RX 字节?

如何在没有 ifconfig 的情况下获取 TX/RX 字节?

由于ifconfig在主要的 Linux 发行版中显然已被弃用,我想我会了解一些ip应该用来代替的工具ifconfig

这里我遇到了一个问题:单独运行时,ifconfig除了其他信息外,还显示每个接口上接收/传输的字节数。我找不到从中获取这些信息的方法ip。这个工具中没有这样的功能吗?我可以使用哪些其他内置工具来获取这些统计数据?

答案1

另一个选项是使用 /proc 文件系统。/proc/net/dev文件包含有关已配置网络接口的统计信息。每行专用于一个网络接口,其中包含接收和传输的统计信息。统计信息包括接收/传输的字节总数、数据包、丢失、错误等指标。

cat /proc/net/dev

    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

    lo:    29846937   129576     0    0    0     0          0       0 29846937   129576     0    0    0     0       0          0
 wlan0:    9467393340 8027251    0    0    0     0          0       0 2559312961 5896509    0    0    0     0       0          0

或者您可以尝试网络状态该命令可以显示所有网络接口和相关统计信息:

netstat -i

Iface   MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
lo         65536   0   130435      0      0      0   130435      0      0      0 LRU
wlan0       1492   0  8028018      0      0      0  5897361      0      0      0 BMRU

答案2

ip命令是 iproute2 包的一部分,是新工具。link子命令用于管理设备/接口。

如果你可以使用以下方式获取接口的统计信息ip -s link

root:~# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    50679705   529967   0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    50679705   529967   0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1d:7d:aa:e3:4e brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    187663757  308710386 0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4051284587 532435117 0       0       0       0

答案3

您可以通过 proc 获取所有必要的信息

# cat /sys/class/net/eth0/statistics/rx_bytes
# cat /sys/class/net/eth0/statistics/rx_packets

# cat /sys/class/net/eth0/statistics/tx_packets
# cat /sys/class/net/eth0/statistics/tx_bytes

您还可以使用 iptables 并解析输出。

对于接收到的数据包

# iptables -L INPUT -n -v

对于已传输的数据包

# iptables -L OUTPUT -n -v 

如果服务器是网关,那么您还应该解析向前

答案4

您也可以使用 ethtool:

ethtool -S eth0

ethtool 的好处是您可以看到每个 rx / tx 队列以及它们是如何平衡的。

我发现watch使用所有这些工具来更新屏幕是一个很好的工具。但是,这些工具中的大多数都以每秒字节或数据包的形式显示流量。我发现很难将字节转换为千兆或将 pps 转换为每秒数百万个数据包。只是一个提示,看看 Cloudflare 的mmwatch工具。它的功能与 watch 相同,但会自动进行计算并像 watch 一样将输出显示到屏幕上。(示例:因此您将看到1.2m/s每秒 120 万个数据包)

https://github.com/cloudflare/cloudflare-blog/blob/master/2017-06-29-ssdp/mmwatch

此外,还ethtool -S eth0给出了大量的输出,我使用以下方式显示接收队列和丢弃,同时使用 mmwatch:

mmwatch "ethtool -S eth0 | grep 'rx-\|discard'"

相关内容