zabbix 自动发现/自定义宏

hi,大家好,今天给大家分享的是 zabbix监控服的Discovery 自动发现规则以及自定义宏操作,
之前入过坑,结果是 自动发现没有报错,就是监控项没有发现出来,今天整理了一下资料,帮你们解坑

自定义宏(多个宏)

1:创建模版
这里写图片描述

2:点击模版中的自动发现规则,当我们创建完之后,一系列之后,这个模版就可以链接和引入了,此时他就算是一个自动发现的模版了
这里写图片描述

3:创建自动发现宏值,key已经定义好,
这里写图片描述
匹配宏
这里写图片描述
注意return_value 里面的格式很严格。必须是json格式,而且我我今天分享的是双个宏,说白了是两个变量,格式很严格,脚本如下
这里写图片描述
这里写图片描述
以上是输出结果,这个结果在页面上 就代表两个变量了,以此类推 他可以创建的监控项是2*2

4:创建监控项原型
这里写图片描述
这里写图片描述
这里面我们用上了之前用的变量 这样的话 监控项变量 就会变为定义好的value
run[*] key脚本如下,传入两个值,输出两个数字的结果,我们的两个宏也是两个数字这样正好传入
这里写图片描述

5:查看结果
这时已经定义完成,为了方便演练 我并没有做触发器 只给大家看效果。,!
这里写图片描述
此时基本完成,只要在主机上 链接模版,或者模版上直接添加主机 就可以看到主机项的自动发现效果

任何问题欢迎联系 QQ:1301927919

个人博客: https://igolang.cn

<think>我们正在讨论Zabbix自动发现OLT设备的配置。根据引用内容,我们知道ZabbixAgent部署在被监控目标上,用于收集数据并发送给ZabbixServer。但是,OLT设备通常不支持直接安装ZabbixAgent,因此我们需要通过SNMP来监控。自动发现Discovery)功能可以自动发现网络中的设备,并对其应用监控项、触发器等。对于OLT设备,我们通常需要自动发现其下联的ONU设备,因为每个OLT下有大量的ONU。步骤概述:1.确保OLT设备已启用SNMP,并记录SNMP版本(如v2c或v3)和认证信息(communitystring等)。2.在Zabbix中创建自动发现规则,使用SNMPOID来发现OLT下的ONU接口。3.创建监控项原型、触发器原型等,以便为每个发现的ONU创建监控项和触发器。具体配置:第一步:准备SNMP信息在OLT上启用SNMP,并确定用于发现ONU的OID。根据引用[3],我们可以通过MIB库查找OID。通常,OLT厂商会提供MIB库,其中包含ONU信息的OID。例如,对于华为OLT,ONU状态OID可能是:.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15(具体以实际MIB为准)。第二步:在Zabbix中创建自动发现规则1.进入Zabbix控制台,选择要监控的主机(即OLT)。2.在该主机上创建自动发现规则:名称:例如“DiscoverONUs”类型:SNMPagentKey:自定义,如discovery.onuSNMPOID:填写用于获取ONU列表的OID。注意,这个OID应该返回一个索引列表(每个ONU一个索引)。3.在“过滤器”中,可以设置正则表达式过滤不需要的项。第三步:创建监控项原型在自动发现规则中,创建监控项原型。例如,创建一个监控ONU状态的监控项原型:名称:ONU{#ONU_INDEX}StatusKey:例如onu.status[{#ONU_INDEX}]SNMPOID:使用发现规则中获取的索引变量{#ONU_INDEX}来构建完整的OID。例如,如果基础OID是.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15,那么完整的OID可能是:.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15.{#ONU_INDEX}(注意:具体OID结构需参考厂商MIB)第四步:创建触发器原型例如,当ONU状态为离线时触发告警:名称:ONU{#ONU_INDEX}isdown表达式:{HOST:onu.status[{#ONU_INDEX}].last()}<>1(假设1表示在线)第五步:测试保存后,Zabbix将定期执行自动发现,发现ONU并创建监控项和触发器。注意:由于不同厂商的OLT的MIB不同,以上OID仅为示例,请根据实际设备替换。引用[3]中提到,我们可以通过Interfaces表来查找接口索引对应的接口信息。在自动发现中,我们也可以利用这个特性,通过另一个OID获取ONU的别名(描述),并作为LLD变量,这样在监控项和触发器中就可以使用ONU的名称而不是索引。例如,我们可以创建一个额外的监控项原型来获取ONU的名称,然后将其作为变量{#ONU_NAME}。具体方法是在自动发现规则中同时获取两个OID:一个用于索引,一个用于名称。这需要使用“SNMPwalk”或通过Zabbix的“值映射”功能来实现。自动发现规则配置示例(SNMPwalk方式):在自动发现规则的“SNMPOID”中,我们可以指定一个OID,该OID返回的是一系列索引。但是,如果我们想同时获取索引和名称,可以使用OID树。例如,如果我们知道ONU名称的OID基础为.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.2(同样以华为为例),那么我们可以这样设置:自动发现规则的SNMPOID:discover_onu实际上,我们可以通过一个OID获取多个值,然后使用过滤器提取索引和名称。但是,Zabbix自动发现规则支持返回JSON格式的数据,其中包含多个变量。因此,我们需要使用“SNMPwalk”并配合JavaScript预处理来构建JSON。然而,更简单的方式是使用Zabbix的“SNMP批量请求”功能,但该功能在自动发现规则中默认不支持。因此,常见的做法是先获取索引列表,然后在监控项原型中通过另一个OID获取名称。另一种方法是:在自动发现规则中,我们只获取ONU的索引(例如,通过OID.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15,该OID返回的每个实例的最后一个数字就是索引)。然后在监控项原型中,我们使用另一个OID(如.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.2.{#ONU_INDEX})来获取该ONU的名称。但是,这样每个ONU都需要一个额外的SNMP请求来获取名称,可能会增加SNMP负载。为了优化,我们可以在自动发现规则中一次性获取索引和名称。这需要编写一个脚本来处理(例如使用外部脚本或Zabbix的预处理)。但是,在纯SNMP方式下,我们可以使用以下技巧:自动发现规则SNMPOID:.1.3.6.1.4.1.2011.6.128.1.1.2.46.1(假设这是ONU表的OID)然后,在预处理中,我们可以使用“正则表达式”或“自定义JavaScript”来解析返回的多个值,并构建一个JSON数组,每个元素包含ONU_INDEX和ONU_NAME。但是,由于操作较为复杂,且需要根据具体设备调整,这里我们使用第一种简单方法:只获取索引,然后在需要名称的地方再单独获取。因此,自动发现规则配置:SNMPOID:.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15(这个OID返回的是每个ONU的状态,但我们可以只取索引部分)返回的数据可能是:.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15.1=1.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15.2=1...自动发现规则将提取索引(即最后一个数字)作为变量{#SNMPINDEX}(这是默认的)。但是,我们也可以自定义名称。在自动发现规则中,我们可以设置::{#ONU_INDEX}值:$1(然后使用正则表达式来提取索引)正则表达式示例:^\.\d+(\.(\d+))$但这样无法匹配整个OID。实际上,Zabbix在解析SNMP返回时,会自动将OID的最后一个数字作为索引?不完全是。另一种方式:在自动发现规则中,我们可以使用“预处理”步骤,选择“正则表达式”,然后设置:模式:^\.\d+\.(\d+)$输出:\1这样,每个返回的OID会被提取出最后一个数字,并作为{#SNMPINDEX}的值。但我们也可以自定义。在自动发现规则中,我们定义:{#ONU_INDEX}值:{#SNMPINDEX}(因为预处理后,每个值对应的OID的最后一个数字被提取为SNMPINDEX)然后,在监控项原型中,我们就可以使用{#ONU_INDEX}来构建OID。总结:自动发现配置的关键在于找到正确的OID,并理解返回的数据结构。由于不同厂商的OLT差异较大,建议先使用snmpwalk命令在服务器上测试:snmpwalk-v2c-cpublic<OLT_IP><OID>例如,测试ONU状态OID:snmpwalk-v2c-cpublic10.1.1.1.1.3.6.1.4.1.2011.6.128.1.1.2.46.1.15根据返回结果调整自动发现规则。最后,参考引用[1]和[2],我们确保ZabbixServer和Agent的部署正确,并且能够与OLT进行SNMP通信。注意:自动发现规则创建后,可能需要一段时间才能发现设备,可以在“最新数据”中查看。相关问题:1.如何测试SNMPOID是否可用?2.自动发现规则没有发现任何设备,可能的原因是什么?3.如何为自动发现的ONU创建图形?</think>以下是Zabbix自动发现OLT设备的配置教程,结合SNMP协议实现自动发现和管理: ### 一、配置前准备 1. **启用OLT的SNMP服务** 在OLT设备管理界面开启SNMP服务(v2c或v3),设置community string(如`public`)和访问权限[^1]。 2. **获取关键OID** - 接口索引OID:`1.3.6.1.2.1.2.2.1.1`(ifIndex) - 接口描述OID:`1.3.6.1.2.1.2.2.1.2`(ifDescr) - 流量统计OID: - 入流量:`1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX}`(ifInOctets) - 出流量:`1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}`(ifOutOctets)[^3] --- ### 二、Zabbix自动发现配置步骤 #### 步骤1:创建自动发现规则 1. **路径**:`配置` → `主机` → 选择OLT主机 → `发现规则` → `创建发现规则` 2. **关键参数**: ```yaml 名称:OLT Interface Discovery 类型:SNMP agent Key:olt.if.discovery SNMP OID:discovery[{#IFDESCR}, 1.3.6.1.2.1.2.2.1.2] // 获取接口描述 更新间隔:1h ``` #### 步骤2:配置LLD过滤器 ```yaml 过滤器: {#IFDESCR}:正则表达式匹配ONU接口命名规则 示例:.*(PON|ONU).* // 过滤出PON/ONU接口 ``` #### 步骤3:创建监控项原型 1. **入流量监控项**: ```yaml 名称:入流量 - {#IFDESCR} Key:onu.in.traffic.[{#SNMPINDEX}] SNMP OID:1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX} 单位:bps(自动计算速率) ``` 2. **出流量监控项**: ```yaml 名称:出流量 - {#IFDESCR} Key:onu.out.traffic.[{#SNMPINDEX}] SNMP OID:1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX} ``` #### 步骤4:创建触发器原型 ```yaml 名称:ONU {#IFDESCR} 离线 表达式:{host:onu.status[{#SNMPINDEX}].max(5m)}=0 严重性:严重 ``` --- ### 三、验证配置 1. **执行发现**: 在`监控` → `最新数据`中过滤`olt.if.discovery`,查看发现的ONU接口数据[^3]。 2. **故障模拟**: 手动断开ONU,检查是否触发告警。 --- ### 四、优化建议 1. **接口重命名**: 在预处理中使用JavaScript将`{#IFDESCR}`转换为易读名称(如`PON0/1/1` → `OLT1-Slot0-Port1`)。 2. **批量监控**: 对同型号OLT使用模板功能,批量应用发现规则。 3. **性能调优**: 调整SNMP超时为`5s`,避免因响应延迟阻塞进程。 > **注**:不同厂商OLT的OID可能不同,需通过`snmpwalk`命令验证: > ```bash > snmpwalk -v2c -c public <OLT_IP> 1.3.6.1.2.1.2.2.1.2 > ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值