歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

利用Shell配合繪圖工具GnuPlot圖形化監控網絡流量

網絡流量的監控工具有很多,如: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。 篇幅有限,未盡之處,還請見諒,希望大家批評指教,提出更好的建議。謝謝

本文出自 “林肯” 博客,請務必保留此出處http://president.blog.51cto.com/4990508/875090

Copyright © Linux教程網 All Rights Reserved