Zabbix 社区模板实战:基于 SNMP 监控 HP Procurve 2920 系列交换机
Zabbix 社区模板实战:基于 SNMP 监控 HP Procurve 2920 系列交换机
导读
本文基于 Zabbix Community Templates 仓库中的 HP Procurve 2920 社区模板(5.0 版本 README)展开,介绍如何使用纯 SNMP(配合 ICMP 与 Trap)对 HP Procurve 2920 系列交换机进行完整监控。读完本文,你将掌握该模板的监控项体系、接口自动发现(LLD)机制、流量换算预处理、内置触发器告警逻辑,以及如何在 Zabbix 中导入并落地这套模板,并了解其背后的 MIB 与 OID 实现细节。
一、模板概览与适用场景
HP Procurve 2920 是 HPE/Aruba 早期 Procurve 产品线中的可管理三层交换机,常用于中小型园区网络的接入/汇聚层。该模板定位为"轻量、纯轮询 + 事件监听"方案,不依赖额外脚本或外部依赖:
- 模板名称:
HP Procurve 2920,归属于Templates模板组; - 实现文件:仓库为每个版本提供独立导出文件,5.0 为 XML(template_hp-2920-xxg.xml),5.4 与 6.0 为 YAML(5.4 YAML、6.0 YAML);
- 使用宏(Macros):无,模板不定义任何用户宏,开箱即用,无需配置宏变量;
- 模板链接(Template links):无,不继承其他模板,是独立完整的监控方案;
- 应用集(Applications):模板将监控项划分为三类——
System(系统资源与身份信息)、Interfaces(接口相关)、Events(连通性与 Trap 事件),便于在前端按业务维度筛选展示。
需要注意:5.0/5.4/6.0 三个版本的 README 与导出文件内容完全一致(导出时间为 2021-11-21),模板没有随 Zabbix 大版本引入新的差异化能力,因此下文分析同样适用于三个版本。
二、系统级监控项:身份、硬件与资源
模板通过 SNMP agent 轮询设备系统信息,共包含以下核心监控项。下表完整列出 README 中的每一项,并补充实现文件中对应的 OID、数据类型与预处理细节:
| 监控项名称 | Item key | SNMP OID / 来源 | 更新间隔 | 数据类型/单位 | 备注 |
|---|---|---|---|---|---|
| HP: Switch Os Version | hpSwitchOsVersion |
.1.3.6.1.4.1.11.2.14.11.5.1.1.3.0 |
300s | CHAR | 关联资产清单 SOFTWARE 字段 |
| HP: Switch Type | hpSwitchType |
iso.3.6.1.4.1.11.2.14.11.1.2.4.1.4.1 |
300s | CHAR | 关联资产清单 HARDWARE 字段 |
| HP: Base MAC | hpBaseMac |
.1.3.6.1.4.1.11.2.14.11.5.1.1.6.0 |
300s | CHAR | 关联资产清单 MACADDRESS_A 字段 |
| HP: Serial Number | hpHttpMgSerialNumber |
.1.3.6.1.4.1.11.2.36.1.1.2.9.0 |
300s | CHAR | 关联资产清单 SERIALNO_A 字段 |
| SysName | SysName |
.1.3.6.1.2.1.1.5.0 |
30s | TEXT | 关联资产清单 NAME 字段 |
| SysContact | SysContact |
.1.3.6.1.2.1.1.4.0 |
30s | TEXT | 关联资产清单 CONTACT 字段 |
| SysLocation | SysLocation |
.1.3.6.1.2.1.1.6.0 |
30s | TEXT | 关联资产清单 LOCATION 字段 |
| SysUptime | SysUptime |
.1.3.6.1.2.1.1.3.0 |
30s | FLOAT / uptime | 预处理 MULTIPLIER 0.01 将毫秒换算为秒 |
| HP: CPU utilization | hpSwitchCpuStat |
.1.3.6.1.4.1.11.2.14.11.5.1.9.6.1.0 |
60s | % | 关联 CPU 图形 |
| System Memory Free left | sysMemFreeLeft |
NETSWITCH-MIB::hpLocalMemFreeBytes.1 |
20s | bytes | 关联内存图形 |
| Fan Status | FAN-Status |
.1.3.6.1.4.1.11.2.14.11.1.2.6.1.4.1 |
80s | 数值 | 风扇状态 |
2.1 从实现看"身份信息四件套"的设计意图
从 XML 实现可以看到,四个 HP 私有 MIB 的 OID 都集中在 HP 企业号 .1.3.6.1.4.1.11 之下:
.1.3.6.1.4.1.11.2.14.11.5.1.1.3.0(OS 版本)、.1.3.6.1.4.1.11.2.14.11.5.1.1.6.0(Base MAC)位于同一张表(hpSwitch系统信息表)的不同列,索引为 0 表示单实例标量;.1.3.6.1.4.1.11.2.14.11.1.2.6.1.4.1(风扇状态)与.1.3.6.1.4.1.11.2.14.11.1.2.4.1.4.1(型号)位于hpSwitchChassis相关的另一组 OID 树中,索引.1指向 1 号槽位/设备本体。
这类"身份信息"监控项的共同特点是更新间隔较长(300s)、不保留趋势(trends=0),因为它们属于低频变化的静态属性;同时通过 inventory_link 与 Zabbix 资产清单(Inventory)字段绑定,导入主机后即可自动填充资产记录——这是社区模板中很实用的资产管理实践。
2.2 资源监控:CPU 与内存
- CPU:
hpSwitchCpuStat每 60 秒轮询一次,单位为%,并作为CPU图形(颜色C80000,聚合函数 MAX)的唯一数据源; - 内存:
sysMemFreeLeft通过NETSWITCH-MIB::hpLocalMemFreeBytes.1读取本机剩余空闲内存字节数,更新间隔仅 20 秒(模板中最短的系统级轮询),用于及时捕捉内存压力,并作为System Memory图形(颜色1A7C11)的数据源。
2.3 风扇状态
FAN-Status 读取风扇状态 OID,更新间隔 80s,历史保留 7 天、趋势保留 100 天。它的取值语义与告警逻辑见下文"触发器"章节。
三、连通性与事件监控:ICMP + SNMP Trap
模板在 Events 应用集下同时纳管了可达性检测与 Trap 事件接收:
| 监控项名称 | Item key | 类型 | 更新间隔 | 用途 |
|---|---|---|---|---|
| ping | icmpping |
Simple check | 30s | ICMP 可达性检测 |
| ColdStart detected | snmptrap[^.*coldStart.*] |
SNMP trap | 0(事件驱动) | 捕获冷启动 Trap |
| Interface status change | snmptrap[@netIF_OperStatChange] |
SNMP trap | 0(事件驱动) | 捕获接口状态变更 Trap |
| SNMP Trap Events | snmptrap.fallback |
SNMP trap | 0(事件驱动) | 兜底接收所有 Trap |
3.1 三类 Trap 项的互补关系
Zabbix 的 SNMP trap 监控项通过 snmptrap[regex] 对收到的 Trap 正则匹配:
snmptrap[@netIF_OperStatChange]中@前缀表示引用 Zabbix 内置正则表达式netIF_OperStatChange(匹配 HP/标准接口操作状态变更 Trap),专门筛选接口 up/down 事件;snmptrap[^.*coldStart.*]用正则匹配 trap 内容中包含coldStart的记录,用于感知设备重启;snmptrap.fallback作为兜底项,接收所有未匹配到其他 Trap 项的原始记录,保证任何 Trap 都不会被静默丢弃。
三条 Trap 项均为 LOG 类型,delay=0 表示完全由事件驱动,不轮询;同时配置 logtimefmt: hh:mm:ss dd/mm/yyyy 解析 Trap 时间戳。需要强调的是:Trap 类监控项依赖 Zabbix Server/Proxy 上正确配置的 SNMP trap 接收链路(如 snmptrapd 与 zabbix 的 trap 文件/进程),这是模板本身无法自动完成的部署前提。
3.2 ICMP 可达性
ping 使用 Zabbix 内置 Simple check 的 icmpping key,每 30 秒探测一次,作为设备存活性的第一道防线(与 SNMP 轮询互相独立,即使 SNMP 异常也能反映网络层状态)。
四、接口自动发现(LLD)与流量监控
模板的接口监控完全基于低级别自动发现(LLD),这是它最核心的实战能力。
4.1 发现规则
| 属性 | 值 |
|---|---|
| 规则名称 | Interfaces |
| 类型 | SNMP agent |
| SNMP OID | discovery[{#SNMPVALUE},IF-MIB::ifDescr] |
| Item key | ifDescr |
| 更新间隔 | 120s |
| 过滤器 | {#SNMPVALUE} 匹配正则 ^[0-9]{1,3}$,条件关系为 OR |
该规则遍历设备的 IF-MIB::ifDescr 表,为每个接口生成宏 {#SNMPVALUE}(接口描述文本)与 {#SNMPINDEX}(接口索引)。过滤器的 ^[0-9]{1,3}$ 要求接口描述为 1~3 位纯数字,从而只发现物理端口,跳过 VLAN、聚合口、环回口等命名接口——这是社区模板常用的物理端口筛选技巧。
4.2 六个接口原型(Item Prototypes)
发现成功后,每个物理接口自动创建以下原型监控项:
| 原型名称 | Key | OID | 更新间隔 | 状态 | 说明 |
|---|---|---|---|---|---|
| Incoming traffic on interface $1 | ifInOctets[{#SNMPVALUE}] |
IF-MIB::ifInOctets.{#SNMPINDEX} |
30s | 启用 | 入向流量,单位 bps |
| Outgoing traffic on interface $1 | ifOutOctets[{#SNMPVALUE}] |
IF-MIB::ifOutOctets.{#SNMPINDEX} |
30s | 启用 | 出向流量,单位 bps |
| Admin status of interface $1 | ifAdminStatus[{#SNMPVALUE}] |
IF-MIB::ifAdminStatus.{#SNMPINDEX} |
30s | 启用 | 管理状态(配置层面) |
| Operational status of interface $1 | ifOperStatus[{#SNMPVALUE}] |
IF-MIB::ifOperStatus.{#SNMPINDEX} |
30s | 启用 | 操作状态(物理层面) |
| Alias of interface $1 | ifAlias[{#SNMPVALUE}] |
IF-MIB::ifAlias.{#SNMPINDEX} |
3600s | 禁用 | 接口别名,低频静态信息 |
| Description of interface $1 | ifDescr[{#SNMPVALUE}] |
IF-MIB::ifDescr.{#SNMPINDEX} |
3600s | 禁用 | 接口描述,低频静态信息 |
从 6.0 YAML 实现看,ifAlias 与 ifDescr 两个原型默认 status: DISABLED(仅在需要时手动启用),因为接口描述/别名在轮询流量之外属于低频属性,默认启用会造成不必要的 SNMP 负载。四个启用的原型按 30 秒间隔轮询,其中两个流量项还做了预处理换算(见下节)。
4.3 流量换算:从计数器到 bps
SNMP 的 ifInOctets/ifOutOctets 本质是累计字节计数器(Counter32),不能直接用于图形展示。模板为两个流量原型配置了两级预处理:
CHANGE_PER_SECOND:将两次取值之差除以间隔秒数,得到每秒字节数(B/s);MULTIPLIER 8:乘以 8 将字节换算为比特,得到最终单位bps。
这两步合起来把 Counter 语义的原始数据转换为实时速率,这也是 Zabbix 监控网络流量的标准做法。两个原型的历史保留 30 天、趋势保留 90 天,足够支撑月度容量分析与季度趋势观察。
4.4 接口状态值映射
ifOperStatus 原型的数值通过值映射(Value map)SNMP interface status (ifOperStatus) 翻译为可读文本,映射关系在模板中明确定义:
| 数值 | 文本 |
|---|---|
| 1 | up |
| 2 | down |
| 3 | testing |
| 4 | unknown |
| 5 | dormant |
| 6 | notPresent |
| 7 | lowerLayerDown |
该映射表与 IF-MIB 标准定义一致,任何遵循标准的设备(不只是 HP)都适用,因此模板在接口监控层面具备良好的通用性。
五、触发器:README 与实现文件的差异说明
README 的 Triggers 章节声明"本模板没有触发器"(There are no triggers in this template),但需要指出:实际导出文件(XML/YAML)中定义了 6 条触发器。以仓库中的实现文件为准,模板实际内置的告警逻辑如下:
| 触发器名称 | 表达式(6.0 语法) | 优先级 | 关联监控项 |
|---|---|---|---|
| {HOSTNAME} Unreachable | max(/HP Procurve 2920/icmpping,90s)=0 |
DISASTER | ping |
| 95% CPU on {HOSTNAME} | last(/HP Procurve 2920/hpSwitchCpuStat,#1:now-60s)>94 |
HIGH | CPU utilization |
| Low memory | max(/HP Procurve 2920/sysMemFreeLeft,#5)<8096 |
WARNING | Memory Free left |
| FAN status changed on {HOSTNAME} | last(/HP Procurve 2920/FAN-Status,#2)<4 |
DISASTER | Fan Status |
| Coldstart detected | find(/HP Procurve 2920/snmptrap[^.*coldStart.*],,"regexp","^.*Failure.*$")<>0 |
INFO | ColdStart detected(类型 MULTIPLE) |
| {HOSTNAME} Has been restarted | last(/HP Procurve 2920/SysUptime)<1000 |
INFO | SysUptime |
各触发器的判定语义值得逐条说明:
- Unreachable(灾难级):90 秒窗口内 ICMP 全部失败判定设备不可达;
- CPU 超过 95%(高):
last(...,#1:now-60s)表示取当前值前 60 秒内的最新值,超过 94 触发,配合 60s 更新间隔可实现约 1 分钟的 CPU 告警延迟; - 内存不足(警告):连续 5 次取值中最大值仍低于 8096 字节(约 8 KiB)才触发,通过
max(#5)做去抖,避免瞬时抖动误报; - 风扇状态变化(灾难级):连续两次取值(
#2)均小于 4 触发。结合该 OID 所在的风扇状态表语义,可以推断:状态数值 4 是模板作者设定的"正常"参考阈值,低于 4 视为风扇异常/转速异常;由于风扇故障直接威胁硬件散热,所以定级为 DISASTER; - Coldstart(信息级):对 coldStart Trap 内容做
^.*Failure.*$正则匹配,仅当 Trap 描述中出现Failure字样才告警,属于"冷启动但伴随故障信息"的甄别逻辑,类型为 MULTIPLE(多条记录满足即触发); - 重启(信息级):SysUptime(经 0.01 预处理后单位为秒)小于 1000 秒,即设备开机时间不足约 16.7 分钟时判定刚重启过。
提示:如需在 Zabbix 前端查看触发器,请以导入后的模板实际状态为准;README 的"无触发器"描述与实现文件不一致,属于文档滞后,不影响模板功能。
六、图形:随装随用的可视化
模板自带两个常规图形与一个图形原型:
| 图形名称 | 数据源 | 颜色 | 说明 |
|---|---|---|---|
| CPU | hpSwitchCpuStat |
C80000(深红) |
聚合函数 MAX,观察 CPU 峰值 |
| System Memory | sysMemFreeLeft |
1A7C11(深绿) |
剩余内存趋势 |
| Traffic on interface {#SNMPVALUE}(原型) | ifInOctets[{#SNMPVALUE}] / ifOutOctets[{#SNMPVALUE}] |
入向 0000EE(蓝)、出向 33FF33(绿),宽度 300px |
随 LLD 自动为每个物理接口生成流量对比图 |
其中"Traffic on interface"是图形原型,会随接口发现自动实例化,实现"插上模板即拥有每端口流量图"的效果。
七、部署与使用
7.1 导入模板
在 Zabbix Server 前端操作:
- 进入 Configuration → Templates,点击右上角 Import;
- 按你的 Zabbix 版本选择对应导出文件:
- 导入成功后,在主机(Host)上链接模板
HP Procurve 2920,并将主机的 SNMP 接口指向交换机管理 IP。
7.2 前置条件
- 交换机需启用 SNMP(建议使用 SNMPv2c,配置只读 community);
- 轮询类监控项(SNMP agent、Simple check)由 Zabbix Server/Proxy 主动发起,无需交换机额外配置;
- Trap 类监控项(3 条)依赖 Zabbix Server/Proxy 侧完整的 trap 接收链路(snmptrapd → trap 落盘 → Zabbix trap 进程解析),需要在服务器端另行配置;
- ICMP 探测需保证 Zabbix Server 与交换机之间 ICMP 可达,且
fping可用。
7.3 落地后的检查清单
导入并链接主机后建议核对:
- Configuration → Hosts 中主机状态正常,Latest data 中
SysUptime、HP: CPU utilization等已开始出数据; - Monitoring → Discovery 中
Interfaces规则已执行,物理端口被正确发现(描述为纯数字的接口),VLAN 等被过滤器排除; - Monitoring → Hosts → Graphs 中每端口自动出现
Traffic on interface X图形; - Inventory 页面自动填充了软件版本、型号、序列号、MAC、联系人与位置等资产字段。
八、扩展建议与局限说明
从源码结构看,该模板遵循了社区模板的典型设计模式:静态系统信息 + 事件驱动 Trap + LLD 接口监控三轨并行,无宏、无模板依赖,复杂度低、可移植性强。在此基础上可做的扩展方向包括:
- 告警收敛:模板内置的 CPU/内存阈值是通用默认值,可在主机或模板级别覆盖,或按需添加恢复表达式(recovery expression)与通知动作;
- 接口告警:模板未为
ifOperStatus/ifAdminStatus配置触发器,如需端口 down 告警可自行补充; - POE 与光模块:如需 PoE 供电功率或光模块 DDM 监控,可参考仓库中同目录下的其他 HP 模板(如 template_hp_transceivers_lld_monitoring_(gbic_ddm_ddmi_dom)/) 等)组合使用。
最后需要说明的局限:模板以 HP 私有 MIB(.1.3.6.1.4.1.11.2.14...)为核心轮询对象,仅适用于遵循该 MIB 结构的 Procurve/Aruba 早期交换机;对于不同代际或 OEM 型号,部分 OID(如风扇状态、CPU 利用率)可能返回空值,部署前建议先用 snmpwalk 验证对应 OID 的可达性与取值格式,再正式接入生产环境。