2008年5月8日 星期四

在 Windows XP 安裝 MRTG 即時流量監視分析工具

在 Windows XP 安裝 MRTG 即時流量監視分析工具
以下是我自己的架設筆記

1.下載MRTG: http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/
我的版本是 2.14.3,下載完後解壓縮到C:\mrtg


2.下載ActivePerl: http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl
我的版本是5.8.7.815,下載完後安裝到C:\Perl


3.確認系統變數中的Path變數中有C:\Perl\bin
"控制台"-->"系統"-->"進階"-->"環境變數"-->"系統變數"-->"Path"
EX: Path:C:\Perl\bin;%SystemRoot%\system32;%SystemRoot%;...
確認 snmp 服務是否已安裝啟動,
並且系統服務中,SNMP Service 內容的安全性頁籤裡有可接受的群體名稱,
通常是 public,但不一定是 public,
然後下方的"可從所有主機接受snmp封包"要勾起來,不然snmp可能會無效,
導致下一個步驟失敗。


4.在Command Shell中先將目錄切換到C:\mrtg\bin
接著輸入指令:

perl cfgmaker public@x.x.x.x --global "WorkDir: C:\usr\Apache2\htdocs\mrtg" --output mrtg.cfg

註1: 開啟Command Shell: "開始"-->"執行" : 輸入cmd
註2: x.x.x.x:電腦的IP
註3: C:\usr\Apache2\htdocs\mrtg: 流量分析結果存放的目錄(因為我的網站用Apache架的,根目錄在 htdocs,若是用IIS當WWW平台,通常會是c:\Inetpub\wwwroot\mrtg。然後注意,mrtg這個目錄要預先建立, cfgmaker 不會幫你建 XD)
註4:若是動態IP,建議用DNS名稱,以免重開機後IP改變,SNMP抓不到流量。例:

perl cfgmaker --global "WorkDir: C:\usr\Apache2\htdocs\mrtg" --ifref=descr --ifdesc=descr public@asklove.twbbs.org --output mrtg.cfg

需要超級注意的是,mrtg.cfg 組態檔用來分辨個介面的根據,預設是使用OID,
但每當介面關閉或啟動,OID都不一樣,
於是只要每次重開機後,mrtg.cfg 都必須重新產生一次或手動修改OID一次,超級不方便

於是我想到其他的方法,就是不要用OID當分辨介面的依據,而是使用網卡描述 Descr 位址
這個部份摸了很久,因為不論國內外,google 似乎找不到相關資料,官網的說明文件也寫得非常模糊
意思就是大部分人都直接用預設值,也許因為大家都用固定IP架站有關係
但因為越來越多人使用ADSL動態IP上網,自己架站
我想將來這部份的BUG將會逐一修正

底下就是如何使用網卡描述 Descr 當作分辨各界面依據的秘訣:
在製作 mrtg.cfg 組態檔時加入兩個參數:--ifref=descr --ifdesc=ip
--ifref=descr 是以網卡MAC為依據
--ifdesc=descr 則是讓 title 和 PageTop 維持原來 ip(大小寫敏感)
--ifdesc 原本有想過用IP、MAC來辨識,但考慮到大環境下也許會很難記憶
所以最後還是用 name 當作描述

因為我看過有人在路由器架設 VLan,然後各個網卡描述 Descr 訂為下游機關的名稱
這樣最後秀出來的標題 title 和 PageTop 就會很理想的變成機關名稱

除此之外,必須使用 --output mrtg.cfg 參數來輸出目的檔,不可用 > 符號來輸出
還有 public@asklove.twbbs.org 必須放在後面,放前面會造成失敗

其實原本考慮用IP來當依據,但發現OID和動態IP不適用 > < 這兩項依據都會造成組態檔需重新產生,以及 indexmaker 也需要重新執行一次 所以最後才改用變動性不大的網卡MAC位址 這是我失敗了很多次,測試了很多次得出來的結論 > < 8 =" 1280000" 8 =" 256000" 8 =" 32000">> Descr: 'WAN-(PPP/SLIP)-Interface' Name: '' Ip: '220.129.138.59' Eth: '00-53-45-00-00-00' ###
SetEnv[asklove.twbbs.org_WAN_(PPP_SLIP)_Interface]: MRTG_INT_IP="220.129.138.59" MRTG_INT_DESCR="WAN-(PPP/SLIP)-Interface"

改為

### Interface 131078 >> Descr: 'WAN-(PPP/SLIP)-Interface' Name: '' Ip: 'asklove.twbbs.org' Eth: '00-53-45-00-00-00' ###
SetEnv[asklove.twbbs.org_WAN_(PPP_SLIP)_Interface]: MRTG_INT_IP="asklove.twbbs.org" MRTG_INT_DESCR="WAN-(PPP/SLIP)-Interface"



6.在C:\mrtg\bin下執行以下這行指令三次:

perl mrtg mrtg.cfg
perl mrtg mrtg.cfg
perl mrtg mrtg.cfg

※執行時如果出現 Do not close this window,or mrtg will die
表示服務已經正常執行中,以後會一直維持在這裡,直到視窗被關閉。

※DOS窗口不能關,一關MRTG就停了
所以除了安裝後第一二次執行外,改用下面的7步驟
就不會有DOS視窗了

※第一、二次執行 mrtg mrtg.cfg 若產生 Rateup WARNING 訊息是正常的
那是因為 mrtg 執行時無舊的 log 檔可刪除所產生的訊息,第三次就不會了,
因此第一次安裝 MRTG 時,要先跑三遍 perl mrtg mrtg.cfg

最後在組態檔 mrtg.cfg 中加入背景服務:

#設為背景服務
RunAsDaemon: yes


7.將以下這幾行指令放到啟動資料夾裡:
taskkill /F /IM wperl.exe
del C:\mrtg\bin\mrtg.cfg_l
del C:\usr\Apache2\htdocs\mrtg\asklove.twbbs.org*.png
del C:\usr\Apache2\htdocs\mrtg\asklove.twbbs.org*.html
start /Dc:\mrtg\bin wperl mrtg --logging=eventlog mrtg.cfg
其實重點在於 mrtg.cfg_1 這個會被 wperl.exe 佔用的檔
舊的 wperl.exe 在重開機後會影響流量統計,也就是會一直停留在最後一個狀態
所以必須將它刪除,再讓它自動重新生成。


指令執行5分鐘之後,到D:\InetPub\wwwroot\MRTG之下就可以看到產生的流量分析結果(png圖檔,log檔與htm檔)
每次重開機時都要,所以最好把它放到啟動資料夾中
讓它開機時能自動執行MRTG流量分析
VMware 虛擬網卡 8
VMware 虛擬網卡 1 RTL 8139 內部網卡 WAN(PPP/SLIP) 寬頻連線

這裡發現了一個中文化的BUG,也就是月份的中文單位不見了
我們找出原始程式碼後將它補上,共三個檔案要改,
------------------------------------------------------------

C:\mrtg\lib\mrtg2\locales_mrtg.pm(第653行):
return "$foo[3] 年 $month{$foo[2]} $foo[1] 日 $wday{$foo[0]} $foo[4]";
return "$foo[3] 年 $month{$foo[2]} 月 $foo[1] 日 $wday{$foo[0]} $foo[4]";

C:\mrtg\translate\big5.pmd(第120行):
return "$foo[3] 年 $month{$foo[2]} $foo[1] 日 $wday{$foo[0]} $foo[4]";
return "$foo[3] 年 $month{$foo[2]} 月 $foo[1] 日 $wday{$foo[0]} $foo[4]";

C:\mrtg\translate\locales_mrtg.pm(第653行):
return "$foo[3] 年 $month{$foo[2]} $foo[1] 日 $wday{$foo[0]} $foo[4]";
return "$foo[3] 年 $month{$foo[2]} 月 $foo[1] 日 $wday{$foo[0]} $foo[4]";

------------------------------------------------------------

改完後不需重新用 cfgmaker 編譯 mrtg.cfg

VMware 虛擬網卡 8
VMware 虛擬網卡 1
RTL 8139 內部網卡
WAN(PPP/SLIP) 寬頻連線


千萬不能將指令用群組原則程式加入啟動程序
因為這個指令是一個無窮迴圈,在背景不斷的監控 snmp 流量
它一但完成開機前執行,不但連 snmp 服務都尚未啟動
也會造成無法進入 windows 及啟動其他服務的窘境

這時候只好到安全模式去把它拿掉了
安裝的經驗教你們,笨蛋我做就好QQ


8.如果主機上有超過一個網路介面,那麼每個介面都會各自產生流量圖檔
為了將他們整合起來,可以使用下面的指令(執行一次即可)

perl indexmaker mrtg.cfg > C:\usr\Apache2\htdocs\mrtg\index.html
或加上自訂參數
perl indexmaker mrtg.cfg --addhead--headeradd="" --columns=2 --width=475 --bodyopt=bgcolor="#66CC33" --enumerate --title="我的 MRTG 流量統計索引表" > C:\usr\Apache2\htdocs\mrtg\index.html


這裡有個參數 --sectionhost 可以加上主機 DNS 的名稱
但我們有另一個選擇
就是編輯 mrtg.cfg 檔每個介面的 Title 和 PageTop 選項參數,可以自訂介面名稱

這樣就會在 http://localhost/mrtg 下面建立一個 index.html 的整合圖
一張網頁就可以看到所有介面流量了,若想美化或排版,可直接用 Dreamweaver 編輯它。




9.最後就是做一個MRTG模組,將流量統計加入論壇或布洛格程式
這可以參考HappyLinux網站: http://happylinux.homeip.net/modules/wordpress/index.php?p=41
或是小紅帽技術論壇: http://redhat.ecenter.idv.tw/bbs/showthread.php?s=c8a692aa07ae28e9ba3363d404b34a9c&threadid=48030

註:在Linux下架設MRTG可以參考:
http://redhat.ecenter.idv.tw/bbs/showthread.php?threadid=43276&highlight=MRTG


■設定定時執行
crontab -u root -e
*/5 * * * * /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg
說明 : 預設置少每五分鐘抓取流量統計,若要破除規定,可修改 C:\mrtg\lib\mrtg2\MRTG_lib.pm
將第 733 和 736 行的 5 改為 1 或其他更小的數字即可

■設定符號連結(Linux下使用)
ln -s /var/www/html/mrtg/router_IP_1.html index.html
說明 : 因為 mrtg 會同時產生很多個流量分析(視網路介面而定),
這個指令可以將其中某個介面設為預設的流量分析統計圖

■觀看流量
http://you're_server/mrtg/
http://localhost/mrtg

■來源引用
http://www.wretch.cc/blog/asklove/6416269

沒有留言: