Board logo

標題: mrtg-網路流量監控器 [打印本頁]

作者: danny    時間: 2010-1-6 10:11     標題: mrtg-網路流量監控器

簡介
Mrtg(Multi Router Traffic Grapher,MRTG)是一個監控網路鏈路流量負載的工具軟體,它通過snmp協定從設備得到設備的流量資訊,並將流量負載以包含PNG格式的圖形的HTML文檔方式顯示給用戶,以非常直觀的形式顯示流量負載(可以在網站http://www.stat.ee.ethz.ch/mrtg/得到mrtg的輸出結果示例)。
關於mrtg的最詳細的資訊可以從http://people.ee.ethz.ch/~oetiker/webtools/mrtg得到。

mrtg具有以下特色:
可攜性:目前可以執行在大多數Unix系統和Windows NT之上。
源碼開放:Mrtg是用perl編寫的,源代碼完全開放。
高可攜性的SNMP支持:Mrtg採用了Simon Leinen編寫的具有高可攜性的SNMP實現模組,從而不依賴於作業系統的SNMP模組支援。
支持SNMPv2c:MRTG可以讀取SNMPv2c的64位的記數器,從而大大減少了記數器回轉次數。
可靠的介面標識:被監控的設備的介面可以以IP位址、設備描述、SNMP對介面的編號及Mac位址來標識。
常量大小的日誌檔:MRTG的日誌不會變大,因為這裏使用了獨特的資料合併演算法。
自動配置功能:MRTG自身有配置工具套件,使得配置過程非常簡單。
性能:時間敏感的部分使用C代碼編寫,因此具有很好的性能。
PNG格式圖形:圖形採用GD庫直接產生PNG格式。
可定制性:MRTG產生的web頁面是完全可以定制的。
mrtg的主頁是http://www.mrtg.org,可以從這裏下載軟體。
Mrtg相容性
mrtg軟體可以執行在以下的作業系統上:
Linux 1.2.x, 2.0.x, 2.2.x, 2.4.x (Intel and Alpha and Sparc and PowerPC)
Linux MIPS, Linux S/390
SunOS 4.1.3
Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
AIX 4.1.4, 4.2.0.0, 4.3.2
HPUX 9,10,11
WindowsNT 3.51, 4.0, 2k, XP
IRIX 5.3, 6.2
BSDI BSD/OS 2.1, 4.x, 3.1
NetBSD 1.5.x
FreeBSD 2.1.x, 2.2.x, 3.1, 3.4, 4.x
OpenBSD 2.x
Digital Unix 4.0
SCO Open Server 5.0
Reliant UNIX
NeXTStep 3.3
OpenStep 4.2
Mac OS X 10.1
And about and other sensible Unix
可以通過mrtg監控的設備(目前市場上絕大多數產品都支援SNMP協定,只要支援SNMP協定的設備就都可以使用MRTG來監控):
3Com NETBuilders, LANplex 6012 and 2500
3Com etherswitches and hubs
3Com Linkswitch 1000 1100 3300
3Com Superstack II switch 3900, 3300 MX
3Com 812 ADSL Router
Alantec powerhub 7000
Allied Telesyn - 8224XL and 8324XL 24 port managed switches
Annex terminal server
Asante Hub
Ascend (Lucent) Max 600, [24]00x, Pipeline 50, TNT, APX-8000, MAX-6000
Alcatel (Assured Access) x1600, OmniSR9, OmniCore 5022
AT&T Wave Point, Lan
BayNetworks (Wellfleet) 7.80 and up, BayStack 350T, Instant Internet, see Nortel
BreezeCom AP,SA
Cabletron ESX-820 Etherswitch, Smartswitch 2000,6000 and router
Centillion Token Ring SpeedSwtich 100 (IBM 8251 Token Ring Switch)
About every Cisco Kit there is ...
CentreCOM 8116
Compatible Systems
DECBridge 620, DEC 900EF, 900EE, Gigaswitch
ELSA Lancom L 11 (Wireless Router)
Enterasys Matrix E5, VH-4802 and VH-2402S Switche
Ericsson Tirgis Series RAS Servers
Extreme Networks -- Blackdiamond 6808 & Alpine 3808 Layer 3 Switches
Fore ASX200 ATM
FlowPoint 2200 ATM/DSL Router
Formula 8200 series
Foundry BigIron 8000 Gigabit, FastIron Switch, ServerIron Switch
Cable Modems from Lancity, Terayon and DOCSIS
HP - network interfaces, disks, database Informix
HP AdvanceStack/Procurve Switch 2000 and 2524, AdvanceStack Switch 200
HP Procurve Switches , model 4000m, 2424m and 2400m
IBM 8260 swtich (with 155MB ATM blades installed), IBM 2210 ISDN Routers.
Intel switches (details) -- 510T, Intel Gigabit Server adapter
IMV Victron NetPro 3000 UPS
Kentrox Pacesetter Pro
Lantronix Bridge
Lucent/Xedia Access PointT 450, 1000
Livingston (Lucent) IRX 3.2.1R, IRX 114, PM2E(R) PM3-2E OR-U
Motorola 6560 Regional Node, SB3100 CableModem, 320, 6430 and 6455 routers
Morningstar terminal servers/routers
MGE (Merlin Gerin) UPSes (details)
Network Appliance
Netopia R7100C SDSL
Netscreen 5 / 10 / 100
Nortel Networks, Bay Routers BCN, BLN, ASN, ARN, AN, Passport 1k and Passport 8k3 series L3 switches, BayStack 450 L2 switches.
Nortel Networks, Accelar L3 Switches
Nokia IP 330/440/650
Nbase ethernet switch
Novell 3.11, 4.11
Rmon probes
SGI-Server (Irix 5.3)
Any server server running HP-UX, Ultrix, Solaris, SunOS, OSF, NetBSD, FreeBSD, BSDi, Linux, AIX, OpenBSD, Irix or even Windows operating systems (badly), when using NET-SNMP (former UCD-SNMP).
Apple Mac (An snmp service is included on the OS CD >= 8.5 )
Shiva Accesport
Solaris Server
Squid Web cache
US-Robotics Total Control Modemracks
Wellfleet (later Bay Networks): see Nortel routers
WaveWireless SpeedLan 8x00 RF Routers
WinNT, MS Proxy
Xylan (today Alcatel) 4024C 24port 10/100 OmniStack Switch, 9k devices, including ATM links.
Yamaha rt100i
Zyxel Prestige P310, 153X, 642.
不支援mrtg的設備:
D-Link switches (details)


SNMP簡介
一個網路管理系統一般要包含以下幾個元素:若干個(可能很多個)需要被管理的網路設備節點,如路由器、伺服器等設備,每個節點上都執行著一個稱為設備代理(agent)的應用進程,其實現對被管理設備的各種被管理物件的資訊如流量等的搜集和對這些被管物件的訪問的支援;?至少一個管理工作站,該管理站執行著管理平臺應用系統,實現為管理員提供對被管設備的視覺化的圖形介面,從而使管理員可以方便的進行管理;一個管理協定,用來定義設備代理和管理工作站之間管理資訊傳送的規程。其中管理協議的操作是在管理框架下進行的,管理框架定義了和安全相關的認證,授權,訪問控制和加密策略等各種安全防護框架。
在執行TCP/IP協定的互聯網環境中,管理協定標準是簡單網路管理協定(Simple Network Management Protocol,SNMP),其定義了傳送管理資訊的協定消息格式及管理站和設備代理相互之間進行消息傳送的規程。

出於業界對網路管理協定標準化的迫切要求的驅動,IETF於1990發佈了SNMPv1的正式RFC文檔;其設計思想重點放在保證協議的簡單性、靈活性和可擴展性上,並希望把SNMP作為一個過渡性的網管協議來作為實現對互連的網路設備進行管理時遵循的標準,待OSI的網路管理協定-CMIP的開發、實現和標準化成熟和完善到可以在業界推廣之後,再用CMIP來替換SNMP。但是由於各種的原因,CMIP並沒有替代SNMP,而SNMP發展為業界的標準。

SNMP一共發展有3個主版本,分別為SNMPv1 ,SNMPv2和SNMPv3。其中SNMPv2又分為若干個子版本,其中SNMPv2c應用最為廣泛:
SNMPv1: 是第一個正式協議版本,在RFC1155-RFC1158中定義,該版本採用了基於共同體名的安全機制;
SNMPv2c: 這個版本被稱為基於共同體名的SNMPv2,使用基於共同體名的安全機制和SNMPv2p做出的協議操作方面的擴充,由RFC1901-RFC1906定義;
SNMPv3: 該協定版本採用基於用戶的安全機制,其安全機制是在SNMPv2u和SNMPv2*基礎上進行大量的評議以後進行了更新,並且對協定機的邏輯功能模組的進行了劃分而保證了良好的可擴充性,由RFC2271-RFC2275所定義。
執行SNMP管理系統的原理及SNMP協定
使用SNMP協定的網路管理系統管理結構工作一般包括:管理進程通過定時向各個設備的設備代理進程發送查詢請求消息(以輪詢方式),來跟蹤各個設備的狀態;而當設備出現異常事件如設備冷啟動等時,設備代理進程主動向管理進程發送陷阱消息,彙報出現的異常事件。這些輪詢消息和陷阱消息的發送和接受規程及其格式定義都是由SNMP協議定義的;而被管理設備將其各種管理物件的資訊都存放在一個稱為管理資訊庫(Management Information Base)庫結構中。
其中SNMP協定是執行在UDP協定之上,它利用的是UDP協議的161/162埠。其中161埠被設備代理監聽,等待接受管理者進程發送的管理資訊查詢請求消息;162埠由管理者進程監聽等待設備代理進程發送的異常事件報告陷阱消息,如Trap。

設備的所有的需要被管理的資訊被看作一個各種被管理物件的集合,這些被管理物件由OSI定義在一個被稱作管理資訊庫(Management Information Base,MIB)的虛擬的資訊庫中。

管理物件庫MIB
MIB是一個按照層次結構組織的樹狀結構(定義方式類似於功能變數名稱系統),管理物件為定義為樹中的相應葉子節點。管理物件是按照模組的形式組織,每個物件的父節點表示該種物件屬於上層的哪一個模組。而且OSI為樹中每一層的每個節點定義唯一的一個數位標識,每層中的該數位標識從1開始遞增,這樣樹中的每個節點都可以用從根開始到目的節點的相應的標識對應的一連串的數位來表示,如1.3.6.1.2.1.1表示了MIBII中系統組子樹,而1.3.6.1.2.1.1.1.0表示系統組中的系統描述(sytem Descrption)物件。每個物件的一連串數位表示被稱為物件識別字(Object Indentifier,OID)。
相關的一組物件的集合被定義為一個MIB模組。這些模組使用OSI的抽象語法標記(Abstract Syntax Notation One,ASN.1)的一個子集寫成。該子集被定義為管理資訊結構(Management Information,SMI)。
SNMP的消息在發送和傳輸時消息是採用基本編碼規則(BER)對消息進行編碼。
SNMP基本的標準MIB庫是MIBII,具體請參考RFC 1213。
SNMP協議操作
SNMP提供有三類操作,分別為Get,Set和Trap。
Get操作實現對被管理物件所表示的管理資訊的讀操作。在SNMPv1中,GET操作具體一共有兩種形式
Get和GetNext操作: Get操作指示直接讀取操作參數指定的OID所表示的被管理物件的管理資訊值。GetNext操作指示讀取操作參數指定的OID所表示的被管理物件在MIB樹中按照字典順序的下一個被管理物件的管理資訊的值。在SNMPv2中,增加了一種GetBulk操作,其是Get和GetNext的綜合,是為了提高對被管理資訊的訪問的效率而增加的。
Set操作實現對被管理物件的管理資訊進行寫操作,其實現直接對操作參數指定的OID所表示的被管理物件對應的管理資訊的值的設置。
前面幾種消息是由管理工作站主動實現對被管理設備進行輪詢訪問時發出以得到被管理設備的各種資訊;而在被管理設備出現異常事件需要及時向管理工作站報告時,就需要Trap操作,該操作實現被管理設備向管理工作站報告設備上出現的異常事件,如網路介面出現故障或恢復工作,設備重新啟動等資訊。另外在SNMPv2中新增加了一種Inform操作來實現管理站與管理站之間的通信。
其中上述操作的消息都可以在操作參數中一次指定一個或多個管理物件OID資訊,也就是說一個消息一次可以實現對多個被管理物件的操作。
SNMPv1和SNMPv2c採用了一種簡單的基於共同體名的安全機制:
管理站和被管設備上都存儲有該充當密碼作用的共同體名;消息發送者(一般是管理者)在要發送的消息中的共同體名欄位中填入對應於接收者的共同體名,然後以明文方式在網路上發送消息,接收方(被管理設備)接收到消息以後,如果消息格式是正確的,則讀取該欄位,與自身保存的共同體名相比較,來實現對發送消息者的認證。在一些實現中,對應於每個共同體名還有一個機器位址列表,來表示只有位址在這個列表中的機器使用該共同體名發送的消息才認為是可信的。這裏的共同體名就擔任密碼的作用。同時對應於每個共同體名都有一個訪問控制許可權,可能值為讀或讀寫。只有請求的操作和使用的共同體名的許可權一致才允許進行。
詳細情況請參考RFC 1157、RFC 1902、RFC 2273、RFC 2274。

MRTG的安裝配置
安裝支援軟體
我們這裏以Rehat7.2為例子討論MRTG的配置和安裝。要安裝MRTG需要安裝以下套裝軟體:GCC、Perl、gd、libpng和zlib。可以使用下面的命令來判斷系統是否安裝有這些套裝軟體:
[root@mail doc]# rpm -qa|grep gd
gd-1.8.4-4
gd-devel-1.8.4-4
[root@mail doc]# rpm -qa|grep perl
perl-5.6.0-17
mod_perl-1.24_01-3
[root@mail doc]# rpm -qa|grep libp
libpng-1.0.12-2
libpng-devel-1.0.12-2
[root@mail doc]# rpm -qa|grep zlib
zlib-1.1.3-24
zlib-devel-1.1.3-24
[root@mail doc]# rpm -qa|grep gcc
gcc-2.96-98
gcc-g77-2.96-98
gcc-c++-2.96-98
如果發現哪個套裝軟體沒有安裝,只需直接從redhat安裝盤安裝對應的rpm包即可,例如:
root@mail doc]# rpm -ivh zlib-1.1.3-24 zlib-devel-1.1.3-24
MRTG的安裝
目前mrtg的最新版本為2.9.17:
[root@mail src]# tar xvfz mrtg-2.9.17.tar.gz
[root@mail src]# cd mrtg-2.9.17
[root@mail mrtg-2.9.17]# ./configure --prefix=/usr/local/mrtg-2
[root@mail mrtg-2.9.17]# make
[root@mail mrtg-2.9.17]# make install
到現在我們就已經正確地安裝了MRTG系統。
配置SNMP服務
對於不同的設備,配置SNMP支援的方法是不一致的,具體請參考設備的隨機文檔,一般裏面都有詳細的介紹。這裏我們討論在Linux環境下配置SNMP伺服器,以實現對本機流出流入資料的分析和報表(我的應用環境是使用Linux帶動一個小型局域網上網,監控本機進出流量)。
在linux環境下安裝snmp套裝軟體是很容易的,只需要安裝相應的套裝軟體即可:
[root@mail doc]# rpm -qa|grep snmp
ucd-snmp-4.2.1-7
ucd-snmp-utils-4.2.1-7
ucd-snmp-devel-4.2.1-7
這時候執行下面的命令:
[root@mail doc]# /etc/rc.d/init.d/snmpd start
Starting snmpd: [ OK ]
如果命令輸出如上所示,就表示snmp伺服器啟動正常。
為了配合mrtg使用,還要修改snmpd的配置,以使其允許mrtg讀取其interface(網路介面)流量資料。
vi /etc/snmp/snmpd.conf

#view systemview included mib2
的內容修改為:
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:
/etc/rc.d/init.d/snmpd restart

配置MRTG
下一步就是要配置mrtg,實現對網路設備的監控。mrtg的配置資訊都是保存在mrtg.cfg檔中的,創建該檔並且在其中定義希望的監控特性。幸運的是一般不需要直接手工編輯該配置檔,因為mrtg套裝軟體提供有cfgmaker配置工具,這是一個腳本檔,根據執行參數可以自動生成mrtg.cfg配置檔。在mrtg源碼目錄的bin子目錄下你可以得到該工具。
首先在www伺服器的DocumentRoot目錄下創建一個子目錄用來存放mrtg生成的統計檔,這裏假設apache是默認安裝,因此DocumentRoot在/var/www/html目錄下,我們在該目錄下創建子目錄mrtg:
mkdir /var/www/html/mrtg
這裏的/var/www/html/mrtg就是mrtg的工作目錄。下麵就生成mrtg配置檔:
cfgmaker --global "WorkDir: /var/www/html/mrtg"
--global "Options[_]: growright,bits"
--ifref=ip
--output /etc/mrtg.cfg
[email protected]
這裏的--global參數表示後面的選項是對後面指定的設備都是有效的(如果希望對多個設備進行監控時,該參數就會發生作用)。WorkDir用來指示mrtg的工作目錄;Options用來指定一些特定的選項,這裏的growright,bits是用來指定默認options配置的,對於常見的應用來說默認options配置就可以滿足需求了。ifref用來指示用什麼選項來標識設備介面,這裏指定使用IP位址來標識網路設備介面。ifref可以指定為nr、ip、eth、descr、name。nr表示用介面在MIBII庫中Interface介面的ifIndex來識別介面;IP表示使用ip位址識別介面;eth表示使用介面的物理位址標識介面;descr表示使用介面的描述資訊來標識介面;name表示使用介面名來標識介面。一般來說ip位址是唯一的,但是有些情況下介面是沒有IP位址的,例如交換機就會出現這種情況。對於介面來說nr(介面號)是唯一的,因此對於一般情況使用IP位址就可以了,而對於其他一些情況則需要採用nr了。"--output /etc/mrtg.cfg"標識將生成的配置檔存放在/etc/目錄下。"[email protected]"表示監控IP位址為192.168.0.1的設備,採用public作為共同體名通過snmp協定來監控設備192.168.0.1。
對於希望使用mrtg來對多個設備進行監控的情況,舉例如下:
cfgmaker --global "WorkDir: /var/www/html/mrtg"
--global "Options[_]: growright,bits"
--ifref=descr
--ifdesc=alias
[email protected]
[email protected]
--global "Options[_]: growright"
--ifref=name
--ifdesc=descr
[email protected]
--ifdesc=name
[email protected] > mrtg.cfg
這裏指示監控四個設備:router1.place.xyz、router2.place.xyz、switch1.place.xyz
和switch2.place.xyz,所有的設備都採用共同體名public來進行監控。並且兩個路由器採用descr來作為設備的描述資訊,而兩個交換機則採用alias作為設備描述(這兩者是不同的,例如對於cisco路由器來說,對於descr來說設備描述為"Serial0",而對於aliasl來說則為"Link to HQ")。
對於我這裏的應用環境來說,生成的mrtg.cfg內容如下:
複製內容到剪貼板
代碼:
# Created by
# /usr/local/mrtg-2/bin/cfgmaker --global WorkDir: /var/www/html/mrtg --global Options[_]: growright,bits
--output /etc/mrtg.cfg --ifref=ip [email protected]

### Global Config Options
# for UNIX
# WorkDir: /home/http/mrtg
# or for NT
# WorkDir: c:mrtgdata
### Global Defaults
# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits
WorkDir: /var/www/html/mrtg
Options[_]: growright,bits
######################################################################
# System: 192.168.0.1
# Description: Linux 192.168.0.1 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 EDT 2001 i686
# Contact: Root (configure /etc/snmp/snmp.local.conf)
# Location: Unknown (edit /etc/snmp/snmpd.conf)
######################################################################

### Interface 1 >> Descr: lo | Name: | Ip: 127.0.0.1 | Eth: ###
### The following interface is commented out because:
### * it is a Software Loopback interface
#
# Target[192.168.0.1_127.0.0.1]: /127.0.0.1:[email protected]:
# SetEnv[192.168.0.1_127.0.0.1]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
# MaxBytes[192.168.0.1_127.0.0.1]: 1250000
# Title[192.168.0.1_127.0.0.1]: Traffic Analysis for 127.0.0.1 -- 192.168.0.1
# PageTop[192.168.0.1_127.0.0.1]:
Traffic Analysis for 127.0.0.1 -- 192.168.0.1
#
# System: 192.168.0.1 in Unknown (edit /etc/snmp/snmpd.conf)
# Maintainer: Root (configure /etc/snmp/snmp.local.conf)
# Description: lo
# ifType: softwareLoopback (24)
# ifName:
# Max Speed: 10.0 Mbits/s
# Ip: 127.0.0.1 (localhost)
#

### Interface 2 >> Descr: eth0 | Name: | Ip: 211.99.43.111 | Eth: 0-d0-b7-b7-bb-30 ###
Target[192.168.0.1_211.99.43.158]: /211.99.43.158:[email protected]:
SetEnv[192.168.0.1_211.99.43.158]: MRTG_INT_IP="211.99.43.158" MRTG_INT_DESCR="eth0"
MaxBytes[192.168.0.1_211.99.43.158]: 1250000
Title[192.168.0.1_211.99.43.158]: Traffic Analysis for 211.99.43.158 -- 192.168.0.1
PageTop[192.168.0.1_211.99.43.158]:
Traffic Analysis for 211.99.43.158 -- 192.168.0.1
System: 192.168.0.1 in Unknown (edit /etc/snmp/snmpd.conf)
Maintainer: Root (configure /etc/snmp/snmp.local.conf)
Description: eth0
ifType: ethernetCsmacd (6)
ifName:
Max Speed: 10.0 Mbits/s
Ip: 211.99.43.158 (192.168.0.1)

### Interface 3 >> Descr: eth1 | Name: | Ip: 192.168.0.1 | Eth: 0-10-4b-0c-b4-23 ###
Target[192.168.0.1_192.168.0.1]: /192.168.0.1:[email protected]:
SetEnv[192.168.0.1_192.168.0.1]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth1"
MaxBytes[192.168.0.1_192.168.0.1]: 1250000
Title[192.168.0.1_192.168.0.1]: Traffic Analysis for 192.168.0.1 -- 192.168.0.1
PageTop[192.168.0.1_192.168.0.1]:
Traffic Analysis for 192.168.0.1 -- 192.168.0.1
>
System: 192.168.0.1 in Unknown (edit /etc/snmp/snmpd.conf)
Maintainer: Root (configure /etc/snmp/snmp.local.conf)
Description: eth1
ifType: ethernetCsmacd (6)
ifName:
Max Speed: 10.0 Mbits/s
Ip: 192.168.0.1 (192.168.0.1)
執行mrtg
一旦生成正確的配置檔,就執行下面的命令:
/usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg
這將查詢被監控的設備並在工作目錄下創建初始的流量圖和web頁面,在前三次執行時可能會報告遺失日誌檔的告警資訊,不要理睬這些資訊,只需要連續執行三次以後再執行就不會產生告警資訊了。如果仍然出現告警那麼就需要察看問題出在哪里了。
使用手工執行mrtg並不能定時產生適當的統計資訊,因此最好還是定時自動執行mrtg來生成統計資訊,默認為五分鐘執行一次。作為root身份crontab -e進入編輯狀態,添加內容如下:
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg
然後就可以通過流覽器訪問位址http://192.168.0.1/mrtg/選擇適當的介面察看流量資訊了。如果希望生成類似於http://www.stat.ee.ethz.ch/mrtg/的資訊,就需要自己手工編輯一個index.html文檔存放在/var/www/html/mrtg目錄下,內容為介面說明以及該介面的日統計資訊的圖即可。




歡迎光臨 ihao論壇 (https://ihao.org/dz5/) Powered by Discuz! 6.0.0