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收到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#
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个,需要不断优化,去根据告警信息去进行正则匹配。
缺点:
无法实时了解硬件设备运行状态,如温度、电压等,无法绘制可视化大盘。





















浙公网安备 33010602011771号