在Zabbix 7.0.0版本之后,"SNMP代理"监控项类型中的SNMP OID参数增加了walk[OID1,OID2]的功能。这个新功能允许用户通过一个OID来获取一系列的OID值。例如,如果你想获取IP路由表的信息,你可以使用如下的OID:".1.3.6.1.2.1.4.22"。在Zabbix 7.0.0之前的版本中,你需要为每一种类型的路由(例如,路由目的地、路由源、路由度量等)创建单独的监控项。但在Zabbix 7.0.0及之后的版本中,你可以使用walk功能,并且只需要创建一个监控项,如下所示:
walk[.1.3.6.1.2.1.4.22]
这样Zabbix就会自动遍历.1.3.6.1.2.1.4.22下的所有OID,并且为每一个OID收集数据。
需要注意的是,使用walk可能会导致Zabbix向SNMP设备发送大量的请求,这可能会影响网络性能。因此,在使用walk之前,你应该确保你的网络设备和SNMP设备可以处理这种类型的请求。
本文主要介绍一个使用“walk[OID1,OID2,...]”请求方式的例子。
本次实验环境如下:
操作系统版本:Anolis OS 8.8
操作系统内核信息:Linux localhost 4.18.0-477.36.1.0.1.an8.x86_64 #1 SMP Thu Dec 28 06:29:01 CST 2023 x86_64 x86_64 x86_64 GNU/Linux
Zabbix版本:7.0.3
本次实验需要预先给被监控设备配置好SNMP。
安装SNMP服务:
yum -y install net-snmp net-snmp-utils
备份SNMP配置:
cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
修改SNMP配置:(此操作会覆盖/etc/snmp/snmpd.conf文件)
> /etc/snmp/snmpd.conf ; cat > /etc/snmp/snmpd.conf<<EOF rocommunity CXH-SNMP-COMMUNITY group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser access notConfigGroup "" any noauth exact all none none view all included .1 80 syslocation Unknown (edit /etc/snmp/snmpd.conf) syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf) dontLogTCPWrappersConnects yes EOF
注: rocommunity:允许IP根据团体名以只读方式获取snmp数据,格式为:
rocommunity 团体名 Zabbix服务器IP地址(不填默认为允许全部)
例如:rocommunity CXH-SNMP-COMMUNITY 10.245.119.44
重启SNMP服务:
service snmpd restart
可选:确认防火墙是否放通了UDP 161端口。
可选:验证SNMP配置是否可用
snmpwalk -v 2c -c CXH-SNMP-COMMUNITY 127.0.0.1 system
添加一个SNMP类型的接口,使用Zabbix自带的“Linux by SNMP”模板,SNMP版本选择SNMP v2c,SNMP community默认写{$SNMP_COMMUNITY},最大重复次数默认为10。
切换到宏标签页,新增一个主机宏,宏名字:{$SNMP_COMMUNITY}、宏值:CXH-SNMP-COMMUNITY
等待一段时间后,可在最新数据界面查看监控效果:
以网卡信息的获取作为例子:
1、先有一个获取所有数据的WALK监控项,监控项名称:“Linux: SNMP walk network interfaces”
SNMP OID填写的内容为:walk[1.3.6.1.2.1.2.2.1.8,1.3.6.1.2.1.2.2.1.7,1.3.6.1.2.1.31.1.1.1.18,1.3.6.1.2.1.31.1.1.1.1,1.3.6.1.2.1.2.2.1.2,1.3.6.1.2.1.2.2.1.3,1.3.6.1.2.1.31.1.1.1.6,1.3.6.1.2.1.31.1.1.1.10,1.3.6.1.2.1.2.2.1.14,1.3.6.1.2.1.2.2.1.20,1.3.6.1.2.1.2.2.1.19,1.3.6.1.2.1.2.2.1.13,1.3.6.1.2.1.31.1.1.1.15]
以上OID均为网卡的监控指标OID。
比如1.3.6.1.2.1.2.2.1.8,获取的是网卡管理状态,结果的1表示开启状态。
该监控项的数据包括了后续需要监控的所有网卡信息,数据例子:
.1.3.6.1.2.1.2.2.1.13.1 = Counter32: 0
.1.3.6.1.2.1.2.2.1.13.2 = Counter32: 0
.1.3.6.1.2.1.2.2.1.14.1 = Counter32: 0
.1.3.6.1.2.1.2.2.1.14.2 = Counter32: 0
.1.3.6.1.2.1.2.2.1.19.1 = Counter32: 0
.1.3.6.1.2.1.2.2.1.19.2 = Counter32: 0
.1.3.6.1.2.1.2.2.1.2.1 = STRING: "lo"
.1.3.6.1.2.1.2.2.1.2.2 = STRING: "ens33"
.1.3.6.1.2.1.2.2.1.20.1 = Counter32: 0
.1.3.6.1.2.1.2.2.1.20.2 = Counter32: 0
.1.3.6.1.2.1.2.2.1.3.1 = INTEGER: 24
.1.3.6.1.2.1.2.2.1.3.2 = INTEGER: 6
.1.3.6.1.2.1.2.2.1.7.1 = INTEGER: 1
.1.3.6.1.2.1.2.2.1.7.2 = INTEGER: 1
.1.3.6.1.2.1.2.2.1.8.1 = INTEGER: 1
.1.3.6.1.2.1.2.2.1.8.2 = INTEGER: 1
.1.3.6.1.2.1.31.1.1.1.1.1 = STRING: "lo"
.1.3.6.1.2.1.31.1.1.1.1.2 = STRING: "ens33"
.1.3.6.1.2.1.31.1.1.1.10.1 = Counter64: 10994836576
.1.3.6.1.2.1.31.1.1.1.10.2 = Counter64: 162165980
.1.3.6.1.2.1.31.1.1.1.15.1 = Gauge32: 10
.1.3.6.1.2.1.31.1.1.1.15.2 = Gauge32: 1000
.1.3.6.1.2.1.31.1.1.1.18.1 = STRING: ""
.1.3.6.1.2.1.31.1.1.1.18.2 = STRING: ""
.1.3.6.1.2.1.31.1.1.1.6.1 = Counter64: 10994836576
.1.3.6.1.2.1.31.1.1.1.6.2 = Counter64: 1070646749
2、创建一个自动发现规则,类型为:“相关项目”,主要项为第一步的WALK监控项。
通过增加预处理的方式,将文本数据转为json数据,并将需要复用的数据设置为自动发现的宏,这里设置的宏可以用于后续添加的监控项原型和过滤器。
点测试所有步骤后,可查看生成的自动发现规则需要的json格式数据,其中同样会默认增加{#SNMPINDEX}宏,用于后续配置的监控发现原型。
可选:设置过滤规则,可以考虑过滤关闭的网卡或者lo名称的网卡:
3、创建监控项原型,类型为:“相关项目”,主要项为第一步的WALK监控项。
值映射为可选的设置,上图的指标为网卡的管理状态,返回的数据一般是1或2,因此可以将1映射为up、将2映射为down,提高可读性。
配置预处理,提取对应的数据。
参数例子:1.3.6.1.2.1.2.2.1.8.{#SNMPINDEX} ,其中{#SNMPINDEX}为自动发现规则默认生成的索引值。
4、后续的步骤跟以前的SNMP配置一样,可选设置触发器和图形原型。
错误信息