1. 概述
zabbix采集數據方式:
- 基於專用agent
- 基於SNMP,net-snmp (nms/agent架構)
- 基於腳本(ssh)
如果我們需要監控打印機、路由器、UPS等設備,肯定不能使用zabbix agentd,因為它們不能安裝軟件的,但是它們一般都支持SNMP協議,這樣我可以使用SNMP來監控他們。
如果你希望使用SNMP agent來獲取這些設備的信息,那么在安裝zabbix server的時候你需要增加snmp的支持。
備注:SNMP檢查基於UDP協議
注意事項
- 如果監控基於SNMPv3協議的設備,確保msgAuthoritativeEngineID(通常叫做snmpEngineID 或“Engine ID”)是唯一的
- 以前SNMPv3協議只支持MD5和DES加密,從zabbix 2.2開始支持SHA與AES加密協議
2. 配置SNMP監控
使用SNMP來監視設備,需要完成以下步驟
2.1. 創建主機
創建一個使用SNMP接口的主機,創建主機過程中你可以選擇相應的模板,路由器、交換機這些設備的監控itme,zabbix已經默認自帶了。
2.2. 找出你想監控的SNMP字符串(或者OID)
如果你想獲取SNMP字符串,你可以使用命令snmpwalk來實現,當然在安裝zabbix的時候你需要增加snmp的支持
1
|
# snmpwalk -v 2c -c public .
|
2c表示SNMP標准版本
snmp推出了v1,v2,v3版本,你也可以 寫成1,表示使用1版本.上面的命令會獲取到一個SNMP的列表,包含鍵值,
默認情況下我們snmp不加密,使用public作為共同體即可,這些列表中有你需要的一些監控數據.但是線上環境我們不可能獲取所有的鍵值
如果需要獲取特定的數據,例如像獲取交換機第三個端口的入口流量,需要使用IF-MIB::ifInOctets.3字符串,如下:
1
|
IF-MIB::ifInOctets.3 = Counter32: 3409739121
|
然后使用snmpget命令來獲取IF-MIB::ifInOctets.3的OID。命令如下
1
|
# snmpget -v 2c -c public -On 10.62.1.22 IF-MIB::ifInOctets.3
|
最后一個數字3表示端口3,如果你想監控端口23那就寫上23. 請參考: Dynamic indexes.
會輸出如下值:
1
|
.1.3.6.1.2.1.2.2.1.10.3 = Counter32: 3472126941
|
同理,OID的最后一個數字3表示端口號,要特別注意的是3COM的端口號1是101,3是是103,但是cisco還是不變,1號還是數字1.
2.3 創建監控項item
回 到zabbix的主機列表中,在你需要配置的主機那行,點擊監控項item,在右上角點擊“create item”,和普通的監控項創建方法差不多,僅有幾個地方不同,type選擇SNMP v2或者v1,v3,一般選擇v2,snmp community使用默認的public,port不填寫默認為161. SNMP OID寫上OID。然后其他內容和其他item type一樣,然后保存即可。最后去看看是否獲取到了數據。
3. 簡單實例
參數:
- Community:public
- OID:1.2.3.45.6.7.8.0 (or .1.2.3.45.6.7.8.0)
- Key: 例如sysName等
OID可以寫數字也可以使用字符串. 然而,一些項目中,字符串OID需要轉為數字格式,我們可以使用命令snmpget來獲取,如下命令:
1
|
# snmpget -On localhost public enterprises.ucdavis.memory.memTotalSwap.0
|

其他:
- 如果想使用snmp來監控,從源碼編譯安裝zabbix,一定要加上編譯參數--with-net-snmp
- 從zabbix 2.2.3開始server和proxy都支持使用單個請求獲取多個值