今天的主题是官方模板的自动发现规则分析,在监控工作中常常会遇到一些可变化的OID值,也就是父OID+索引,而索引本身是变化的,如果监控设备数量固定,一个个写问题不大,但在规模增加到一定程度手动添加已然不现实,而且不太灵活,所以官方在2.X版本后新增加自动发现规则功能。
正文
在开始之前呢,首先我们要了解什么样的情况下需要用到自动规则,我举个例子,以端口名称为例。OID为1.3.6.1.2.1.31.1.1.1.1,该OID解释如下。
OID介绍
用snmpwalk测试,顺带还是提下snmpwalk的使用方法吧,斜体为变量,也就是你自己的环境
snmpwalk -v snmp版本 -c 团体字密码 IP地址 OID,如果没有snmpwalk,CentOS需要装net-snmp-utils,ubuntu环境需要装snmp。
snmwalk -v 2c -c huawei@123 10.240.43.2 1.3.6.1.2.1.31.1.1.1.1
通过上图我们看到查询的结果有59条规则,如果用这个OID去加监控项一定有问题,得出是多个值,所以根本就不知道要检查什么。所以自动发现规则应运而生。
Interfaces SNMP
Zabbix 5.2版本模板名称叫Inerface SNMP,如果是5.2以下(不包含5.2)叫Template Module Interfaces SNMPv2。自动发现规则(Discover rules)位置如下图红框所示。
进入到该规则里
自动发现规则的内容与监控项很类似,需要注意的是SNMP OID项的固定格式
discovery[{#MACROS1},OID1,{#MACROS2},OID2....]
- 名字(Name):自定义即可
- 类型(Type):选择SNMP AGENT
- 键值(Key):其实也可以随便写,方便记,但是在同一台设备里必须要保持唯一性。
- SNMP OID:简单来说就是设备里各个组件的编码,例如windows里的注册表
- 更新周期(Update interval):多久更新一次,如果监控项需要发现,可以在被监控主机里点击恶心excute now。
- 自定义时间间隔(Custom intervals):可以更加灵活的控制更新
- 资源周期不足(Keep lost resources period):这个中文翻译有点问题,这里的意思是代表如果该监控选项无法发现了,什么时候取消监控,如下图二
页面内容
出现监控项无法自动发现保留周期
宏(Macros)
宏其实一直是zabbix比较关键的点,类似变量,格式为{$MACROS},值可以为文本,也可以为正则表达式,宏的名称也可自己随便取,例如下方的{$NET.IF.IFNAME.MATCHES}可以写成{$IFNAME.MATCHES},后面的取值就随意了,根据不同功能写,例如这里的{$NET.IF.IFNAME.MATCHES}对应的应该是接口名称,如果我只想匹配g0/0/1口,值就是g0/0/1,如果想匹配所有的g口,那值就是^g,关于正则表达式可以去百度上搜,有很多教程,不需要太复杂,能用就行。
该模板宏一览
过滤器(Filters)
上篇我们讲过,过滤器主要用于过滤一些不想要的规则,组成部分也很简单,就计算类型和宏。那么我们来解析下该模板里的过滤器,一共包含12个(正反6类)分别是
- {#IFADMINSTATUS}(端口管理状态):是否为admin down
{#IFALIAS}(端口描述)
{#IFDESCR}(端口名称)
{#IFNAME}(端口名称):这个和上面的重复了,理论上可以不要
{#IFOPERSTATUS}(端口状态):down还是up
{#IFTYPE}(端口类型):是千兆口还是百兆口还是vlan啥的,文末我会贴出该例子的OID详细解释。
那么为什么需要用到这么多参数,其实挺简单的,都是为优化监控项服务的,当然如果你的网络设备配置都是标准化,那就没这么折腾了,例如你的交换机上联口都是固定的,那么过滤就只需要一项,{#IFNAME}的宏取值只用写该端口即可。但是如果是非标,那么这些就大有用处了,你发现少一项就感觉很困难,我们一般筛选相关端口通过这4个维度
- 端口名称
- 端口类型
- 端口描述
- 端口状态
所以从这个角度思考,官方这个模板的自动发现规则的过滤器还是比较合理的。
过滤器一览
监控原型
监控原型里面对的就是生成相对应的监控项,原版有9个,和端口相关指标息息相关,分别是端口入出流量、端口类型、端口状态,端口入出错包、端口入出丢包、端口速率,其中个人感觉端口类型没有什么太大必要,当然有需要的可以监控起来。
原版监控原型一览
以Interface {#IFNAME}({#IFALIAS}): Bits received这个为例,需要注意的是Key和SNMP OID都带有{#SNMPINDEX}。
官方模板监控项原型一览
通过主机上查看该接口,有一段描述,ifindex:5
主机获取
通过snmpwalk原OID+5可以获取到该接口的信息,那么到这里是不是就明白了自动发现规则的原理,其实zabbix里隐藏了两个宏,一个叫{#SNMPINDEX},一个叫{#SNMPVALUE},其中snmpindex就是这些具备同OID多个取值后的索引,而SNMPVALUE就是这些多个索引对应的取值,以下图为例,5为索引,10GE1/0/1为该索引的SNMPVALUE。Zabbix就是利用这个实现了自动发现规则的功能,当然代码级别实现肯定不会这么简单,但你要清楚前端的逻辑是什么,其次键值为什么要加这个,还记得我当初说的键值在同主机下要唯一,所以加上了该宏,保持键值唯一,其他的内容就基本没啥讲的
最终效果
最终发现效果
总结
写了这么多,其实也为后面的制作自动规则服务的,其实大家可以大概的了解是怎么回事了,包括应用场景,可以想到还有框式设备多板卡,多CPU、Wlan等等,可以自己尝试写这些自动发现规则,简单来说流程是找到相对应的OID---监控指标确定---宏的定义---定义过滤器的规则---创建自动发现规则---创建监控原型---创建触发器---创建图形,最后用在设备里。还是那句话:路漫漫其修远兮,吾将上下而求索,我是IT小白Kasar,下期见!(下期制作自动发现规则)
附录
ifName
ifHCInOctets
ifHCOutOctets
ifAlias
ifDescr
ifType
ifSpeed
ifInDiscards
ifInErrors
ifOutDiscards
ifOutErrors