MRTG - Http Ping 流量圖表化

1、前言

在開始玩本次實作以前請先確定您的 SNMP 及 MRTG 已安裝並正確定設定,本次實作為利用 MRTG 機制,了解目前 Web Server 的 Http Ping Response Time 情況。




文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 http_ping 套件
          步驟2.將 http_ping 統計結果寫入指定檔案
          步驟3.產生檔案
          步驟4.寫入排程



2、實作環境

  • FreeBSD 6.1-RELEASE
  • net-snmp-5.2.3_3
  • mrtg-2.14.5,1
  • http_ping-20050629
  • perl, v5.8.8



3、安裝及設定

步驟1.安裝 http_ping 套件

http_ping 與一般 ping 的差異性在哪? http_ping 固名思義在於送出的是 HTTP Request (也就是計算擷取 HTTP 網頁所耗費的 Total、Connect、Response、Data 時間),而不像傳統的 Ping 是送出 ICMP Echo Requests,依如下步驟安裝 http_ping 套件吧。
cd /usr/ports/net/http_ping   //切換至安裝路徑
make install clean             //安裝套件並清除暫存檔案


http_ping 指令語法如下:
/usr/local/bin/http_ping --help
 usage:  /usr/local/bin/http_ping [-count n] [-interval n] [-quiet] [-proxy host:port] url
 [-count n]:         指定抓取 n 次後停止 (預設為持續的抓取直到使用者中斷為止)
 [-interval n]:      指定每次抓取的間隔時間 n 秒 (預設為5秒)
 [-quiet]:           指定在程式執行後只顯示統計結果
 [-proxy host:port]: 指定使用的 Proxy 及 Port




步驟2.將 http_ping 統計結果寫入指定檔案

此次實作為利用 http_ping 統計至 www.tfn.net.tw 的時間 (在 TFN ADSL 線路上)。
  • http_ping.tfn:將 http_ping 統計結果寫入 tfn.a 內。
  • tfn-get:取得 tfn.a 內的 Response 欄位值。
  • tfn.a 及 tfn.b:http_ping 統計暫存檔。
  • tfn-avg:取得 tfn.b 內 Response 欄位值的平均值與最大值。
  • tfn.cfg:MRTG 設定檔。
  • tfn-start:將 http_ping 統計值給 MRTG 設定檔處理成圖形化。

http_ping.tfn (http_ping 統計結果)

將 http_ping 統計結果寫入 tfn.a 內 (有 Total、Connect、Response、Data 等欄位,每個欄位又有最小值、平均值、最大值),抓取五次每次間隔二秒並只顯示統計結果,內容如下:
 #!/bin/sh
 /usr/local/bin/http_ping -c 5 -i 2 -q http://www.tfn.net.tw > tfn.a
 /usr/home/weithenn/tfn-get > tfn.b

tfn-get (Response Time)

取得 tfn.a 內的 Response 欄位值後寫入 tfn.b 內,內容如下:
 #!/usr/bin/perl
 $ping_str=`cat tfn.a`;             //印出 tfn.a 內容
 $val=(split(' ',$ping_str))[30];   //分割 tfn.a 內容以空格來分割,取第 30 欄位值
 print "$val\n";                    //印出 $var 值並空行

tfn.a 及 tfn.b (http_ping 統計暫存檔)

http_ping 統計暫存檔 (tfn.a 及 tfn.b),其中 tfn.a 內容有 Total、Connect、Response、Data 等欄位,每個欄位又有最小值、平均值、最大值。
 --- http://www.tfn.net.tw http_ping statistics ---
 5 fetches started, 5 completed (100%), 0 failures (0%), 0 timeouts (0%)
 total         min/avg/max = 206.008/235.175/259.843 ms
 connect    min/avg/max = 97.603/117.629/153.51 ms
 response  min/avg/max = 106.046/117.286/132.036 ms
 data         min/avg/max = 0.223/0.2598/0.32 ms

tfn.b 內容為取得 tfn.a 內 Response 欄位值。
 106.046/117.286/132.036

tfn-avg (Response Time 的平均值與最大值)

取得 tfn.b 內 Response 欄位值的平均值與最大值,內容如下:
 #!/usr/bin/perl
 $ping_str=`cat tfn.b`;
 $val=(split('/',$ping_str))[1];
 $val2=(split('/',$ping_str))[2];
 $val=int($val);
 $val2=int($val2);
 print "$val\n";
 print "$val2\n";
 print "0\n";
 print "0\n";

tfn.cfg (MRTG 設定檔)

MRTG 設定檔,內容如下:
 Target[Http_Ping_TFN]: `/usr/home/weithenn/tfn-avg`        //抓取 Response 欄位值
 MaxBytes[Http_Ping_TFN]: 3000                              //流量圖表的最大值
 Title[Http_Ping_TFN]: Http_Ping_TFN Time 連線品質 MRTG 圖    //網頁的 title
 PageTop[Http_Ping_TFN]: Http_Ping_TFN Time 連線品質 MRTG 圖 < TaiTung ADSL 對 TFN>  //流量網頁內的標題
 Options[Http_Ping_TFN]: gauge,growright
 YLegend[Http_Ping_TFN]: Http_Ping_TFN Time                 //流量圖的 Y 軸顯示名稱
 ShortLegend[Http_Ping_TFN]: ms
 LegendI[Http_Ping_TFN]:  平均回應時間
 LegendO[Http_Ping_TFN]:  最大回應時間
 WorkDir: /usr/home/web                                     //存放產生圖檔的路徑
 Language:big5                                              //使用語系

tfn-start (統計值給 MRTG 設定檔處理成圖形化)

將 http_ping 統計值給 MRTG 設定檔處理成圖形化,內容如下:
 /usr/home/weithenn/http_ping.tfn                //http_ping 開始統計
 /usr/local/bin/mrtg /usr/local/etc/mrtg/tfn.cfg //MRTG 分析 http_ping 統計結果
 rm -rf /usr/home/weithenn/tfn.*                 //刪除 http_ping 暫存檔




步驟3.產生檔案

產生檔案,下列指令執行 2 ~ 3 次到沒錯誤訊息後就代表完成了。
/usr/home/weithenn/tfn-start      



步驟4.寫入排程

將如下指令寫入排程內以便達成自動產生流量圖表 (每五分鐘執行一次)。
crontab -e
 */5 * * * *   /usr/home/weithenn/tfn-start     //每五分鐘執行一次