zabbix--SNMP 硬體裝置監控
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
收到trap
snmptrapd
將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個,需要不斷優化,去根據告警資訊去進行正則匹配。
缺點:
無法實時瞭解硬體裝置執行狀態,如溫度、電壓等,無法繪製視覺化大盤。