通过iptraf-ng日志分析网卡当前的网络带宽

我想写一个软件,根据当前网络状况调整资源的分配,如果网络满载就停掉或者挂起一些占用网络较多的服务。但是怎么能知道当前网络是否满载呢?我百思不得其解,最后想到一个笨办法:

1 让iptraf把监控结果记录到日志文件中

2 读日志得到数据

iptraf是一个网络监控工具,它可以监视网卡流量,可以查看各种网络统计数据,包括TCP信息、UDP统计和其它一些信息。

具体的参数如下:

/usr/sbin/iptraf-ng -i eth0 -B -L /var/log/iptraf-ng/detail.log

这样就可以把eth0网卡的每个连接情况都记录到日志文件中,格式是这样的(节选部分日志):

Sat Feb 27 13:12:04 2021; TCP; eth0; 48 bytes; from 10.0.0.17:443 to 40.77.167.73:63360; first packet (SYN)
Sat Feb 27 13:12:04 2021; TCP; eth0; 52 bytes; from 203.208.60.15:57514 to 10.0.0.17:443; FIN sent; 12 packets, 1833 bytes, avg flow rate     14.66 kbps
Sat Feb 27 13:12:04 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.15:57514; FIN acknowleged
Sat Feb 27 13:12:04 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.15:57514; FIN sent; 10 packets, 6981 bytes, avg flow rate     55.85 kbps
Sat Feb 27 13:12:04 2021; TCP; eth0; 52 bytes; from 203.208.60.15:57514 to 10.0.0.17:443; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 203.208.60.64:59956 to 10.0.0.17:443; FIN sent; 13 packets, 2049 bytes, avg flow rate      8.19 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.64:59956; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.64:59956; FIN sent; 14 packets, 12051 bytes, avg flow rate     48.20 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 203.208.60.104:60240 to 10.0.0.17:443; FIN sent; 11 packets, 1787 bytes, avg flow rate      7.14 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.104:60240; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.104:60240; FIN sent; 9 packets, 6411 bytes, avg flow rate     25.64 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 203.208.60.64:59956 to 10.0.0.17:443; FIN acknowleged
Sat Feb 27 13:12:05 2021; ICMP; eth0; 28 bytes; from 169.254.128.12 to 10.0.0.17; echo req
Sat Feb 27 13:12:05 2021; ICMP; eth0; 28 bytes; from 10.0.0.17 to 169.254.128.12; echo rply
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 203.208.60.104:60240 to 10.0.0.17:443; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 203.208.60.115:51922 to 10.0.0.17:443; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 10.0.0.17:443 to 203.208.60.115:51922; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 203.208.60.45:35932 to 10.0.0.17:443; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 10.0.0.17:443 to 203.208.60.45:35932; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 203.208.60.29:37400 to 10.0.0.17:443; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 10.0.0.17:443 to 203.208.60.29:37400; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 203.208.60.23:38114 to 10.0.0.17:443; FIN sent; 12 packets, 1836 bytes, avg flow rate     14.69 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.23:38114; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 10.0.0.17:443 to 203.208.60.23:38114; FIN sent; 9 packets, 5736 bytes, avg flow rate     45.89 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 203.208.60.23:38114 to 10.0.0.17:443; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 203.208.60.110:55284 to 10.0.0.17:443; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 10.0.0.17:443 to 203.208.60.110:55284; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 60 bytes; from 10.0.0.17:43778 to 169.254.0.4:80; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 52 bytes; from 169.254.0.4:80 to 10.0.0.17:43778; first packet (SYN)
Sat Feb 27 13:12:05 2021; TCP; eth0; 40 bytes; from 169.254.0.4:80 to 10.0.0.17:43778; FIN sent; 5 packets, 428 bytes, avg flow rate      3.42 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 40 bytes; from 10.0.0.17:43778 to 169.254.0.4:80; FIN acknowleged
Sat Feb 27 13:12:05 2021; TCP; eth0; 40 bytes; from 10.0.0.17:43778 to 169.254.0.4:80; FIN sent; 6 packets, 639 bytes, avg flow rate      5.11 kbps
Sat Feb 27 13:12:05 2021; TCP; eth0; 40 bytes; from 169.254.0.4:80 to 10.0.0.17:43778; FIN acknowleged
Sat Feb 27 13:12:05 2021; UDP; eth0; 76 bytes; from 10.0.0.17:41050 to 169.254.0.2:123
Sat Feb 27 13:12:05 2021; UDP; eth0; 76 bytes; from 169.254.0.2:123 to 10.0.0.17:41050

通过分析日志,计算出当前的网络带宽使用情况,然后做相应的处理。这个办法非常低效,但我也想不出更好的办法了。如果iptraf直接有一个参数可以得到当前带宽就完美了。

扫码关注我的公众号