關于一個完整的教程,還是那句話,國内的要麼不完整,要麼就太舊了,而且思路也不清晰,是以這裡寫一篇完整的給大家分享一下。
雖然對于Linux主機的監控可以通過執行特定的指令來完成,但是相比之後,通過snmp的方式來擷取Linux主機的資訊則會更輕松簡單些,隻不過在使用前的配置可能需要花多一點時間,不過這絕對值得!而且如果需要開發Linux主機的監控軟體,那使用snmp肯定是首選,畢竟它可以獲得的資訊太多太多!
後面的内容就來分享一下在Ubuntu上安裝、配置、啟動snmp以及進行遠端測試的完整過程。
這裡使用的作業系統為:Ubuntu 15.10
1.安裝
我們需要安裝下面三個軟體包:
snmpd:snmp服務端軟體
snmp:snmp用戶端軟體
snmp-mibs-downloader:用來下載下傳更新本地mib庫的軟體
雖然最後我會用另一台主機來進行遠端的測試,不過剛開始時,還是在服務端也把snmp用戶端軟體安裝好,友善做一些基本的測試。
執行下面的指令安裝這三個軟體:
1
<code>ubuntu@leaf:~$ </code><code>sudo</code> <code>apt-get </code><code>install</code> <code>snmpd snmp snmp-mibs-downloader</code>
需要注意的是,在安裝snmp-mibs-downloader的過程中,程式會幫我們自動下載下傳mib庫,并儲存在/usr/share/mibs目錄中:
2
<code>ubuntu@leaf:</code><code>/usr/share/mibs</code><code>$ </code><code>ls</code>
<code>iana ietf</code>
如果發現沒有些目錄或檔案的話,在安裝完snmp-mibs-downloader後也可以手動執行下面的指令來下載下傳mib庫:
<code>ubuntu@leaf:~$ </code><code>sudo</code> <code>download-mibs</code>
會有很多輸出資訊。
這樣的話,第一步安裝工作也就完成了。
2.配置
其實在安裝完snmpd軟體後,系統是為我們自動開啟了這個服務的:
<code>ubuntu@leaf:~$ </code><code>sudo</code> <code>service snmpd status</code>
<code> </code><code>* snmpd is running</code>
在開始配置前,我們先來進行一些簡單的測試,看看服務是否正常:
<code>ubuntu@leaf:~$ snmpwalk </code><code>-</code><code>v </code><code>2c</code> <code>-</code><code>c public localhost </code><code>1.3</code><code>.</code><code>6.1</code><code>.</code><code>2.1</code><code>.</code><code>1.1</code>
<code>iso.</code><code>3.6</code><code>.</code><code>1.2</code><code>.</code><code>1.1</code><code>.</code><code>1.0</code> <code>=</code> <code>STRING: </code><code>"Linux leaf 4.2.0-34-generic #39-Ubuntu SMP Thu Mar 10 22:13:01 UTC 2016 x86_64"</code>
沒有問題,有資訊傳回,那麼接下來就直接進行各種配置了,不過在開始配置前先備份一下配置檔案:
3
4
<code>ubuntu@leaf:~$ </code><code>cd</code> <code>/etc/snmp</code>
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ </code><code>sudo</code> <code>cp</code> <code>snmpd.conf snmpd.conf.ori</code>
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ </code><code>ls</code> <code>snmpd*</code>
<code>snmpd.conf snmpd.conf.ori</code>
當然,需要注意的是,後面所講的,使用的都是SNMPv2,其實這已經可以滿足我們的需求了。
(1)配置節點
修改/etc/snmp/snmpd.conf檔案,大概在45行,将下面的兩行注釋掉:
<code>view systemonly included .1.3.6.1.2.1.1</code>
<code>view systemonly included .1.3.6.1.2.1.25.1</code>
增加下面一行:
<code>view systemonly included .1</code>
這樣的話,我們就可以擷取更多的節點資訊,因為如果不這樣做,我們能夠擷取的資訊,僅僅是上面兩個注釋掉的節點所包含的資訊。
修改之後,重新開機snmp服務,再使用指令觀察一下:
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ </code><code>sudo</code> <code>service snmpd restart</code>
<code>xpleaf@leaf:</code><code>/etc/snmp</code><code>$ snmpwalk -</code><code>v</code> <code>2c -c public localhost .1.3.6.1.4.1.2021.4.3.0</code>
<code>iso.3.6.1.4.1.2021.4.3.0 = INTEGER: 1950716</code>
OK,沒有問題!不過需要注意的是,這裡.1.3.6.1.4.1.2021.4.3.0表示的是LInux主機交換空間總量的一個節點,而輸出1950716,就說明我們的主機上的交換空間總量大概就是2GB左右。
(2)配置MIB庫
雖然上面已經可以正常擷取我們想要的資訊,但是輸出結果很不直覺,這時我們配置一下MIB庫就可以了,不過需要注意的是,這個配置是對用戶端軟體的配置(隻不過現在還是在我的同一台伺服器主機上進行操作)。
修改/etc/snmp/snmp.conf配置檔案,将下面這一行注釋掉:
<code>mibs :</code>
然後重新開機snmp服務,再通過指令觀察:
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ snmpwalk -</code><code>v</code> <code>2c -c public localhost .1.3.6.1.4.1.2021.4.3.0</code>
<code>UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB</code>
可以看到,現在的輸出就非常直覺了!這樣之後,其實我們在擷取相關節點資訊時,也可以不用輸入那一長串的數字了:
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ snmpwalk -</code><code>v</code> <code>2c -c public localhost memTotalSwap.0</code>
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ snmpwalk -</code><code>v</code> <code>2c -c public localhost memTotalReal.0</code>
<code>UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB</code>
需要注意的是,現在隻是在伺服器端進行配置和測試,其實這一步的操作應該是在用戶端(另一台主機上)完成的,這裡隻是為了友善。
(3)配置共同體
其實所謂共同體,把它了解為一個密碼就行了,前面我們在使用snmpwalk指令擷取主機的資訊時,有一個-c public的參數,其實就是指定了這個共同體為public,這是預設的配置,當然在實際中,我們不可能使用預設的值,是以需要把它修改一下。
修改配置檔案/etc/snmp/snmpd.conf,大概在52行,将下面的兩行:
<code>rocommunity public default -V systemonly</code>
<code>rocommunity6 public default -V systemonly</code>
修改為:
<code>rocommunity xpleaf123 default -V systemonly</code>
<code>rocommunity6 xpleaf123 default -V systemonly</code>
那麼這裡就把共同體修改為xpleaf123了,重新開機snmp服務,通過指令觀察一下:
<code>Timeout: No Response from localhost</code>
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ snmpwalk -</code><code>v</code> <code>2c -c xpleaf123 localhost memTotalReal.0</code>
可以看到第一次擷取資訊不成功,因為我們已經更新了共同體,舊的public将不能再使用,否則認證失敗就無法擷取snmp提供的主機資訊。
(4)允許遠端主機通路
預設情況下,snmp服務隻是對本地開啟,是無法通過遠端擷取該主機的snmp資訊的:
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ </code><code>sudo</code> <code>netstat</code> <code>-antup | </code><code>grep</code> <code>161 </code>
<code>udp 0 0 127.0.0.1:161 0.0.0.0:* 11615</code><code>/snmpd</code>
可以看到,161端口隻對本機開放(161端口号是snmp服務的端口号),我們需要修改一下,讓snmp服務對外開放。
修改/etc/snmp/snmpd.conf配置檔案,大概在15行,将下面一行注釋掉:
<code>agentAddress udp:127.0.0.1:161</code>
同時去掉下面這一行的注釋:
<code>#agentAddress udp:161,udp6:[::1]:161</code>
重新啟動snmp服務,再通過指令觀察:
<code>ubuntu@leaf:</code><code>/etc/snmp</code><code>$ </code><code>sudo</code> <code>netstat</code> <code>-antup | </code><code>grep</code> <code>161</code>
<code>udp 0 0 0.0.0.0:161 0.0.0.0:* 11656</code><code>/snmpd</code>
<code>udp6 0 0 ::1:161 :::* 11656</code><code>/snmpd</code>
可以看到服務已經對外開放了,并且同時支援IPv4和IPv6。
這樣之後,我們就能在遠端主機進行測試。
3.啟動
其實前面的操作我們一直都啟動着snmp服務,不過這裡還是要確定一下:
<code>ubuntu@leaf:~$ </code><code>sudo</code> <code>service snmpd start</code>
<code>ubuntu@leaf:~$ </code><code>sudo</code> <code>netstat</code> <code>-antup | </code><code>grep</code> <code>161</code>
4.(遠端)測試
在伺服器本地我們已經做過測試,并且沒有問題,下面我們要做的是在遠端主機進行測試。
我另一台遠端主機上的作業系統也是Ubuntu 15.04,并且已經安裝了snmp用戶端軟體和mib庫下載下傳軟體,同時配置了MIB庫,下面就直接進行遠端的測試:
5
6
<code>xpleaf@leaf:~$ snmpwalk -</code><code>v</code> <code>2c -c xpleaf123 115.159.*.* memTotalSwap.0</code>
<code>xpleaf@leaf:~$ snmpwalk -</code><code>v</code> <code>2c -c xpleaf123 115.159.*.* memTotalReal.0</code>
<code>xpleaf@leaf:~$ snmpwalk -</code><code>v</code> <code>2c -c xpleaf123 115.159.*.* .1.3.6.1.4.1.2021.9.1.6.1</code>
<code>UCD-SNMP-MIB::dskTotal.1 = INTEGER: 8123832</code>
可以看到,測試完全沒有問題!并且擷取的值和前面有伺服器本地得到的一樣。
當然,如果你發現還是擷取不了的,那麼你就需要考慮一下在伺服器的主機上防火牆的設定有沒有問題了。
5.有什麼用
如果你會一門背景開發語言(比如Python),然後你的前端基礎又不錯(html、js、jquery、bootstrap、ajax等各種),基于snmp的基礎,那麼你就完全可以自己開發一款Linux主機的監控主機了,這并不難,複雜的是你需要怎麼對你的資料進行處理,而這個話就需要看每個人或每間公司的需求了。
部落客目前自己就是在做相關監控軟體的開發,隻是監控的不是Linux主機,而是其它網絡裝置,雖然也是有點小複雜,但隻要技術上的思路是對的,那麼一切就沒有問題了。
因為感覺snmp對于大部分朋友應該都很有用處,是以就寫此文分享一下,雖然隻是針對Ubuntu的
但在其它Linux發行版本上,相信也是大同小異的。還是那句話,希望能夠幫到有需要的朋友。
本文轉自 xpleaf 51CTO部落格,原文連結:http://blog.51cto.com/xpleaf/1757333,如需轉載請自行聯系原作者