ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zabbix “Generic by SNMP“ 通用网络设备监控模板全解析:宏、监控项、触发器与 SNMP Trap 兜底机制

Zabbix “Generic by SNMP“ 通用网络设备监控模板全解析:宏、监控项、触发器与 SNMP Trap 兜底机制 指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载导读本文以 Zabbix 官方模板Generic by SNMP仓库路径templates/net/generic_snmp_snmp/README.md为主体完整解析其 4 个用户宏、12 个监控项、6 个触发器及其依赖关系并结合仓库内的模板 YAML 导出文件template_module_generic_snmp_snmp.yaml与 C 源码如 snmptrapper.c、pinger.c说明底层实现原理。读者读完可以独立完成该模板的导入、宏调整、监控项理解与触发器排查并将其作为监控各类支持 SNMP 的网络设备交换机、路由器、防火墙等的通用底座。一、模板定位面向“一切 SNMP 设备”的通用底座Generic by SNMP 属于 Zabbix 官方模板组Templates/Network devices其定位不是针对某一厂商或型号而是为所有暴露 SNMP 接口的网络设备提供一套通用的“存活 基础系统信息 可用性”监控基线。从模板描述见 YAML 文件description字段可以看到它使用了两类标准 MIBMIB用途SNMPv2-MIB网络管理子系统信息sysUpTime、sysDescr、sysName、sysContact、sysLocation、sysObjectIDHOST-RESOURCES-MIB宿主系统运行时长hrSystemUptime该模板的 YAML 导出文件声明wizard_ready: YES意味着它可以直接作为主机创建向导的“快速模板”使用readme字段中给出的 Setup 提示是设置 SNMP 可用性触发器的时间间隔即宏 {$SNMP.TIMEOUT}。模板同时带有class: network、target: snmp两个标签便于在模板库中检索。二、宏变量Macros四个阈值控制全部告警行为模板共定义了 4 个用户宏全部集中在 YAML 导出的macros段[template_module_generic_snmp_snmp.yaml](https://link.gitcode.com/i/ac3ec046bc9024793405fab60fd9a074#L299-L337宏描述默认值{$SNMP.TIMEOUT}SNMP 可用性触发器的时间窗口5m{$SNMP.UPTIME.WARN}“主机已重启”问题自动恢复所需的 uptime 阈值10m{$ICMP_LOSS_WARN}ICMP 丢包率告警阈值%20{$ICMP_RESPONSE_TIME_WARN}平均 ICMP 响应时间告警阈值秒0.15YAML 导出为宏补充了更细致的元数据值得注意{$ICMP_LOSS_WARN}与{$ICMP_RESPONSE_TIME_WARN}归入Thresholds阈值配置分组均带正则校验如^-?([0-9]|(([0-9])\.([0-9])))$说明前台配置界面会校验输入必须是合法数字前者取值范围 0–100含后者要求不小于 0。{$SNMP.TIMEOUT}与{$SNMP.UPTIME.WARN}归入Other其他分组。{$SNMP.TIMEOUT}是时间类型宏5m参与触发器函数max(...,{$SNMP.TIMEOUT})的时间参数{$SNMP.UPTIME.WARN}是 uptime 数值类型宏10m参与恢复表达式的阈值比较。在实际部署中这四个宏既可在模板级统一设置也可在主机级覆盖——例如对跨公网链路可达性较差的设备建议调大{$SNMP.TIMEOUT}以避免误报“No SNMP data collection”。三、监控项ItemsSNMP Agent / SNMP Trap / Zabbix Internal / Simple Check 四类并存模板共 12 个监控项按类型可分为四组。以下按 README 顺序逐一说明并补充 YAML 中的采集间隔delay、值类型value_type、单位units、预处理与标签信息。3.1 SNMP Agent 轮询项8 个监控项名称Key含 OID采集间隔值类型/单位预处理Uptime (network)system.net.uptime[sysUpTime.0]OID 1.3.6.1.2.1.1.3.030sfloat单位uptime不保留趋势Custom multiplier0.01Uptime (hardware)system.hw.uptime[hrSystemUptime.0]OID 1.3.6.1.2.1.25.1.1.030sfloat单位uptime不保留趋势Check for not supported失败时置0→ Custom multiplier0.01System locationsystem.location[sysLocation.0]OID 1.3.6.1.2.1.1.6.015m字符关联资产LOCATIONDiscard unchanged with heartbeat12hSystem contact detailssystem.contact[sysContact.0]OID 1.3.6.1.2.1.1.4.015m字符关联资产CONTACTDiscard unchanged with heartbeat12hSystem object IDsystem.objectid[sysObjectID.0]OID 1.3.6.1.2.1.1.2.015m字符Discard unchanged with heartbeat12hSystem namesystem.nameOID 1.3.6.1.2.1.1.5.015m字符关联资产NAMEDiscard unchanged with heartbeat12hSystem descriptionsystem.descr[sysDescr.0]OID 1.3.6.1.2.1.1.1.015m字符Discard unchanged with heartbeat12hSNMP agent availabilityzabbix[host,snmp,available]—值映射zabbix.host.available0not available / 1available / 2unknown—几个需要展开的要点1两个 uptime 监控项的语义差异。模板文档明确区分了两者sysUpTime.0是“网络管理部分自上次重新初始化以来的时间”即 SNMP agent 自身的运行时长而hrSystemUptime.0是“宿主系统自上次初始化以来的时间”两者可能不同RFC 1907 特别指出了这一区别。因此模板把system.hw.uptime[hrSystemUptime.0]作为“主机是否重启”的主要依据system.net.uptime[sysUpTime.0]作为兜底参照详见触发器一节。2SNMP 计数器单位换算。两个 uptime OID 的原生单位都是百分之一秒hundredths of a second因此模板统一使用预处理 “Custom multiplier:0.01” 将其换算为秒监控项单位设为uptimeZabbix 前端会自动将其格式化显示为可读的“N 天 N 小时 N 分 N 秒”。3Uptime (hardware) 的容错预处理。该监控项先执行 “Check for not supported value: any error”并配置“失败时置值 0”error_handler: CUSTOM_VALUEerror_handler_params: 0避免部分设备不支持 HOST-RESOURCES-MIB 时监控项直接进入 Not supported 状态随后同样执行0.01倍率换算。4Discard unchanged with heartbeat12h。系统描述、名称、联系人、位置、对象 ID 这类“变更极低频”的字符串以 15 分钟间隔轮询但只有值真正变化且超过 12 小时心跳时才写入历史数据大幅压缩存储并保证“最后一次变化”可见。同时system.name、system.contact、system.location分别通过inventory_link: NAME / CONTACT / LOCATION把采集结果自动回填到主机资产清单实现“一个模板同时完成监控与资产发现”。5SNMP agent availability 是 Zabbix 内置项。Keyzabbix[host,snmp,available]由 Zabbix server 内部计算直接反映主机上所有 SNMP 检查的可用性状态并与主机列表中的可用性图标对应0 不可用 / 1 可用 / 2 未知。3.2 SNMP Trap 项snmptrap.fallback 兜底收集监控项名称Key值类型说明SNMP traps (fallback)snmptrap.fallbackLog日志时间格式hh:mm:sszyyyy/MM/dd收集所有未被其他 snmptrap 项匹配的 SNMP trap这是模板中唯一一个被动trap 驱动监控项也是理解该模板价值的关键。其源码行为可以在 snmptrapper.c 中确认server 的 SNMP trapper 进程收到 trap 后会先遍历主机上所有snmptrap[*]类型的监控项并按正则匹配process_trap_for_interface()函数在处理循环里先把snmptrap.fallback单独标记出来fb 变量并跳过正则匹配第 94–98 行只有当“所有正则匹配均失败”FAIL ret -1 ! fb第 148 行时才把 trap 写入 fallback 项。也就是说有专门snmptrap[regex]规则命中 → trap 写入对应项没有任何规则命中 → trap 写入snmptrap.fallback保证不会丢失任何 trap这对排障期设备尤其有用。3.3 Simple Check 项ICMP 三件套监控项名称Key值类型/单位说明ICMP pingicmpping值映射Service state0Down / 1Up主机是否可达ICMP lossicmppinglossfloat单位%丢包百分比ICMP response timeicmppingsecfloat单位s平均响应时间秒这三个 key 由 Zabbix server 的 ICMP pinger 进程实现对应源码 pinger.c其中定义了icmppingsec_type_t等类型并对icmppingloss、icmppingsec等 key 进行分发处理。模板为icmpping配置了Service state值映射0→Down1→Up使告警与图表显示更直观。四、触发器Triggers六条告警规则与依赖链模板共 6 个触发器均带scope标签availability / performance / notice / security。README 中给出的完整表达式如下表触发器名称表达式严重级别附加信息Generic by SNMP: Host has been restarted(last(.../system.hw.uptime[hrSystemUptime.0])0 and change(...)0 and last(...,#2)42949672.96-(lastclock(...)-lastclock(...,#2))) or (last(.../system.hw.uptime[hrSystemUptime.0])0 and change(.../system.net.uptime[sysUpTime.0])0 and last(...,#2)42949672.96-(lastclock(...)-lastclock(...,#2)))Warning手动关闭是依赖“No SNMP data collection”Generic by SNMP: System name has changedlast(/Generic by SNMP/system.name,#1)last(/Generic by SNMP/system.name,#2) and length(last(/Generic by SNMP/system.name))0Info手动关闭是事件名含新名称Generic by SNMP: No SNMP data collectionmax(/Generic by SNMP/zabbix[host,snmp,available],{$SNMP.TIMEOUT})0Warning依赖“Unavailable by ICMP ping”Generic by SNMP: Unavailable by ICMP pingmax(/Generic by SNMP/icmpping,#3)0High—Generic by SNMP: High ICMP ping lossmin(/Generic by SNMP/icmppingloss,5m){$ICMP_LOSS_WARN} and min(/Generic by SNMP/icmppingloss,5m)100Warning依赖“Unavailable by ICMP ping”Generic by SNMP: High ICMP ping response timeavg(/Generic by SNMP/icmppingsec,5m){$ICMP_RESPONSE_TIME_WARN}Warning依赖“High ICMP ping loss”“Unavailable by ICMP ping”4.1 “Host has been restarted”——最复杂的智能判断这是模板中技术含量最高的一条触发器其设计要点YAML 导出中同时给出问题表达式与恢复表达式见 template_module_generic_snmp_snmp.yaml问题判定uptime 计数器下降change()0即视为重启。由于 32 位 SNMP 计数器最大值为 2³² 百分之一秒约 497 天当两次读数间计数器恰好回绕wrap时也会表现为“下降”。因此表达式加入守卫条件last(...,#2) 42949672.96 - (lastclock(...) - lastclock(...,#2))——即“上一个值距离计数器上限的余量是否小于两次读数的时间差”若是则判定为回绕并忽略这次下降避免把计数器回绕误报为设备重启。主判断用system.hw.uptime宿主机时长当其等于 0例如某些设备该 OID 不支持时退而用system.net.uptime判断。恢复判定YAML 中recovery_mode: RECOVERY_EXPRESSION恢复表达式为last(.../system.hw.uptime){$SNMP.UPTIME.WARN} or last(.../system.net.uptime){$SNMP.UPTIME.WARN}——即任一 uptime 超过宏{$SNMP.UPTIME.WARN}默认 10 分钟后自动关闭问题配合“手动关闭是”实现“重启即告警、稳定即恢复”的闭环。事件名定制事件名使用Generic by SNMP: {HOST.NAME} has been restarted将主机名带入告警事件便于多主机排障时快速定位。4.2 依赖链从根因到表象六条触发器的依赖关系形成了一条清晰的告警收敛链Unavailable by ICMP ping (High) └─ No SNMP data collection (Warning) ← 依赖 ICMP 不可达 └─ Host has been restarted (Warning) ← 依赖 SNMP 无数据 Unavailable by ICMP ping (High) └─ High ICMP ping loss (Warning) ← 依赖 ICMP 不可达 └─ High ICMP ping response time (Warning) ← 依赖丢包告警 ICMP 不可达这种依赖设计使得当设备真正宕机时最高级别的 “Unavailable by ICMP ping”High作为根因告警显示其余表象告警被自动收敛隐藏网络抖动引发的丢包告警出现时响应时间告警不会重复刷屏。4.3 其余触发器速览System name has changedInfo比较最近两次system.name采集值是否不同且非空用于发现设备被改名或配置被篡改事件名带出新名称需人工确认后手动关闭。No SNMP data collectionWarning{$SNMP.TIMEOUT}默认 5m窗口内 SNMP 可用性持续为 0提示检查设备连通性与 SNMP 配置。High ICMP ping lossWarning5 分钟窗口内丢包率最小值超过{$ICMP_LOSS_WARN}默认 20%且小于 100%操作数据opdata显示Loss: {ITEM.LASTVALUE1}实时丢包值。High ICMP ping response timeWarning5 分钟平均响应时间超过{$ICMP_RESPONSE_TIME_WARN}默认 0.15 秒opdata 显示当前值。五、从 YAML 到前台模板的导入与启用模板的正式来源是 YAML 导出文件 template_module_generic_snmp_snmp.yaml其zabbix_export.version为8.0。部署方式为在 Zabbix 前端Data collection → Templates中点击 “Import”选择该 YAML 文件即可导入模板含宏、监控项、触发器、值映射与依赖关系无需手工创建。导入后在主机上添加 SNMP 接口Community / SNMPv3 凭证按设备实际配置将 “Generic by SNMP” 链接到主机按网络环境覆盖宏如{$SNMP.TIMEOUT}调大避免慢链路误报、{$ICMP_LOSS_WARN}按业务容忍度调整若有专用 trap 解析需求可另建snmptrap[regex]类型监控项未命中的 trap 仍会被snmptrap.fallback完整接收源码逻辑见 snmptrapper.c。六、与仓库其他资源的衔接该模板与同目录的generic_snmptemplates/net/generic_snmp/README.md同属 “Templates/Network devices” 模板组后者是前者精简版两者可对比选用。仓库内大量厂商模板如 templates/net/cisco、templates/net/huawei_snmp、templates/net/juniper_snmp都是在此类通用 SNMP 能力之上的厂商定制理解本模板是看懂它们的起点。SNMP trap 匹配/兜底、ICMP pinger、内置可用性检查等底层机制分别实现在 snmptrapper.c、pinger.c 与 src/libs/zbxsysinfo 等模块中可进一步阅读源码深入原理。结语Generic by SNMP 模板用 4 个宏、12 个监控项和 6 条带依赖关系的触发器构建了一套开箱即用的通用网络设备监控基线SNMP 负责深度系统信息与 trap 兜底ICMP 负责快速存活探测内置可用性检查负责状态收敛。理解其“计数器回绕守卫”“双 uptime 主备判断”“fallback 不丢 trap”等设计细节不仅能让你用好这张模板更能为自定义设备模板提供可直接复用的范式。赞分享指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载相关推荐使用 Zabbix 官方模板 HP Enterprise Switch by SNMP 监控 HP 企业级交换机宏、监控项与触发器全解析使用 Zabbix 官方模板 HP Enterprise Switch by SNMP 监控 HP 企业级交换机宏、监控项与触发器全解析 导读 本文以 Z指标监控可观测性告警运维Zabbix Arista by SNMP 模板全解析8.0 开箱即用的 Arista 网络设备监控方案Zabbix Arista by SNMP 模板全解析8.0 开箱即用的 Arista 网络设备监控方案 导读 本文围绕 Zabbix 8.0 官方模板「Ar指标监控可观测性告警运维Zabbix 模板实战通过 SNMP 监控 Ciena 3906 智能 CPE 设备Zabbix 模板实战通过 SNMP 监控 Ciena 3906 智能 CPE 设备 导读 本文基于 Zabbix 官方仓库中的 Ciena 3906 by指标监控可观测性告警运维上一篇AnuPpuccin 彩虹文件夹三步开启让 Obsidian 文件管理更直观下一篇Outfit字体免费商用 9 字重加可变字体三步装好创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表