我们在linux/unix下最常用的工具莫过于ifconfig了。ifconfig的输出中有两项,分别是:

  • RX= =receive,接收,从开启到现在接收封包的情况,是下行流量。
  • TX= =Transmit,发送,从开启到现在发送封包的情况,是上行流量。
1[root@test etc]# ifconfig eth1
2eth1      Link encap:Ethernet  HWaddr 00:26:B9:58:19:88
3          inet addr:192.168.0.46  Bcast:192.168.0.255  Mask:255.255.255.0
4          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
5          RX packets:6049782538 errors:0 dropped:2373 overruns:0 frame:0
6          TX packets:7415059121 errors:0 dropped:0 overruns:0 carrier:0
7          collisions:0 txqueuelen:1000
8          RX bytes:2611876455455 (2.3 TiB)  TX bytes:6028598337794 (5.4 TiB)
9          Interrupt:114 Memory:d8000000-d8012800

RX和TX输出的值使有的单位参数是bytes,而利用该命令,我们也可以配置脚本进行流量检测。大名鼎鼎的nagios就有一个插件check_traffic,通过ifconfig的输出的RX、TX值通过之间的差,再除去中间间隔的时间算出流量大小的。该插件的下载页为:https://github.com/cloved/check_traffic/downloads

现摘录其中部分关于度量值转换的部分如下:

 1#to K
 2uIn=`echo "$ctbpsIn / 1024" | bc`
 3uOut=`echo "$ctbpsOut / 1024" | bc`
 4#to M
 5if [ "$isM" = "True" ]; then
 6    uIn=`echo "scale=$Scale; $uIn / 1024" | bc`
 7    uOut=`echo "scale=$Scale; $uOut / 1024" | bc`
 8fi
 9#to B
10if [ "$isB" = "True" ]; then
11    uIn=`echo "scale=$Scale; $uIn / 8" | bc`
12    uOut=`echo "scale=$Scale; $uOut / 8" | bc`

即所得的结果如果想要转换成Kb需要除以1024,转换成Mb要在kbit的基础上再除以1024,而后面所跟的单位如果是B,就是KB或MB,需要要再除以8。所以我们在nagios监控中对于参数的设置也要根据实际情况进行变动。

1command[check_traffic]=/App/nagios/libexec/check_traffic -i eth1 -w 90000 -c 120000

如我的nrpe.cfg中的关于该项的配置如上面所示。前两天实然流量告警,去查看该配置时,竟然忘了所使用的计量单位是什么,只好又去脚本里去查看。想想蛮搞笑的。关于ifconfig另外一些基础的东西可以去百度百科或man手册上去找。