0.說明html
關於一個完整的教程,仍是那句話,國內的要麼不完整,要麼就太舊了,並且思路也不清晰,因此這裏寫一篇完整的給你們分享一下。
前端
雖然對於Linux主機的監控能夠經過執行特定的命令來完成,可是相比以後,經過snmp的方式來獲取Linux主機的信息則會更輕鬆簡單些,只不過在使用前的配置可能須要花多一點時間,不過這絕對值得!並且若是須要開發Linux主機的監控軟件,那使用snmp確定是首選,畢竟它能夠得到的信息太多太多!
python
後面的內容就來分享一下在Ubuntu上安裝、配置、啓動snmp以及進行遠程測試的完整過程。jquery
這裏使用的操做系統爲:Ubuntu 15.10
linux
1.安裝ajax
咱們須要安裝下面三個軟件包:
bootstrap
snmpd:snmp服務端軟件ubuntu
snmp:snmp客戶端軟件bash
snmp-mibs-downloader:用來下載更新本地mib庫的軟件
服務器
雖然最後我會用另外一臺主機來進行遠程的測試,不過剛開始時,仍是在服務端也把snmp客戶端軟件安裝好,方便作一些基本的測試。
執行下面的命令安裝這三個軟件:
ubuntu@leaf:~$ sudo apt-get install snmpd snmp snmp-mibs-downloader
須要注意的是,在安裝snmp-mibs-downloader的過程當中,程序會幫咱們自動下載mib庫,並保存在/usr/share/mibs目錄中:
ubuntu@leaf:/usr/share/mibs$ ls iana ietf
若是發現沒有些目錄或文件的話,在安裝完snmp-mibs-downloader後也能夠手動執行下面的命令來下載mib庫:
ubuntu@leaf:~$ sudo download-mibs
會有不少輸出信息。
這樣的話,第一步安裝工做也就完成了。
2.配置
其實在安裝完snmpd軟件後,系統是爲咱們自動開啓了這個服務的:
ubuntu@leaf:~$ sudo service snmpd status * snmpd is running
在開始配置前,咱們先來進行一些簡單的測試,看看服務是否正常:
ubuntu@leaf:~$ 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 leaf 4.2.0-34-generic #39-Ubuntu SMP Thu Mar 10 22:13:01 UTC 2016 x86_64"
沒有問題,有信息返回,那麼接下來就直接進行各類配置了,不過在開始配置前先備份一下配置文件:
ubuntu@leaf:~$ cd /etc/snmp ubuntu@leaf:/etc/snmp$ sudo cp snmpd.conf snmpd.conf.ori ubuntu@leaf:/etc/snmp$ ls snmpd* snmpd.conf snmpd.conf.ori
固然,須要注意的是,後面所講的,使用的都是SNMPv2,其實這已經能夠知足咱們的需求了。
(1)配置節點
修改/etc/snmp/snmpd.conf文件,大概在45行,將下面的兩行註釋掉:
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
這樣的話,咱們就能夠獲取更多的節點信息,由於若是不這樣作,咱們可以獲取的信息,僅僅是上面兩個註釋掉的節點所包含的信息。
修改以後,重啓snmp服務,再使用命令觀察一下:
ubuntu@leaf:/etc/snmp$ sudo service snmpd restart xpleaf@leaf:/etc/snmp$ 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: 1950716
OK,沒有問題!不過須要注意的是,這裏.1.3.6.1.4.1.2021.4.3.0表示的是LInux主機交換空間總量的一個節點,而輸出1950716,就說明咱們的主機上的交換空間總量大概就是2GB左右。
(2)配置MIB庫
雖然上面已經能夠正常獲取咱們想要的信息,可是輸出結果很不直觀,這時咱們配置一下MIB庫就能夠了,不過須要注意的是,這個配置是對客戶端軟件的配置(只不過如今仍是在個人同一臺服務器主機上進行操做)。
修改/etc/snmp/snmp.conf配置文件,將下面這一行註釋掉:
mibs :
而後重啓snmp服務,再經過命令觀察:
ubuntu@leaf:/etc/snmp$ sudo service snmpd restart ubuntu@leaf:/etc/snmp$ snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4.3.0 UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB
能夠看到,如今的輸出就很是直觀了!這樣以後,其實咱們在獲取相關節點信息時,也能夠不用輸入那一長串的數字了:
ubuntu@leaf:/etc/snmp$ snmpwalk -v 2c -c public localhost memTotalSwap.0 UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB ubuntu@leaf:/etc/snmp$ snmpwalk -v 2c -c public localhost memTotalReal.0 UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB
其實這樣以後,你也就可以發現使用snmp是有多麼地強大了!關於MIB庫的節點值從哪裏來,不須要去記,能夠在網上找,也能夠看我總結的一篇博文:《linux snmp經常使用結點值》,也能夠在個人博客上找:http://xpleaf.blog.51cto.com。固然,若是你想知道是什麼意思,爲何要這樣定義,那麼我建議你去看相關專業的書籍,一個不錯的推薦是《TCP/IP 詳解 卷1:協議》,若是網絡基礎不太好的話,也能夠去學習一下。
須要注意的是,如今只是在服務器端進行配置和測試,其實這一步的操做應該是在客戶端(另外一臺主機上)完成的,這裏只是爲了方便。
(3)配置共同體
其實所謂共同體,把它理解爲一個密碼就好了,前面咱們在使用snmpwalk命令獲取主機的信息時,有一個-c public的參數,其實就是指定了這個共同體爲public,這是默認的配置,固然在實際中,咱們不可能使用默認的值,所以須要把它修改一下。
修改配置文件/etc/snmp/snmpd.conf,大概在52行,將下面的兩行:
rocommunity public default -V systemonly rocommunity6 public default -V systemonly
修改成:
rocommunity xpleaf123 default -V systemonly rocommunity6 xpleaf123 default -V systemonly
那麼這裏就把共同體修改成xpleaf123了,重啓snmp服務,經過命令觀察一下:
ubuntu@leaf:/etc/snmp$ snmpwalk -v 2c -c public localhost memTotalReal.0 Timeout: No Response from localhost ubuntu@leaf:/etc/snmp$ snmpwalk -v 2c -c xpleaf123 localhost memTotalReal.0 UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB
能夠看到第一次獲取信息不成功,由於咱們已經更新了共同體,舊的public將不能再使用,不然認證失敗就沒法獲取snmp提供的主機信息。
(4)容許遠程主機訪問
默認狀況下,snmp服務只是對本地開啓,是沒法經過遠程獲取該主機的snmp信息的:
ubuntu@leaf:/etc/snmp$ sudo netstat -antup | grep 161 udp 0 0 127.0.0.1:161 0.0.0.0:* 11615/snmpd
能夠看到,161端口只對本機開放(161端口號是snmp服務的端口號),咱們須要修改一下,讓snmp服務對外開放。
修改/etc/snmp/snmpd.conf配置文件,大概在15行,將下面一行註釋掉:
agentAddress udp:127.0.0.1:161
同時去掉下面這一行的註釋:
#agentAddress udp:161,udp6:[::1]:161
從新啓動snmp服務,再經過命令觀察:
ubuntu@leaf:/etc/snmp$ sudo netstat -antup | grep 161 udp 0 0 0.0.0.0:161 0.0.0.0:* 11656/snmpd udp6 0 0 ::1:161 :::* 11656/snmpd
能夠看到服務已經對外開放了,而且同時支持IPv4和IPv6。
這樣以後,咱們就能在遠程主機進行測試。
3.啓動
其實前面的操做咱們一直都啓動着snmp服務,不過這裏仍是要確保一下:
ubuntu@leaf:~$ sudo service snmpd start ubuntu@leaf:~$ sudo netstat -antup | grep 161 udp 0 0 0.0.0.0:161 0.0.0.0:* 11656/snmpd udp6 0 0 ::1:161 :::* 11656/snmpd
4.(遠程)測試
在服務器本地咱們已經作過測試,而且沒有問題,下面咱們要作的是在遠程主機進行測試。
我另外一臺遠程主機上的操做系統也是Ubuntu 15.04,而且已經安裝了snmp客戶端軟件和mib庫下載軟件,同時配置了MIB庫,下面就直接進行遠程的測試:
xpleaf@leaf:~$ snmpwalk -v 2c -c xpleaf123 115.159.*.* memTotalSwap.0 UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB xpleaf@leaf:~$ snmpwalk -v 2c -c xpleaf123 115.159.*.* memTotalReal.0 UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB xpleaf@leaf:~$ snmpwalk -v 2c -c xpleaf123 115.159.*.* .1.3.6.1.4.1.2021.9.1.6.1 UCD-SNMP-MIB::dskTotal.1 = INTEGER: 8123832
能夠看到,測試徹底沒有問題!而且獲取的值和前面有服務器本地獲得的同樣。
固然,若是你發現仍是獲取不了的,那麼你就須要考慮一下在服務器的主機上防火牆的設置有沒有問題了。
5.有什麼用
若是你會一門後臺開發語言(好比Python),而後你的前端基礎又不錯(html、js、jquery、bootstrap、ajax等各類),基於snmp的基礎,那麼你就徹底能夠本身開發一款Linux主機的監控主機了,這並不難,複雜的是你須要怎麼對你的數據進行處理,而這個話就須要看每一個人或每間公司的需求了。
博主目前本身就是在作相關監控軟件的開發,只是監控的不是Linux主機,而是其它網絡設備,雖然也是有點小複雜,但只要技術上的思路是對的,那麼一切就沒有問題了。
由於感受snmp對於大部分朋友應該都頗有用處,所以就寫此文分享一下,雖然只是針對Ubuntu的
但在其它Linux發行版本上,相信也是大同小異的。仍是那句話,但願可以幫到有須要的朋友。