前言
從事信息系統(tǒng)運維工作,少不了跟SNMP打交道邑商,說來慚愧摄咆,多年來一直不求甚解,懵懵懂懂的使用SNMP和網(wǎng)管軟件人断。至于這方面的資料和教程也鮮有完整透徹的吭从,國內(nèi)的要么不完整,要么太舊了恶迈,自己的英文又不靈涩金。這里就是將自己的學習使用軌跡記錄下來,以便以后用到時能省點事暇仲。
這里使用的操作系統(tǒng)為:Ubuntu Server 18.04.4 Amd64 版本(2020年3月29日)
一步做、安裝
我們需要安裝下面三個軟件包:
snmpd //snmp服務端軟件
snmp //snmp客戶端軟件
snmp-mibs-downloader //用來下載更新本地mib庫的軟件
執(zhí)行下面的命令安裝這三個軟件:
$ sudo apt-get install snmpd snmp snmp-mibs-downloader
需要注意的是,在安裝snmp-mibs-downloader的過程中奈附,程序會幫我們自動下載mib庫全度,并保存在/usr/share/snmp/mibs目錄中。如果發(fā)現(xiàn)沒有些目錄或文件的話斥滤,在安裝完snmp-mibs-downloader后也可以手動執(zhí)行下面的命令來下載mib庫(會有很多輸出信息):
$ sudo download-mibs
還有一個開源程序包将鸵,叫做“Net-SNMP”的勉盅,工具很全很專業(yè),是一種開放源代碼的 SNMP 協(xié)議實現(xiàn)咨堤。它支持 SNMP v1, SNMP v2c 與 SNMP v3菇篡,并可以使用 IPV4 及 IPV6 。也包含 SNMP Trap 的所有相關實現(xiàn)一喘。Net-SNMP 包含了SNMP實用程序集和完整的SNMP開發(fā)庫驱还。Net-SNMP 可以通過snap直接網(wǎng)絡安裝:
$ sudo snap install net-snmp
二、配置
其實在安裝完snmpd軟件后凸克,系統(tǒng)是為我們自動開啟了這個服務的:
$ sudo service snmpd status
現(xiàn)在议蟆,我們先來進行一些簡單的測試,看看服務是否正常:
$ snmpwalk -v 2c -c public localhost 1.3.6.1.2.1.1.1
iso.3.6.1.2.1.1.1.0 = STRING: "Linux ubunsvr 4.15.0-91-generic #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64"
有信息返回萎战,那么接下來就直接進行各種配置了咐容。這里討論和使用的都是SNMPv2(最新的SNMPv3我還在迷糊中)。
配置節(jié)點蚂维。修改/etc/snmp/snmpd.conf文件:
$ sudo nano /etc/snmp/snmpd.conf
找到:
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
注釋掉上面兩行戳粒,增加下面一行:
#view systemonly included .1.3.6.1.2.1.1
#view systemonly included .1.3.6.1.2.1.25.1
view systemonly included .1
這樣的話,我們就可以獲取更多的節(jié)點信息虫啥,因為如果不這樣做蔚约,我們能夠獲取的信息僅僅是上面兩個注釋掉的節(jié)點所包含的信息。修改之后涂籽,重啟snmp服務苹祟,再使用命令觀察一下:
$ sudo service snmpd restart
$ sudo snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4.3.0
iso.3.6.1.4.1.2021.4.3.0 = INTEGER: 4015100
沒有問題!不過需要注意的是评雌,這里.1.3.6.1.4.1.2021.4.3.0表示的是LInux主機交換空間(swap)總量的一個節(jié)點树枫,而輸出4015100 kB,就說明我們的主機上的交換空間總量大概就是4GB左右景东。
配置MIB庫砂轻。雖然上面已經(jīng)可以正常獲取我們想要的信息,但是輸出結(jié)果很不直觀斤吐,這時我們配置一下MIB庫就可以了舔清,不過需要注意的是,這個配置是對客戶端軟件的配置(只不過現(xiàn)在我的這臺機器既是服務器也是客戶機)曲初。修改/etc/snmp/snmp.conf配置文件,將下面這一行注釋掉:
$ sudo nano /etc/snmp/snmp.conf
#mibs :
然后重啟snmp服務杯聚,再通過命令觀察:
$ sudo service snmpd restart
$ snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4.3.0
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 4015100 kB
可以看到臼婆,現(xiàn)在的輸出就非常直觀了!這樣之后幌绍,其實我們在獲取相關節(jié)點信息時颁褂,也可以不用輸入那一長串的數(shù)字了:
$ snmpwalk -v 2c -c public localhost memTotalSwap.0
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 4015100 kB
$ snmpwalk -v 2c -c public localhost memTotalReal.0
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 4015876 kB
其實這樣之后故响,你也就能夠發(fā)現(xiàn)使用SNMP是有多么地強大了!關于MIB庫的節(jié)點值從哪里來颁独,不需要去記彩届,可以在網(wǎng)上找,也可以看這個文檔的后面部分誓酒。當然樟蠕,如果你想知道是什么意思,為什么要這樣定義靠柑,那么我建議你去看相關專業(yè)的書籍寨辩,一個不錯的推薦是《SNMP簡單網(wǎng)絡管理協(xié)議》,另一個推薦是神書《TCP/IP詳解 卷1:協(xié)議》歼冰,如果網(wǎng)絡基礎不太好的話靡狞,也可以去學習一下。需要注意的是隔嫡,現(xiàn)在只是在服務器端進行配置和測試甸怕,其實這一步的操作應該是在客戶端完成的,這里只是為了方便腮恩。
配置社區(qū)名(共同體)梢杭。其實所謂社區(qū)名,把它理解為一個密碼就行了庆揪,前面我們在使用snmpwalk命令獲取主機的信息時式曲,有一個“-c public”的參數(shù),其實就是指定了這個社區(qū)名為“public”缸榛,這是默認的配置吝羞,當然在實際中,我們不可能使用默認的值内颗,因此需要把它修改一下钧排。修改配置文件“/etc/snmp/snmpd.conf”,將下面的兩行:
$ sudo nano /etc/snmp/snmpd.conf
rocommunity public default -V systemonly
rocommunity6 public default -V systemonly
修改為:
rocommunity osbear default -V systemonly
rocommunity6 osbear default -V systemonly
那么這里就把社區(qū)名修改為osbear了均澳,重啟snmp服務恨溜。
$ sudo service snmpd restart
三、Net-SNMP 的幾個工具
Net-SNMP 包含很多功能找前,這里僅將自己爬網(wǎng)看到的記錄一下糟袁,詳細深入學習請移步專業(yè)網(wǎng)站。
snmpnetstat命令可以從支持 SNMP 的設備獲取特定的信息躺盛。比如下面的命令從目標系統(tǒng)上獲得類似 netstat 的信息:
$ sudo snmpnetstat -v 2c -c public localhost
...
Active Internet (udp) Connections
Proto Local Address Remote Address PID
udp4 *.37634 . 6436
udp4 *.39879 . 0
udp4 localhost.snmp . 6436
udp4 localhost.domain . 0
...
$ sudo snmpstatus -v 2c -c public localhost
[UDP: [127.0.0.1]:161->[0.0.0.0]:46141]=>[Linux ubunsvr 4.15.0-91-generic #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64] Up: 0:37:35.60
Interfaces: 2, Recv/Trans packets: 101897/64830 | IP: 62842/57591
snmptranslate 命令將 MIB OIDs 的兩種表現(xiàn)形式 ( 數(shù)字及文字 ) 相互轉(zhuǎn)換项戴,并顯示 MIB 的內(nèi)容與結(jié)構,如下所示:
$ sudo snmptranslate .1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance
$ snmptranslate -On SNMPv2-MIB::sysUpTime.0
.1.3.6.1.2.1.1.3.0
四槽惫、Linux SNMP 常用結(jié)點值
1周叮、針對Linux主機的對象標識符
(1)CPU負載
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3
(2)CPU信息
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0
(3)內(nèi)存使用
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0
(4)磁盤使用
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
(5)系統(tǒng)運行時間
.1.3.6.1.2.1.1.3.0
2辩撑、MIB對象標識符
(1)System組
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
sysLocation 1.3.6.1.2.1.1.6
sysServices 1.3.6.1.2.1.1.7
(2)Interfaces組
ifNumber 1.3.6.1.2.1.2.1
ifTable 1.3.6.1.2.1.2.2
ifEntry 1.3.6.1.2.1.2.2.1
ifIndex 1.3.6.1.2.1.2.2.1.1
ifDescr 1.3.6.1.2.1.2.2.1.2
ifType 1.3.6.1.2.1.2.2.1.3
ifMtu 1.3.6.1.2.1.2.2.1.4
ifSpeed 1.3.6.1.2.1.2.2.1.5
ifPhysAddress 1.3.6.1.2.1.2.2.1.6
ifAdminStatus 1.3.6.1.2.1.2.2.1.7
ifOperStatus 1.3.6.1.2.1.2.2.1.8
ifLastChange 1.3.6.1.2.1.2.2.1.9
ifInOctets 1.3.6.1.2.1.2.2.1.10
ifInUcastPkts 1.3.6.1.2.1.2.2.1.11
ifInNUcastPkts 1.3.6.1.2.1.2.2.1.12
ifInDiscards 1.3.6.1.2.1.2.2.1.13
ifInErrors 1.3.6.1.2.1.2.2.1.14
ifInUnknownProtos 1.3.6.1.2.1.2.2.1.15
ifOutOctets 1.3.6.1.2.1.2.2.1.16
ifOutUcastPkts 1.3.6.1.2.1.2.2.1.17
ifOutNUcastPkts 1.3.6.1.2.1.2.2.1.18
ifOutDiscards 1.3.6.1.2.1.2.2.1.19
ifOutErrors 1.3.6.1.2.1.2.2.1.20
ifOutQLen 1.3.6.1.2.1.2.2.1.21
ifSpecific 1.3.6.1.2.1.2.2.1.22
(3)IP組
ipForwarding 1.3.6.1.2.1.4.1
ipDefaultTTL 1.3.6.1.2.1.4.2
ipInReceives 1.3.6.1.2.1.4.3
ipInHdrErrors 1.3.6.1.2.1.4.4
ipInAddrErrors 1.3.6.1.2.1.4.5
ipForwDatagrams 1.3.6.1.2.1.4.6
ipInUnknownProtos 1.3.6.1.2.1.4.7
ipInDiscards 1.3.6.1.2.1.4.8
ipInDelivers 1.3.6.1.2.1.4.9
ipOutRequests 1.3.6.1.2.1.4.10
ipOutDiscards 1.3.6.1.2.1.4.11
ipOutNoRoutes 1.3.6.1.2.1.4.12
ipReasmTimeout 1.3.6.1.2.1.4.13
ipReasmReqds 1.3.6.1.2.1.4.14
ipReasmOKs 1.3.6.1.2.1.4.15
ipReasmFails 1.3.6.1.2.1.4.16
ipFragsOKs 1.3.6.1.2.1.4.17
ipFragsFails 1.3.6.1.2.1.4.18
ipFragCreates 1.3.6.1.2.1.4.19
ipAddrTable 1.3.6.1.2.1.4.20
ipAddrEntry 1.3.6.1.2.1.4.20.1
ipAdEntAddr 1.3.6.1.2.1.4.20.1.1
ipAdEntIfIndex 1.3.6.1.2.1.4.20.1.2
ipAdEntNetMask 1.3.6.1.2.1.4.20.1.3
ipAdEntBcastAddr 1.3.6.1.2.1.4.20.1.4
ipAdEntReasmMaxSize 1.3.6.1.2.1.4.20.1.5
(4)ICMP組
icmpInMsgs 1.3.6.1.2.1.5.1
icmpInErrors 1.3.6.1.2.1.5.2
icmpInDestUnreachs 1.3.6.1.2.1.5.3
icmpInTimeExcds 1.3.6.1.2.1.5.4
icmpInParmProbs 1.3.6.1.2.1.5.5
icmpInSrcQuenchs 1.3.6.1.2.1.5.6
icmpInRedirects 1.3.6.1.2.1.5.7
icmpInEchos 1.3.6.1.2.1.5.8
icmpInEchoReps 1.3.6.1.2.1.5.9
icmpInTimestamps 1.3.6.1.2.1.5.10
icmpInTimestampReps 1.3.6.1.2.1.5.11
icmpInAddrMasks 1.3.6.1.2.1.5.12
icmpInAddrMaskReps 1.3.6.1.2.1.5.13
icmpOutMsgs 1.3.6.1.2.1.5.14
icmpOutErrors 1.3.6.1.2.1.5.15
icmpOutDestUnreachs 1.3.6.1.2.1.5.16
icmpOutTimeExcds 1.3.6.1.2.1.5.17
icmpOutParmProbs 1.3.6.1.2.1.5.18
icmpOutSrcQuenchs 1.3.6.1.2.1.5.19
icmpOutRedirects 1.3.6.1.2.1.5.20
icmpOutEchos 1.3.6.1.2.1.5.21
icmpOutEchoReps 1.3.6.1.2.1.5.22
icmpOutTimestamps 1.3.6.1.2.1.5.23
icmpOutTimestampReps 1.3.6.1.2.1.5.24
icmpOutAddrMasks 1.3.6.1.2.1.5.25
icmpOutAddrMaskReps 1.3.6.1.2.1.5.26
(5)TCP組
tcpRtoAlgorithm 1.3.6.1.2.1.6.1
tcpRtoMin 1.3.6.1.2.1.6.2
tcpRtoMax 1.3.6.1.2.1.6.3
tcpMaxConn 1.3.6.1.2.1.6.4
tcpActiveOpens 1.3.6.1.2.1.6.5
tcpPassiveOpens 1.3.6.1.2.1.6.6
tcpAttemptFails 1.3.6.1.2.1.6.7
tcpEstabResets 1.3.6.1.2.1.6.8
tcpCurrEstab 1.3.6.1.2.1.6.9
tcpInSegs 1.3.6.1.2.1.6.10
tcpOutSegs 1.3.6.1.2.1.6.11
tcpRetransSegs 1.3.6.1.2.1.6.12
tcpConnTable 1.3.6.1.2.1.6.13
tcpConnEntry 1.3.6.1.2.1.6.13.1
tcpConnState 1.3.6.1.2.1.6.13.1.1
tcpConnLocalAddress 1.3.6.1.2.1.6.13.1.2
tcpConnLocalPort 1.3.6.1.2.1.6.13.1.3
tcpConnRemAddress 1.3.6.1.2.1.6.13.1.4
tcpConnRemPort 1.3.6.1.2.1.6.13.1.5
tcpInErrs 1.3.6.1.2.1.6.14
tcpOutRsts 1.3.6.1.2.1.6.15
(6)UDP組
udpInDatagrams 1.3.6.1.2.1.7.1
udpNoPorts 1.3.6.1.2.1.7.2
udpInErrors 1.3.6.1.2.1.7.3
udpOutDatagrams 1.3.6.1.2.1.7.4
udpTable 1.3.6.1.2.1.7.5
udpEntry 1.3.6.1.2.1.7.5.1
udpLocalAddress 1.3.6.1.2.1.7.5.1.1
udpLocalPort 1.3.6.1.2.1.7.5.1.2
(7)SNMP組
snmpInPkts 1.3.6.1.2.1.11.1
snmpOutPkts 1.3.6.1.2.1.11.2
snmpInBadVersions 1.3.6.1.2.1.11.3
snmpInBadCommunityNames 1.3.6.1.2.1.11.4
snmpInBadCommunityUses 1.3.6.1.2.1.11.5
snmpInASNParseErrs 1.3.6.1.2.1.11.6
NOT USED 1.3.6.1.2.1.11.7
snmpInTooBigs 1.3.6.1.2.1.11.8
snmpInNoSuchNames 1.3.6.1.2.1.11.9
snmpInBadValues 1.3.6.1.2.1.11.10
snmpInReadOnlys 1.3.6.1.2.1.11.11
snmpInGenErrs 1.3.6.1.2.1.11.12
snmpInTotalReqVars 1.3.6.1.2.1.11.13
snmpInTotalSetVars 1.3.6.1.2.1.11.14
snmpInGetRequests 1.3.6.1.2.1.11.15
snmpInGetNexts 1.3.6.1.2.1.11.16
snmpInSetRequests 1.3.6.1.2.1.11.17
snmpInGetResponses 1.3.6.1.2.1.11.18
snmpInTraps 1.3.6.1.2.1.11.19
snmpOutTooBigs 1.3.6.1.2.1.11.20
snmpOutNoSuchNames 1.3.6.1.2.1.11.21
snmpOutBadValues 1.3.6.1.2.1.11.22
NOT USED 1.3.6.1.2.1.11.23
snmpOutGenErrs 1.3.6.1.2.1.11.24
snmpOutGetRequests 1.3.6.1.2.1.11.25
snmpOutGetNexts 1.3.6.1.2.1.11.26
snmpOutSetRequests 1.3.6.1.2.1.11.27
snmpOutGetResponses 1.3.6.1.2.1.11.28
snmpOutTraps 1.3.6.1.2.1.11.29
snmpEnableAuthenTraps 1.3.6.1.2.1.11.30