SNMP協議
介紹
簡單網絡管理協議(SNMP:Simple Network Management Protocol)是由互聯網工程任務組(IETF:Internet Engineering Task Force )定義的一套網絡管理協議。該協議基於簡單網關監視協議(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一個管理工作站可以遠程管理所有支持這種協議的網絡設備,包括監視網絡狀態、修改網絡設備配置、接收網絡事件警告等。 雖然SNMP開始是面向基於IP的網絡管理,但作為一個工業標准也被成功用於電話網絡管理。
組成

SNMP Agent:負責處理snmp請求,主要包括get、set等操作。可通過此接口查詢設備的運行狀態(使用較多),或者變更配置(使用較少),默認使用UDP 161端口;
SNMP Trap:snmp通知消息,主動發送消息到管理端。如設備故障,端口down等都會實時發送消息到接收端。默認使用UDP 162端口;
SNMP MIB:MIB代表管理信息庫,是按層次結構組織的信息的集合,定義了設備內被管理對象的屬性。
方式一 SNMP Oid
說明
通過
snmp oid的方式進行硬件設備的狀態監控。其所使用的為snmp agent get的方式去獲取硬件設備的狀態,所使用端口默認為161端口。部署流程如下:1、部署
zabbix時需要開啟snmp模塊,rpm包默認開啟,如果是源碼包部署則需要加上--with-net-snmp參數;2、找到對應硬件設備的
oid文檔(各個廠商的不一樣,且各個廠商的不同機型的不一樣,甚至同一機型的不同hdm版本也會存在oid不一致的情況);3、首先被監控的硬件設備上開啟
snmp服務,設定所使用的snmp協議(目前廣泛使用的是2c),設定團體字;4、配置安全策略,允許
zabbix server或者proxy訪問被監控設備的161端口;5、
zabbix server或者proxy上安裝snmp服務工具(如net-snmp工具),進行測試對應oid是否可以正常獲取數據;6、
zabbix上主機添加,oid監控項添加、觸發器添加等(這里一般設置為對應設備的模板)。
示例
這里以監控硬件服務器(浪潮SA5212M5)示例
配置團體字
登陸需要被監控的硬件服務器的帶外,配置snmp團體字。

測試連通性
zabbix server或者proxy安裝測試工具測試是否可以獲取數據,這里使用
snmpwalk進行測試,軟件包名:net-snmp-utils官網下載地址:http://www.net-snmp.org/download.html
可以直接通過yum進行安裝,也可以通過官網下載進行安裝。
1、添加epel源
# yum install epel-release -y
2、安裝net-snmp-utils
# yum install net-snmp-utils -y
3、根據獲取到的oid進行測試是否可以獲取到數據,比如這里獲取機器的開關機狀態
# snmpwalk -v 2c -c Tencent@22 10.55.128.1 1.3.6.1.4.1.37945.2.1.2.13.1.1.1
SNMPv2-SMI::enterprises.37945.2.1.2.13.1.1.1.0 = STRING: "Power On"
snmpwalk命令格式及參數說明:
snmpwalk -v snmp協議版本 -c 團體字名 目標IP地址 OID號
注意:如果指定具體OID號,則獲取所有OID信息
zabbix添加主機
添加主機 【配置】——>【主機】——>【創建主機】

設置相關信息(所屬主機組、interface等,然后點擊添加)

創建監控項
創建監控項【配置】——>【主機】——>(找到上面創建的主機點擊進入)——>【監控項】——>【創建監控項】


驗證最新數據(查看最新獲取的數據是否為想要的信息及是否能正常拿到數據)【監測】——>【最新數據】

創建觸發器
創建觸發器【配置】——>【主機】——>(找到上面創建的主機點擊進入)——>【觸發器】——>【創建觸發器】



添加結果如下圖所示:

到此,基於一個snmp oid的監控項即配置完成。
模板制作
一般生產環境下,如果采用
snmp agent的方式對硬件設備的監控,都會對一個廠商的對應設備所關注的oid監控值創建一個模板(避免成百上千的機器添加還需要一個一個去配置監控項等),然后再通過zabbix提供的API接口進行批量主機的添加並綁定該模板。如下:
Template Module Inspur SERVER-NAME SA5212M5 SNMP模板,對浪潮SA5212M5機型制作的模板,包含了11個監控項、以及16個自動發現規則。用於對服務器硬件(CPU、內存、磁盤、風扇、電源、控制器、Raid)等狀態進行了監控。

告警信息展示:
總結
基於snmp agent oid方式進行硬件設備的監控,有以下幾個優缺點:
優點:
1、監控數據信息全面,可以獲取到很多控制器的狀態、溫度、服務器基本信息等指標。
2、可以根據獲取到的指標繪制對應可視化大盤等。及時了解硬件組件的各個狀態。
缺點:
介於國內各廠商的oid不統一(甚至各廠商的不同型號的服務器oid、同一型號服務器不同hdm版本oid也不統一)的情況下,如果一個項目采用了不同廠商不同型號的硬件設備,則需要去配置不同的監控模板(配置一個模板,需要對對應oid文檔每個去核對其值以及數據類型),這樣工作量就會變得巨大。
方式二 SNMP Trap
說明
通過
snmp trap的方式進行硬件設備的狀態監控。其本質並不是去獲取硬件設備指標的詳細數據,而是通過接收硬件設備自帶的snmp trap告警機制接收硬件設備發出的異常告警通知,再交由zabbix進行處理並發送出來。如果有郵件服務器且不需要使用zabbix,而是直接使用郵件服務器發出告警信息進行通知。在
Zabbix中接收SNMP trap旨在使用snmptrapd和內置機制之一來傳遞trap到Zabbix- 一個perl腳本或SNMPTT。這里以
zabbix trap方式接收trap的工作流程作一說明:
snmptrapd收到trapsnmptrapd將trap傳遞給SNMPTT或調用Perl trap接收器SNMPTT或Perl trap接收器解析,格式化並將trap寫入文件Zabbix SNMP trap讀取並解析trap文件- 對於每個
trap,Zabbix發現主機接口與接收的trap地址匹配的所有“SNMP trap”監控項。請注意,在匹配期間只使用主機接口中選定的“IP”或“DNS”。- 對於每個找到的監控項,將
trap與“snmptrap[regexp]”中的regexp進行比較。trap設置為all匹配項的值。如果沒有找到匹配的監控項,並且有一個“snmptrap.fallback”監控項,則將trap設置為該監控項的值。- 如果
trap未設置為任何監控項的值,Zabbix默認記錄未匹配的trap。(通過管理 → 常規 → 其它中的“記錄未匹配的SNMP trap(Log unmatched SNMP traps)”進行配置。)配置流程如下:
1、部署
zabbix時需要開啟snmp模塊,rpm包默認開啟,如果是源碼包部署則需要加上--with-net-snmp參數;2、找到對應硬件設備的
mib庫文件(各個廠商的不一樣,且各個廠商的不同機型的不一樣);3、
zabbix server或者proxy部署snmptt和snmptrap;4、轉換
mib文件;5、被監控設備上配置
snmp trap接收地址;6、
zabbix server或者proxy讀取接收trap文件並創建主機及創建接收監控項;7、根據監控項配置告警策略。
示例
這里以監控硬件服務器(浪潮NF8260M5)為例
安裝snmptt
1、添加epel源
# yum install epel-release -y
2、安裝snmptt及相關軟件
# yum install snmptt perl-Sys-Syslog perl-DBD-MySQL -y
轉換MIB文件
snmptt提供了snmpttconvertmib工具,snmpttconvertmib是一個Perl腳本,它將讀取MIB文件並將TRAP-TYPE(v1)或NOTIFICATIONATION-TYPE(v2)定義轉換為SNMPTT可讀的配置文件,從而實現對trap消息的翻譯。
1、上傳對應硬件設備的mib庫到服務器,並放置到/usr/share/snmp/mibs/目錄(centos7默認的mibs文件路徑,放置此處方便統一管理)
# cp inspurAlert_v2.3_20190520.mib /usr/share/snmp/mibs/
2、進行轉換
/usr/bin/snmpttconvertmib --in=/usr/share/snmp/mibs/inspurAlert_v2.3_20190520.mib --out=/etc/snmp/snmptt.conf.inspur --net_snmp_perl
- --in:表示mib源文件
- --out:表示輸出文件的地址
輸出結果如下所示,表示轉換成功:

3、轉換文件的修改,由於這里轉換出來的為標准文件,不符合zabbix snmptrap文件格式,因此還需要執行以下命令對配置文件進行稍加修改。
# ll /etc/snmp/snmptt.conf.inspur
-rw-r--r-- 1 root root 1234142 Mar 21 12:18 /etc/snmp/snmptt.conf.inspur
# sed -i 's/FORMAT/FORMAT ZBXTRAP $aA/g' /etc/snmp/snmptt.conf.inspur
其實就是添加一個ZBXTRAP字符,否則會導致后續配置時候zabbix server日志出現如下錯誤
25926:20220322:172836.320 invalid trap data found "Tue Mar 22 17:28:34 2022 inspurServerTRAPObject Normal "Status Events" UNKNOWN - 2022-03-22 09:18:39 Inspur NF8260M5 SNMPTrap_test Platform Alert 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Information 219636054 Info SNMPTrap Test Event
補充說明:
由於某些設備的mib可能有多個,建議轉換為一個配置文件中,便於管理,這樣可以使用下面的批量命令進行轉換
for i in inspurAlert* do /usr/bin/snmpttconvertmib --in=$i --out=/etc/snmp/snmptt.conf.inspur --net_snmp_perl; done
配置snmptt
snmptt配置文件有2個:
- /etc/snmp/snmptt.ini:snmptt主配置文件
- /etc/snmp/snmptt.conf:系統默認的策略文件,包括一些基本的端口up/down的配置
修改snmptt.ini添加上面生成的/etc/snmp/snmptt.conf.inspur
# vim /etc/snmp/snmptt.ini
mode = standalone
net_snmp_perl_enable = 1
date_time_format = %Y/%m/%d %H:%M:%S
translate_log_trap_oid = 2 # 0:數字形式顯示OID,1:顯示OID名稱,2:顯示OID所屬模塊名及其名稱
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt.conf.inspur
END
安裝snmptrap
該軟件包同樣在epel源中有。
# yum install -y net-snmp net-snmp-utils net-snmp-perl net-snmp-libs net-snmp-agent-libs net-snmp-devel
配置snmptrap
Snmp trap消息為主動通知,因此需要配置服務器來接收設備發送過來的snmp trap消息。net snmp接收trap消息后,通過traphandle調用snmptt來對trap消息進行處理。
1、修改/etc/sysconfig/snmptrapd文件
# vim /etc/sysconfig/snmptrapd
OPTIONS="-m +ALL -On"
2、修改/etc/snmp/snmptrapd.conf配置文件(authCommunity可以配置多個)
# vim /etc/snmp/snmptrapd.conf
authCommunity execute public
traphandle default /usr/sbin/snmptt
3、啟動snmptrap服務並加入開機啟動
# systemctl enable snmptrapd --now
4、驗證狀態
# systemctl status snmptrapd
● snmptrapd.service - Simple Network Management Protocol (SNMP) Trap Daemon.
Loaded: loaded (/usr/lib/systemd/system/snmptrapd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-03-22 16:17:04 CST; 2s ago
Main PID: 7158 (snmptrapd)
CGroup: /system.slice/snmptrapd.service
└─7158 /usr/sbin/snmptrapd -m +ALL -On -f
Mar 22 16:17:04 zabbix-server systemd[1]: Starting Simple Network Management Protocol (SNMP) Trap Daemon....
Mar 22 16:17:04 zabbix-server snmptrapd[7158]: NET-SNMP version 5.7.2
Mar 22 16:17:04 zabbix-server systemd[1]: Started Simple Network Management Protocol (SNMP) Trap Daemon..
被監控設備配置trap
1、通過登陸帶外,配置snmp trap


2、觀察snmptt日志,驗證是否可以接收到消息

Zabbix配置
修改zabbix server配置文件或者proxy配置文件,開啟snmptrapper處理
1、配置文件修改
# vim /etc/zabbix/zabbix_server.conf
SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1
2、重啟zabbix server
# systemctl restart zabbix-server
配置snmptrap item
在zabbix上添加一個主機
1、添加主機

2、添加監控項,找到上面創建的主機,點擊進去,創建一個監控項

3、驗證是否zabbix是否收到信息(在被監控設備上發出測試告警信息)

配置觸發器
說明:這里名稱采用了zabbix的宏變量及使用了正則對告警信息中的內容進行提取。
問題表現形式:通過在最新的數據中(字符串)查找Critical,如果找到了則進行告警信息發生。
恢復表達式:通過在最新的數據中(字符串)查找Recovery,如果找到了則表示該告警恢復。

告警信息展示:
總結
基於snmp trap方式進行硬件設備的監控,有以下幾個優缺點:
優點:
1、配置相對簡單,只需配置一個監控項,但是觸發器需要配置n個,需要不斷優化,去根據告警信息去進行正則匹配。
缺點:
無法實時了解硬件設備運行狀態,如溫度、電壓等,無法繪制可視化大盤。
