在ChinaUnix上看見一篇關於網絡流量監控器(Multi Router Traffic Grapher)mrtg全攻略,照着做了遍沒想到居然成功了,這不是我主要的工作。也不知道下一次正需要使用它是什麼時候了,所以把它寫下來以後就不用到處去找了。
需要的軟件:
Gd 圖形處理庫
<?xml:namespace prefix = st1 ns = "Tencent" />Libpng png處理庫
Perl mrtg有部分腳本用了perl
Zlib 不知道是什麼,這幾天安裝軟件都說要這個
Apache 用來發布檢測結果
Gcc c++編譯器,如果用rpm安裝就不需要。
Net-snmp 網絡管理協議代理。
以前一直以爲mrtg是一個類似嗅探器一樣工作在網絡中,採用抓包的方式分析每一個結點的流量。而且是實時分析,看到需要net-snmp的時候,一下明白了根本不像想象的那樣。Mrtg只是一個snmp的客戶端而已(我只瞭解一點snmp),通過snmp從各個設備的snmp代理上取得數據,然後以圖形的方式生成報表。真正的流量統計分析,是由各個結點設置完成。每隔一段時間後mrtg從設置中取一次數據,然後再更新報告。仔細想一想這樣的工作方式也可以啊,實現簡單,而且擴展性強,只要設置支持snmp管理就行,而且不會因爲網絡臨聽影響到網絡通信質量。明白了mrtg的工作原理後,安裝起來也不至於是一頭霧水,只是照着別人說的那樣做,出了錯自己也不能解決。Mrtg安裝主要需要熟悉snmp的一些知識,至少必要概念需要知道,apache也需要了解,至少要知道虛擬目錄是怎麼回事。前面兩樣配置好了,mrtg就簡單多了(我是隻是簡單應用)。
下面以監視本機的網絡流量爲例進行安裝:(RedHat9.0)
1. 安裝net-snmp,在RedHat光盤中有rpm安裝包。
a) 安裝完以後,修改配置文件/etc/snmp/snmpd.conf
把下面的#符號去掉:
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
把下面的語句:
access notConfigGroup "" any noauth exact systemview none none
改成:
access notConfigGroup "" any noauth exact mib2 none none
完成以後,就可啓動snmpd服務了。
#/sbin/service snmpd start
2. 安裝mrtg,下載網站: http://mrtg.matrix.com.br/
a) 可以直接下載rpm包,下載的時候注意一下前面依賴的軟件版本。我下載的mrtg-<?xml:namespace prefix = st2 ns = "urn:schemas-microsoft-com:office:smarttags" />2.10.5-1.i386.rpm,結果是gd和libpng的版本都太低了,還得去找相應的升級包。
b) 可以下載tar.gz下來編譯,我開始下了一個但是沒有編譯通過,主要是我以前都是直接通過rpm安裝的依賴的包,所有有些頭文件沒有找到。編譯沒有什麼複雜的主要就是要準備正確的頭文件。如果有時間在網上找就行了。
c) 配置mrtg,
i. #cfgmaker --output=/etc/mrtg/mrtg.cfg [email protected]
ii. 爲設備202.115.29.94生成一個配置文件名爲:/etc/mrtg/mrtg.cfg,後面取分析數據的時候就按照/etc/mrtg/mrtg.cfg來取。這裏面配置了些什麼暫時也沒有看懂,好像和snmp相關。
1. 修改上面生成的配置文件。
#vi /etc/mrtg/mrtg.cfg
WorkDir: /var/www/html/mrtg #apache的一個目錄,將這兒生成html格式的報告文件。按自己的實際情況修改
Options[_]: growright, bits #還不清楚是什麼
Language:big5 #一看就知道是什麼了,但是不知道有什麼有,以後慢慢學習。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
d) 運行mrtg
i. #mrtg /etc/mrtg/mrtg.cfg
按照配置文件中的信息從設置中取數據。但是這是一次性的,取後更新報告的圖片。這也我想象中也不一樣,以爲運行一性就在後臺自動的讀取數據了。
運行的時候出了一點錯如下:
-----------------------------------------------------------------------
ERROR: Mrtg will most likely not work propperly when the environment
variable LANG is set to UTF-8. Please run mrtg in an environment
where this is not the case:
env LANG=C /usr/bin/mrtg ...
-----------------------------------------------------------------------
這可能與Language:big5設置有關,因爲我沒有找到Language,所以也就沒有修改。我是修改了環境變量:
#export LANG=C
運行:
#mrtg /etc/mrtg/mrtg.cfg
前面兩次都出現了錯誤信息,好像主要是因爲snmp沒有初始化之類,運行第三次後就正常了。
運行成功後就可以在前面設置的WorkDir那個目錄下面,生成了html格式的文件和一些png的圖片。一看就明白是怎麼回事了,也說明了前面在分析工作原理時是正確的。
e) 生成報告的主頁。
i. indexmaker mrtg.cfg --output=/var/www/html/mrtg/index.html
f) 將mrtg添加到cron中,定期運行就可以一直監視設備的網絡流量了。
# crontab -e
*/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg
g) 監視多個設備。
#. Chgmaker <config.cfg> <snmp>
#crontab -e
#indexmaker <config.cfg> >><index.html>
最後:對於Linux的學習一直都是斷斷續續的,有空的時候又學一點,沒有留筆記過後就忘記了,用的時候又得重新學習。因爲一直徘徊在J2EE和linux之間,這兩者對來真是痛苦的選擇。最近有空弄了一段時間的Linux終於從一個初學者長成菜鳥了,雖然很菜,但是總算是有翅膀了。
由於公司一直在做網絡數據傳輸,今天早上突然奇想,打算寫一個基於Http協議的JDBC,通過Http訪問遠程的數據庫。說起來也很簡單就是使用一個Proxy將JDBC操作序列化後封裝到Http中去,基本上是用了板橋里人的通用EJB遠程調用框架的思想。這樣一來又要把Linux放一段時間了。