使用 awk 和 grep 获取 iftop 结果

使用 awk 和 grep 获取 iftop 结果

我想使用 iftop 监控我的服务器网络发送和接收速率。这对我有用:

iftop -t -s 1 -n -N | grep 'Total send and receive rate: ' | awk '{print $8}'

结果中包含 Mac 地址和 Ips,如下所示:

interface: eth0
IP address is: 192.254.78.90
MAC address is: 00:26:9e:b5:81:de
14.7Mb

我只需要最后一行。所以我创建了一个脚本:

iftop -t -s 1 -n -N >> result.txt
cat result.txt | grep 'Total send and receive rate: ' | awk '{print $8}'

当我在命令行中使用它时,它工作正常,只给我最后一行“14.7Mb”,而将它用作 .sh 脚本仍然包含 MAC 地址和 Ip。

知道如何解决吗?我认为使用 sed 应该有更好的解决方案吗?

答案1

  1. 接口名称和 MAC 地址被打印到 stderr,因此它们不会通过管道传输到 grep。您可以通过将 stderr 重定向到 /dev/null 来摆脱它
iftop -t -s 1 -n -N 2>/dev/null
  1. 您正在使用 awk,因此也不需要 grep。
iftop -t -s 1 -n -N 2>/dev/null | awk '/send and receive/ {print $8}'

答案2

如果只调用一次,iftop 会监听最后 40 秒的流量,如果调用时不带选项,则会监听已结束的时间段。运行时进行的轮询并不能反映服务器在一段时间内的真实使用情况。

使用 iftop 嗅探流量也会给系统带来负担,根据流量的大小,这种负担可能或多或少重要,因为网络数据必须馈送到 pcap API 并由 pcap API 进行处理。

虽然它是调试网络问题的一个很好的工具,特别是要注意特定的传输流,但它并不是一个适合长期使用的好工具。

对于流量或带宽,我建议在更专业的环境中使用 SNMP,或者为了更简单的使用 ifconfig。

我想详细说明更多,但是我发现之前的一篇文章比我想象的更详细地讨论了监控流量和速度。

如何处理 ifconfig 输出以确定我的链接速度?

最后一个细节,如果你理解的话,没有什么反对 iftop 的

1) 只是测量每次运行脚本时的即时速度(每 5 分钟?)

2)不宜用于高负载系统

相关内容