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