首頁 > 軟體

Ubuntu上snmp安裝、設定、啟動及遠端測試完整過程

2020-06-16 17:44:26

0.說明

關於一個完整的教學,還是那句話,國內的要麼不完整,要麼就太舊了,而且思路也不清晰,所以這裡寫一篇完整的給大家分享一下。

雖然對於Linux主機的監控可以通過執行特定的命令來完成,但是相比之後,通過snmp的方式來獲取Linux主機的資訊則會更輕鬆簡單些,只不過在使用前的設定可能需要花多一點時間,不過這絕對值得!而且如果需要開發Linux主機的監控軟體,那使用snmp肯定是首選,畢竟它可以獲得的資訊太多太多!

後面的內容就來分享一下在Ubuntu上安裝、設定、啟動snmp以及進行遠端測試的完整過程。

這裡使用的作業系統為:Ubuntu 15.10

--------------------------------------------------------------------------------

1.安裝

我們需要安裝下面三個軟體包:

snmpd:snmp伺服器端軟體

snmp:snmp用戶端軟體

snmp-mibs-downloader:用來下載更新本地mib庫的軟體

雖然最後我會用另一台主機來進行遠端的測試,不過剛開始時,還是在伺服器端也把snmp用戶端軟體安裝好,方便做一些基本的測試。

執行下面的命令安裝這三個軟體:

ubuntu@linuxidc:~$ sudo apt-get install snmpd snmp snmp-mibs-downloader

需要注意的是,在安裝snmp-mibs-downloader的過程中,程式會幫我們自動下載mib庫,並儲存在/usr/share/mibs目錄中:

ubuntu@linuxidc:/usr/share/mibs$ ls

iana  ietf

如果發現沒有些目錄或檔案的話,在安裝完snmp-mibs-downloader後也可以手動執行下面的命令來下載mib庫:

ubuntu@linuxidc:~$ sudo download-mibs

會有很多輸出資訊。

這樣的話,第一步安裝工作也就完成了。

--------------------------------------------------------------------------------

2.設定

其實在安裝完snmpd軟體後,系統是為我們自動開啟了這個服務的:

12 ubuntu@linuxidc:~$ sudo service snmpd status

 * snmpd is running

在開始設定前,我們先來進行一些簡單的測試,看看服務是否正常:

ubuntu@linuxidc:~$ 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 linuxidc 4.2.0-34-generic #39-Ubuntu SMP Thu Mar 10 22:13:01 UTC 2016 x86_64"

沒有問題,有資訊返回,那麼接下來就直接進行各種設定了,不過在開始設定前先備份一下組態檔:

ubuntu@linuxidc:~$ cd /etc/snmp

ubuntu@linuxidc:/etc/snmp$ sudo cp snmpd.conf snmpd.conf.ori

ubuntu@linuxidc:/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@linuxidc:/etc/snmp$ sudo service snmpd restart

xplinuxidc@linuxidc:/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@linuxidc:/etc/snmp$ sudo service snmpd restart

ubuntu@linuxidc:/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@linuxidc:/etc/snmp$ snmpwalk -v 2c -c public localhost memTotalSwap.0

UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB

ubuntu@linuxidc:/etc/snmp$ snmpwalk -v 2c -c public localhost memTotalReal.0

UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB

其實這樣之後,你也就能夠發現使用snmp是有多麼地強大了!關於MIB庫的節點值從哪裡來,不需要去記,可以在網上找,也可以看我總結的一篇博文:《linux snmp常用結點值》,也可以在我的部落格上找:http://xplinuxidc.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 xplinuxidc123  default    -V systemonly

rocommunity6 xplinuxidc123  default  -V systemonly

那麼這裡就把共同體修改為xplinuxidc123了,重新啟動snmp服務,通過命令觀察一下:

ubuntu@linuxidc:/etc/snmp$ snmpwalk -v 2c -c public localhost memTotalReal.0

Timeout: No Response from localhost

ubuntu@linuxidc:/etc/snmp$ snmpwalk -v 2c -c xplinuxidc123 localhost memTotalReal.0

UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB

可以看到第一次獲取資訊不成功,因為我們已經更新了共同體,舊的public將不能再使用,否則認證失敗就無法獲取snmp提供的主機資訊。

(4)允許遠端主機存取

預設情況下,snmp服務只是對本地開啟,是無法通過遠端獲取該主機的snmp資訊的:

ubuntu@linuxidc:/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@linuxidc:/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@linuxidc:~$ sudo service snmpd start

ubuntu@linuxidc:~$ 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庫,下面就直接進行遠端的測試:

xplinuxidc@linuxidc:~$ snmpwalk -v 2c -c xplinuxidc123 115.159.*.* memTotalSwap.0

UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB

xplinuxidc@linuxidc:~$ snmpwalk -v 2c -c xplinuxidc123 115.159.*.* memTotalReal.0

UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB

xplinuxidc@linuxidc:~$ snmpwalk -v 2c -c xplinuxidc123 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發行版本上,相信也是大同小異的。還是那句話,希望能夠幫到有需要的朋友。

Ubuntu 安裝snmp報Unlinked OID in IPATM-IPMC-MIB: marsMIB ::= { mib-2 57 }錯誤  http://www.linuxidc.com/Linux/2015-08/122508.htm

使用 SNMP 和 Cacti 監控 Linux 伺服器  http://www.linuxidc.com/Linux/2015-07/119471.htm

在Ubuntu 14.04上設定SNMPv3  http://www.linuxidc.com/Linux/2014-10/108511.htm

Zabbix 之SNMP設定 http://www.linuxidc.com/Linux/2013-09/90263.htm

SNMP實現網路動態分析 http://www.linuxidc.com/Linux/2013-04/83514.htm

SNMP實現網路狀態監控 http://www.linuxidc.com/Linux/2013-04/83187.htm

CentOS 6.3下搭建SNMP測試環境 http://www.linuxidc.com/Linux/2013-02/79233.htm

Linux (Ubuntu/CentOS) SNMP設定 http://www.linuxidc.com/Linux/2012-12/76837.htm

開啟並設定Citrix Xenserver的SNMP服務 http://www.linuxidc.com/Linux/2013-01/78487.htm


IT145.com E-mail:sddin#qq.com