Linux 中所使用的net-snmp自帶了一些標准的MIB,但是世界上支持snmp的設備有無數種,各廠家都有自己的定義,這些定義不可能都包含在net-snmp自帶的MIB中,因此,想要正確輪詢一個這樣的設備,必須載入廠家自己的MIB文件。
一般我們下載回來的MIB文件可能后綴名為.mib,為了清晰起見,一般改成 MIB_NAME.txt這樣的形式,當然不改也可以,這個MIB文件叫什么名字無關緊要。
系統要載入一個MIB文 件,net-snmp必須知道從哪里載入。默認情況下是下邊兩個目錄:
1. $HOME/.snmp/mibs
2. /usr/local/share/snmp/mibs
不過也有些發行版會改變這個默認路徑,那么可以用下邊兩種方法之一獲取它所使用的路徑。
1.如果系統安裝了net-snmp-config:
# net-snmp-config --default-mibdirs
2.如果未安裝net-snmp-config:
# snmptranslate -Dinit_mib .1.3 2>&1 |grep MIBDIR
init_mib: Seen MIBDIRS: Looking in '/root/.snmp/mibs:/usr/share/snmp/mibs' for mib dirs ...
二、net-snmp加載MIB文件方法
一般來說MIB文件是一個純文本文件,我們打開這個文件查看,找到第一個包含DEFINITIONS 的行
例如/usr/share/snmp/mibs/IP-MIB.txt中包含如下一行
# head /usr/share/snmp/mibs/IP-MIB.txt
IP-MIB DEFINITIONS ::= BEGIN
這個DEFINITIONS關鍵字前邊的"IP-MIB"就是系統在調用這個MIB文件時所使用的Module名稱,這個很重要。
網上有一些文檔說增加一個新的mib文件就是把mib文件復制到'/usr/share/snmp/mibs/'中就可以了,其實這是不對的!
首先,我們要將下載到的MIB文件復制到前邊所說的兩個默認路徑中的一個里
但是光復制過去還不能生效,net-snmp是不會自動加載所有在/usr/share/snmp/mibs/目錄中的mib文件 的!
如果不能正確加載mib文件的話,就會出現"Unknown Object Identifier"這樣的錯誤。
1、正確加載MIB文件的方法
如果要net-snmp自動加載我們下載的新MIB文件,有兩種方法:
方法一: 放到snmp.conf中。
用 net-snmp-config --snmpconfpath可以確定snmp.conf文件的位置
[root@Kickstart-O ~]# net-snmp-config --snmpconfpath
/etc/snmp:/usr/share/snmp:/usr/lib/snmp:/root/.snmp:/var/net-snmp
將所要加載的MIB的Module名稱加到snmp.conf中,如下例:
mibs +CISCO-RHINO-MIB
mibs +SOME-OTHER-SPIFFY-MIB
如果圖省事也可以這樣,當然我們不建議這樣。
mibs +ALL
因為這樣有可能會提示如下錯誤
# snmpwalk -v2c public 192.168.1.100
Warning: Module MAU-MIB was in /usr/share/snmp/mibs//DOT3-MAU-MIB.txt now is /usr/share/snmp/mibs//RFC2668-MIB.txt
Warning: Module DISMAN-EVENT-MIB was in /usr/share/snmp/mibs//EVENT-MIB.txt now is /usr/share/snmp/mibs//DISMAN-EVENT-MIB.txt
Warning: Module P-BRIDGE-MIB was in /usr/share/snmp/mibs//P-BRIDGE-MIB.txt now is /usr/share/snmp/mibs//P-BRIDGE.txt
可以將標准錯誤文件轉向來屏蔽這些警告信息
# snmpwalk -v2c public 192.168.1.100 2>/dev/null
SNMPv2-MIB::sysDescr.0 = STRING: Linux server1 2.4.34-pre2 #170 Fri Sep 15 20:10:21 CEST 2006 mips
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (706980) 1:57:49.80
方法二: 使用系統變量(定義MIBS變量)
# MIBS=+CISCO-RHINO-MIB:SOME-OTHER-SPIFFY-MIB
# export MIBS #導入MIBS
通過上述兩種方法之一,net-snmp就可以正確加載我們的新MIB文件,使用snmpget也就可以輪詢到新MIB文件中所定義 的OID了。
# snmpget -v1 -c public 192.168.49.253 BREEZECOM-DOT11EXT-MIB::roamQuality.1
BREEZECOM-DOT11EXT-MIB::roamQuality.1 = INTEGER: 3
或者這樣也可以
# snmpget -v1 -c public 192.168.49.253 roamQuality.1
BREEZECOM-DOT11EXT-MIB::roamQuality.1 = INTEGER: 3
三、snmp常用命令
1、snmptranslate
使用'snmptranslate' 命令可以獲得一個文本項對應的OID值
# snmptranslate -On BREEZECOM-DOT11EXT-MIB::roamQuality
.1.3.6.1.4.1.710.7.1.5.1.23.1.7
也可以使用'snmptranslate'命令查詢一個指定的對象
# snmptranslate -IR roamQuality
BREEZECOM-DOT11EXT-MIB::roamQuality
還可以用snmptranslate命令把OID轉化成文字描述
# snmptranslate .1.2.840.10036.2.2.1.12
IEEE802dot11-MIB::dot11FCSErrorCount
# snmptranslate -Of .1.2.840.10036.2.2.1.12
.iso.member-body.us.ieee802dot11.dot11mac.dot11CountersTable.dot11CountersEntry.dot11FCSErrorCount
也可用snmptranslate命令從mib文件獲得某個對象的全部細節
# snmptranslate -Td BREEZECOM-DOT11EXT-MIB:roamQuality
BREEZECOM-DOT11EXT-MIB::roamQuality
roamQuality OBJECT-TYPE
-- FROM BREEZECOM-DOT11EXT-MIB
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "An indicator for the quality of the BSS. The quality is
calculated over the received Beacons of the BSS and depends
on the selected quality indicator. The semantics of the
indicator is 'low is good quality' and 'high is bad quality'."
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) breezeCOM(710)ds11Products(7) dot11ExtMIB(1) dot11ExtWBUObjs(5) roam(1) roamTable
(23) roamEntry(1) 7 }
2、snmpwalk
# snmpwalk -v1 -c public 192.168.49.253 dot11CountersTable
IEEE802dot11-MIB::dot11TransmittedFragmentCount.1 = INTEGER: 122172497
IEEE802dot11-MIB::dot11MulticastTransmittedFrameCount.1 = INTEGER: 45242
IEEE802dot11-MIB::dot11FailedCount.1 = INTEGER: 4009
IEEE802dot11-MIB::dot11RetryCount.1 = INTEGER: 1601483
IEEE802dot11-MIB::dot11MultipleRetryCount.1 = INTEGER: 885859
IEEE802dot11-MIB::dot11FrameDuplicateCount.1 = INTEGER: 543281
IEEE802dot11-MIB::dot11RTSSuccessCount.1 = INTEGER: 0
IEEE802dot11-MIB::dot11RTSFailureCount.1 = INTEGER: 0
IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971754
IEEE802dot11-MIB::dot11ReceivedFragmentCount.1 = INTEGER: 108826417
IEEE802dot11-MIB::dot11MulticastReceivedFrameCount.1 = INTEGER: 31359
IEEE802dot11-MIB::dot11FCSErrorCount.1 = INTEGER: 831325
IEEE802dot11-MIB::dot11TransmittedFrameCount.1 = INTEGER: 122156588
IEEE802dot11-MIB::dot11WEPUndecryptableCount.1 = INTEGER: 0
3、snmpget
需要注意的是,在使用snmpget命令的時候,需要在查詢的OID尾部增加.0或者.1,不然會報錯。
# snmpget -v1 -c public 192.168.49.253 dot11ACKfailureCount
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: IEEE802dot11-MIB::dot11ACKFailureCount
# snmpget -v1 -c public 192.168.49.253 dot11ACKFailureCount.1
IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971912
四、導入mib庫並獲取負載均衡F5的Mib信息
按以下方法將F5的mib庫mibs_f5.tar.gz解壓后的文件放到snmpd服務器的mib庫目錄,重啟服務service snmpd restart即可。
驗證成功:
snmpwalk -c public -v 2c 123.123.123.123 F5-BIGIP-LOCAL-MIB::ltmVirtualServVaName
參考鏈接:
Management Information Base(管理信息庫,MIB)是一組對象,定義可對某個設備提出的查詢。我們所用的snmp監控主機如果要輪詢一個支持snmp的設備的某項數據,它必須發出被查詢設備所能理解的查詢命令,這個就需要監控主機載入被查詢設備對應的 MIB,這個MIB將通知snmp監控主機有關由 MIB 模塊化的數據的布局和組成。