網路流量監控器mrtg全攻略(zt)

tonykorn97發表於2007-07-06

簡介

Mrtg(Multi Router Traffic Grapher,MRTG)是一個監控網路鏈路流量負載的工具軟體, 它透過snmp協議從裝置得到裝置的流量資訊,並將流量負載以包含PNG格式的圖形的HTML 文件方式顯示給使用者,以非常直觀的形式顯示流量負載(可以在網站http:// 得到mrtg的輸出結果示例)。


關於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的主頁是,可以從這裡下載軟體。

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包即可,例如:
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
public@192.168.0.1

這裡的--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/目錄 下。"public@192.168.0.1"表示監控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


--global "Options[_]: growright"
--ifref=name
--ifdesc=descr

--ifdesc=name
> 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 public@192.168.0.1


### 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:public@192.168.0.1:
# 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:

Target[192.168.0.1_211.99.43.158]: /211.99.43.158:public@192.168.0.1:
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:

Target[192.168.0.1_192.168.0.1]: /192.168.0.1:public@192.168.0.1:
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/選擇適當的介面地址察看流量 資訊了。如果希望生成類似於的資訊,就需要自己手 工編輯一個index.html文件存放在/var/www/html/mrtg目錄下,內容為介面說明以及該接 口的日統計資訊的圖即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章