zabbix自定义模板及preprocessing初研
近期项目中需要使用zabbix监测一些国内安全设备厂商的设备,而zabbix内置模板并不能覆盖这些设备,因此决定自定义模板来实现此需求。在实现过程中发现一些值得注意的地方,在这里与大家分享,一些不足之处也希望各位同学不吝赐教。OK,闲话不多说,进入正题!
1.MIB库及工具准备
三军未动,粮草先行!要对设备进行监测,必要的准备工作还是很有必要的。本次监测涉及到国内某石和某服的设备,某石设备的MIB库需要打400获取,某服则可以在设备SNMP配置页面直接下载获取。MIB库读取我使用MIB Browser,当然其他工具也是可以的,看个人习惯了!
MIB浏览
拿到MIB库,必要的测试还是要做的,这个MIB的内容不是特别多,也比较好理解
指标名称和OID对应关系
如上图中,对应的分支代表磁盘使用率,在zabbix服务器上执行以下命令,可以看到取数结果(注意:这里有坑,一会还会提到)
[root@wgxt wqy-microhei]# snmpwalk -c public -v 2c 192.168.1.2 1.3.6.1.4.1.35047.1.5.1.6 SNMPv2-SMI::enterprises.35047.1.5.1.6.1 = STRING: "25%" SNMPv2-SMI::enterprises.35047.1.5.1.6.2 = STRING: "2%" SNMPv2-SMI::enterprises.35047.1.5.1.6.3 = STRING: "25%" SNMPv2-SMI::enterprises.35047.1.5.1.6.4 = STRING: "6%" SNMPv2-SMI::enterprises.35047.1.5.1.6.5 = STRING: "1%" SNMPv2-SMI::enterprises.35047.1.5.1.6.6 = STRING: "10%" SNMPv2-SMI::enterprises.35047.1.5.1.6.7 = STRING: "18%" SNMPv2-SMI::enterprises.35047.1.5.1.6.8 = STRING: "68%" SNMPv2-SMI::enterprises.35047.1.5.1.6.9 = STRING: "89%" SNMPv2-SMI::enterprises.35047.1.5.1.6.10 = STRING: "6%" SNMPv2-SMI::enterprises.35047.1.5.1.6.11 = STRING: "1%" SNMPv2-SMI::enterprises.35047.1.5.1.6.12 = STRING: "90%" SNMPv2-SMI::enterprises.35047.1.5.1.6.13 = STRING: "10%" SNMPv2-SMI::enterprises.35047.1.5.1.6.14 = STRING: "0%"
2.通过模板配置
基本测试完成后,我们创建新的模板,这里首先可以链接一个通用模板,“Template Module Generic SNMP”。这个模板主要采集一些设备名称、启动时间、可用性等指标,都是通用的,可以直接复用。
通用模板
除了这个模板外,其他的就建议自建了,这里我主要是新建了接口模板和磁盘模板,接口虽然也属于共有MIB,但和内置的模板OID有区别。为了方便,我直接将默认的接口模板克隆,形成新的模板。这个模板中,核心其实就是自动发现规则。
自建自动发现规则
这里需要修改的“SNMP OID”这一行中的配置,我用到的不多,只有两个参数,如果你需要更多,在MIB库中查找就行。这里把过滤器都删除了,安全设备没那么多复杂的接口。不过,可以考虑将状态为down的过滤掉,看个人了。
这个地方不知道大家能看懂吗?可能初步接触zabbix的会有些困难,啰嗦两句!我们通过这个配置项,其实是同时获取了{#SNMPINDEX}这个变量对应的值,直白点说叫索引,或者是指标列表都可以。举个栗子,设备有10个接口,这里就是获取到这10个接口的编号,类似于下图框中的部分
{#SNMPINDEX}示例
这样在创建监控原型的时候,我们只需要关注这个指标OID的相同部分就行,不管有多少个端口都能自动填充形成每个接口的OID完整形式。针对不同的监控指标,我们也只需要修改下图框中的OID和键值就可以了,自动发现的魅力所在啊!
指标OID
现在我们配置完成了基础发现规则和监控原型,可以说基本的取数已经完成。当然,还有一些需要核对的细节,比方说指标对应的类型、单位,上图中类型为数字,单位是bps,其他指标可能是其他类型和单位,一定要根据MIB库的描述修改一下。如果MIB库中的也没有,可以咨询厂商或者自己测试一下这个指标的单位到底是什么。
3.数值类型转换
在上一步中我们是以接口速率为例说明的,这里大部分取值结果是纯数字,并不会出现问题。但有时取出来的值并不是数值型,就像我们之前取的磁盘利用率,数值后面还带的%。这样的话如果类型选为字符型,那么系统并不会报错。但如果选为数字那边系统就会提示类似于“Value of type "string" is not suitable for value type "Numeric ...”的报错信息。那么,这里就需要用到“进程”功能进行转换。
preprocessing实现类型转换
这里我用到了正则表达式,系统本身支持的非常多,可惜我不懂!!!还是就说下正则吧,以50%转换为例,我用到的参数是^(.*)%$,意思是以%结尾的,%前的所有数值。后面\1代表获取第一个返回值,也就是第一个()中的值50,如果有多个(),那后面使用\2、\3之类的获取就行。
在该页面中直接测试会提示“cannot perform regular expression "^(.*)%$" match for value of type "string": pattern does not match”,这是由于该页面测试没有获取值,可以保存后直接在数据查看页面看效果,也可以在下图箭头指向的框中填入类似的结果值来进行测试。
测试报错,不要紧!
其他需要自动发现的指标添加方法类似,这里就不赘述了。当然,如果有个别指标不需要自动发现,也可以在模板中直接添加。还有一个需要注意的点就是,我们添加了单个指标的监控项,通过snmpwalk可以获取到该OID对应的数据,但在页面中提示“No Such Instance currently exists at this OID”,这时需要在最后面加个.0才可以获取到数据。
加0测试有惊喜
4.触发器
下面需要完善的就是触发器了,不得不说系统内置的触发器还是比较复杂的,我自建的触发器则粗狂了太多(其实是复杂的我也不会$%^)。以CPU负载为例,很简单的一个触发和恢复,大家欣赏一下。
复杂的不会就来个low的
OK!到这里算是整个配置流程结束了,总体来说获取数据问题不大,需要完善的地方很多,算是给大家抛砖引玉了,大家如果有啥好的想法也欢迎评论,谢谢各位!
- 点赞
- 收藏
- 关注作者
评论(0)