标签:
原创作品,允许转载,转载时请务必以超链接形式标明文章 、作者信息和本声明。否则将追究法律责任。
网络流量的监控工具有很多,如:Mrtg、Cacti、Zabbix等等,他们都有着各自的特点,不同的侧重,只为适合不同的应用场景的各种特殊需求。除了网络流量监控工具以外,还有Nagios这样的监控主机状态的工具,不仅能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。还能在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知等功能。除此之外Nagios简单地插件设计使得用户可以方便地扩展自己服务的检测方法。也正是这一点,让Nagios几乎无所不能。我们也经常利用这个特性,使用Shell编写各类插件配合Ngios的使用。 Nagios虽然强大,但无法像Cacti那样图形化监控网络流量。因此Nagios+Cacti通过NPC整合在一起,强强联手成为了一种经常被使用的组合。关于这方面的知识,我会在后续的博客中有所描述,此处暂略过。只为图形化流量使用情况就要在学习Cacti的同时,还要将Nagios与Cacti进行整合,成本未免太高。有没有一种方式可以自定义网络流量监控并以图形化的方式显示出来呢?本文就是利用Shell配合绘图工具GnuPlot将网络流量图形化的展示出来,大家可以将他嵌入到Nagios或者干脆单独使用。 首先我们需要获得网络流量。运行ifconfig命令 eth0 Link encap:Ethernet HWaddr 00:0C:29:58:A5:D5 inet addr:192.168.0.15 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe58:a5d5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:496 (496.0 b) TX bytes:2452 (2.3 KiB) Interrupt:193 Base address:0x2000 其中 RX Bytes、TX Bytes:为总传送、接收的字节总量(红色标注部分)。我们将其取出并相加。命令如下: ifconfig | awk -F ":" 'NR==8{print $2+$3}' (本例获得结果为2948,单位为byte) 我们将以分钟为单位取得该值并与之前取得值的总和相减得到每分钟的网卡流量并导入到文本文件中。文件的格式如下: 06:01:00 2948 06:02:00 1948 06:03:00 2948 06:04:00 3948 06:05:00 1948 06:06:00 3948 ........ echo -n `date +%H:%M:%S` " " >> result;echo $[`ifconfig | awk -F ":" 'NR==8{print $2+$3}'`-`awk '{sum+=$2}END{print sum}' result `] >>result echo -n `date +%H:%M:%S` " " >> 1; #以小时:分钟:秒为格式获取当前系统时间并输出重定向到result文件中,-n选项为不输出换行符。 awk '{sum+=$2}END{print sum}' result #为获得result文件中第二列所有值的和 echo $[`ifconfig | awk -F ":" 'NR==8{print $2+$3}'`-`awk '{sum+=$2}END{print sum}' result `]>>result #将当前网卡流量减去之前统计的网 卡流量总和得到这一分钟内网卡的流量并将其输出重定向到result文件中。 #! /bin/bash while true;do echo -n `date +%H:%M:%S` " " >> result;echo $[`ifconfig | awk -F ":" 'NR==8{print $2+$3}'`-`awk '{sum+=$2}END{print sum}' result `]>>result sleep 60 done reslut文件内容如下: 06:31:01 2948 06:32:01 1948 06:33:01 2948 06:34:01 3948 06:35:01 1948 06:36:01 3948 06:37:01 2680 06:38:01 3127 06:39:01 4162 06:40:01 5137 06:41:01 1348 06:42:01 1872 06:43:01 2882 06:44:01 1972 06:45:01 5689 06:46:01 1952 06:47:01 2371 06:48:01 3333 06:49:01 4523 06:50:01 1346 06:51:01 7864 06:52:01 3256 06:53:01 5742 06:54:01 1234 06:55:01 4328 06:56:01 2651 06:57:01 1463 06:58:01 2813 06:59:01 1111 07:00:01 2134 07:01:01 1687 07:02:01 3383 07:03:01 2345 现在我们就可以通过GnuPlot进行绘图。 set terminal png small color picsize 600 400 #以png格式,坐标字体为小字体,大小为600*400输出绘图 set output "eth0.png" #输出图片的名称为eth0.png set xdata time #设定X坐标的类型为时间类型 set timefmt "%H:%M:%S" #设定时间类型的格式 set grid #设定网格为输出图片背景 set style data linespoints #设定绘图使用点线方式 set xtic rotate by 90 #将X坐标以90旋转 plot "result" using 1:2 title "eth0" pointtype 3 linetype 2#以result文件的一列为X坐标绘制第二列的内容,图片右上角标示为eth0 将以上内容保存为文件eth0 cat eth0 | gnuplot #执行绘图 本例输出的图片如下: 完整shell脚本如下: #! /bin/bash while true;do echo -n `date +%H:%M:%S` " " >> result;echo $[`ifconfig | awk -F ":" 'NR==8{print $2+$3}'`-`awk '{sum+=$2}END{print sum}' result `]>>result cat eth0 | gnuplot #由于每次生成的图片会覆盖原来的图片,所以不用进行删除操作 sleep 60 done 生成好的图片可以放置在Apache中或者整合Nagios。 篇幅有限,未尽之处,还请见谅,希望大家批评指教,提出更好的建议。谢谢
本文出自 “” 博客,请务必保留此出处