網路流量的監控工具有很多,如: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