1. 程式人生 > 其它 >zabbix--SNMP 硬體裝置監控

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和內建機制之一來傳遞trapZabbix - 一個perl指令碼或SNMPTT

這裡以zabbix trap方式接收trap的工作流程作一說明:

  1. snmptrapd 收到trap
  2. snmptrapdtrap傳遞給SNMPTT或呼叫Perl trap接收器
  3. SNMPTTPerl trap接收器解析,格式化並將trap寫入檔案
  4. Zabbix SNMP trap讀取並解析trap檔案
  5. 對於每個trap,Zabbix發現主機介面與接收的trap地址匹配的所有“SNMP trap”監控項。請注意,在匹配期間只使用主機介面中選定的“IP”“DNS”
  6. 對於每個找到的監控項,將trap“snmptrap[regexp]”中的regexp進行比較。 trap設定為all匹配項的值。如果沒有找到匹配的監控項,並且有一個“snmptrap.fallback”監控項,則將trap設定為該監控項的值。
  7. 如果trap未設定為任何監控項的值,Zabbix預設記錄未匹配的trap。(通過管理 → 常規 → 其它中的“記錄未匹配的SNMP trap(Log unmatched SNMP traps)”進行配置。)

配置流程如下:

1、部署zabbix時需要開啟snmp模組,rpm包預設開啟,如果是原始碼包部署則需要加上--with-net-snmp引數;

2、找到對應硬體裝置的mib庫檔案(各個廠商的不一樣,且各個廠商的不同機型的不一樣);

3、zabbix server或者proxy部署snmpttsnmptrap

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個,需要不斷優化,去根據告警資訊去進行正則匹配。

缺點:

​ 無法實時瞭解硬體裝置執行狀態,如溫度、電壓等,無法繪製視覺化大盤。