【免费下载链接】community-templates
Zabbix Community Templates repository
本文基于 Zabbix Community Templates 仓库中的template_hp_a5120_switch_snmp_v3模板(位于 Network_Devices/HP/template_hp_a5120_switch_snmp_v3),系统讲解如何通过 SNMP v3 的authPriv安全级别(SHA 认证 + AES 加密)采集 HP A5120 交换机的 CPU、内存、温度、风扇、电源等硬件健康指标与接口 CRC 错误,并深入剖析模板从 Zabbix 3.0 一路演进到 7.0 的源码级实现细节。读完本文,你将掌握该模板的监控项构成与 OID 映射、三项关键主机宏的配置方法、LLD 发现规则的运行原理,以及 Zabbix 7.0 版本新增的接口级带宽、链路状态告警能力。
模板概览:监控范围与适用场景
模板名为HP A5120,归属模板组Template Switches,由作者 Jakub Samek 编写。其设计目标非常明确:为一台运行在 SNMP v3 环境下的 HP A5120 交换机提供"开箱即用"的硬件健康监控,覆盖:
- CPU 使用率(CPU usage)
- 内存使用率(Memory usage)
- 交换机温度(Switch Temperature)
- 风扇状态(Fan status)
- 电源状态(PSU sensor,含内部电源与外部电源)
- 设备基础信息(设备名称、位置、描述、联系人)
- 接口 CRC 错误低密度发现(Discovery rule for CRC errors)
一个重要的设计特点是:该模板不链接任何其他模板("no links to other templates"),并且在 5.0~6.0 版本中不包含标准的接口流量监控项。原文档明确建议:如果还需要端口流量、接口状态等数据,应另行使用通用 SNMP 接口模板(generic SNMP interface template)。到了 7.0 版本,模板作者才将接口级监控(带宽、速率、管理/运行状态、CRC)直接内置进来,这一点在本文后续章节会单独展开。
安全前提:SNMP v3 authPriv 与三项主机宏
HP A5120 是典型的机房网络设备,直接使用 SNMP v1/v2c 的 community 字符串存在安全隐患。该模板自始至终采用SNMP v3,并要求使用authPriv安全级别——既做身份认证又做数据加密,具体参数为:
- 安全级别:
authPriv - 认证协议:SHA(SHA authentication protocol)
- 加密协议:AES(AES privacy protocol)
模板本身不硬编码任何账号口令,而是要求通过**主机宏(host macros)**为每个主机填入正确的值。需要配置的三个宏如下:
| 宏名 | 含义 |
|---|---|
{$SNMP_V3_USER} | SNMP v3 安全名(Security name) |
{$SNMP_V3_AUTHPASSPHRASE} | 认证口令(Authentication passphrase) |
{$SNMP_V3_PRIVPASSPHRASE} | 加密口令(Privacy passphrase) |
配置完成后,还需要在主机(Host)的 SNMP 接口(interface)中引用这些宏,让 Zabbix 轮询器以对应的 SNMP v3 凭据建立会话。这是整个模板能正常工作的第一步——模板内的所有SNMP agent类型监控项都会沿用主机接口的这套 SNMP v3 凭据去执行 OID 轮询。
补充说明:在 5.0~6.0 的发现规则描述中保留了
{$SNMP_COMMUNITY} is a global macro的提示,这是早期discovery[]低密度发现方式的遗留说明;在 SNMP v3 场景下,凭据统一由主机接口与上述三个宏提供。
监控项全景:13 个采集项逐一解析
结合 5.0 版模板 XML 与 6.0 版 YAML,可以还原出每个监控项背后的真实 OID、轮询间隔与数据类型。下表完整列出 5.0~6.0 版本所采集的全部监控项:
| 监控项名称 | Key | SNMP OID | 更新间隔 | 数据类型/单位 |
|---|---|---|---|---|
| CPU usage | switch.cpu | 1.3.6.1.4.1.25506.2.6.1.1.1.1.6.30 | 60s | 数值,单位% |
| Memory usage | switch.memory | 1.3.6.1.4.1.25506.2.6.1.1.1.1.8.30 | 60s | 数值,单位% |
| Switch Temperature | switch.temp | 1.3.6.1.4.1.25506.2.6.1.1.1.1.12.2 | 60s | 浮点,单位°C |
| Fan 1 | fan1.status | 1.3.6.1.4.1.25506.8.35.9.1.1.1.2.1 | 60s | 数值(设备状态) |
| Internal Power Supply 1 | Int.Power.Supply1 | 1.3.6.1.4.1.25506.8.35.9.1.2.1.2.1 | 60s | 数值(设备状态) |
| External Power Supply 1 | Ext.Power.Supply | 1.3.6.1.4.1.25506.8.35.9.1.2.1.2.2 | 60s | 数值(设备状态) |
| Power Supply Sensor | Power.Supply.Sensor | 1.3.6.1.4.1.25506.8.35.9.1.2.1.2.1 | 60s | 数值(设备状态) |
| Device name | sysName | SNMPv2-MIB::sysName.0(1.3.6.1.2.1.1.5.0) | 3600s | 字符,映射主机名 |
| Device description | sysDescr | SNMPv2-MIB::sysDescr.0(1.3.6.1.2.1.1.1.0) | 3600s | 字符,映射硬件 |
| Device location | sysLocation | SNMPv2-MIB::sysLocation.0(1.3.6.1.2.1.1.6.0) | 3600s | 字符,映射位置 |
| Device contact details | sysContact | SNMPv2-MIB::sysContact.0(1.3.6.1.2.1.1.4.0) | 3600s | 字符,映射联系人 |
| SysUptime | SysUptime | 1.3.6.1.2.1.1.3.0 | 300s | 浮点,单位uptime |
| CRC errors on interface $1(LLD 原型) | CRC.Errors[{#SNMPVALUE}] | EtherLike-MIB::dot3StatsAlignmentErrors.{#SNMPINDEX} | 120s | 数值,LLD |
从 OID 前缀可以推断出指标来源:1.3.6.1.4.1.25506是 H3C/HH3C 的企业 MIB 分支(HP A5120 即基于 Comware 平台的 H3C 系交换机),其中 CPU/内存/温度来自HH3C-ENTITY-EXT-MIB(25506.2.6...),风扇与电源状态来自HH3C-LSW-DEV-ADM-MIB(25506.8.35...);四个sys*项与 SysUptime 则来自标准SNMPv2-MIB/IF-MIB。在 7.0 版 YAML 中,模板为风扇/电源状态专门定义了名为HH3C-LSW-DEV-ADM-MIB::DevStatus的值映射(Value map),将1=active、2=deactive、3=not-install、4=unsupport翻译为可读文本,这也印证了上述 MIB 归属。
几个值得注意的实现细节:
- SysUptime 的预处理:标准
sysUpTime返回的是百分之一秒(hundredths of seconds),模板通过预处理步骤MULTIPLIER 0.01将其换算为秒,再以uptime单位展示,便于触发器直接按时间比较。 - 系统信息项的降噪:
sysName/sysDescr/sysLocation/sysContact四个字符型监控项轮询间隔为 1 小时,且 7.0 版本为其附加了DISCARD_UNCHANGED_HEARTBEAT(1 天心跳)预处理,值不变时不上报,避免无意义的历史数据堆积。 - 资产自动填充:四个系统信息项分别设置了
inventory_link(NAME/HARDWARE/LOCATION/CONTACT),采集结果会自动回填主机资产清单,省去手工录入。 - 重复采集的历史包袱:5.0~6.0 中的
Power Supply Sensor与Internal Power Supply 1轮询的是同一个 OID(1.3.6.1.4.1.25506.8.35.9.1.2.1.2.1),属于冗余项,7.0 版本已将其删除(详见版本演进章节)。
CRC 错误低密度发现:LLD 规则与原型机制
5.0~6.0 版本中唯一的一条发现规则(Discovery rule)用于接口 CRC 错误监控:
| 名称 | 类型 | Key | 附加信息 |
|---|---|---|---|
| Network interface errors | SNMP agent | ifDescription | 更新间隔 3600s;OID 为discovery[{#SNMPVALUE},IF-MIB::ifDescr] |
这条规则的采集原理是:用 Zabbix 的discovery[]预处理对IF-MIB::ifDescr(接口描述符表)做低密度遍历,把每个接口的索引值填充进宏{#SNMPVALUE},从而为每个物理/逻辑接口自动生成 CRC 错误监控项。原文档还提示:可以根据过滤需要改用IF-MIB::ifType或IF-MIB::ifAlias作为发现源,比如只想监控以太口时按ifType过滤。
由该规则派生出的监控项原型(Item prototype):
| 名称 | 类型 | Key | 更新间隔 | 附加信息 |
|---|---|---|---|---|
| CRC errors on interface $1 | SNMP agent | CRC.Errors[{#SNMPVALUE}] | 120s | OID:EtherLike-MIB::dot3StatsAlignmentErrors.{#SNMPINDEX},LLD |
CRC(循环冗余校验)是一种用于检测原始数据意外变化的哈希机制:数据块被读取/接收时,设备会重复计算并比对校验值,不匹配即记录数据错误并尝试重读或重传。这里采集的是以太网 MAC 层的对齐/CRC 错误计数——dot3StatsAlignmentErrors(对齐错误帧)。需要注意,7.0 版本已将 CRC 采集点从dot3StatsAlignmentErrors更换为EtherLike-MIB::dot3StatsFCSErrors(1.3.6.1.2.1.10.7.2.1.3.{#SNMPINDEX},即 FCS 校验失败帧),因为后者才是真正意义上的 CRC 错误计数器,详见版本演进章节。
触发器体系:从 CPU 告警到 CRC 错误
模板内置的告警触发器覆盖了"性能"与"可用性"两个维度。5.0~6.0 版本的核心触发器如下:
| 触发器名称 | 表达式 | 优先级 |
|---|---|---|
| CPU usage on {HOST.HOST} > 80% | last(/HP A5120/switch.cpu)>80 | High |
| Memory usage on {HOST.HOST} > 80% | last(/HP A5120/switch.cpu)>80 | High |
| Temperature on {HOST.HOST} is > 45 | ({TRIGGER.VALUE}=0 and last(/HP A5120/switch.temp)>45) or ({TRIGGER.VALUE}=1 and last(/HP A5120/switch.temp)>40) | High |
| {HOSTNAME} Has been restarted | last(/HP A5120/SysUptime)<1000 | Info |
| CRC Errors on on {HOST.NAME} interface {#SNMPVALUE}(LLD) | change(/HP A5120/CRC.Errors[{#SNMPVALUE}])>1 | Average |
值得展开的几点:
- 温度告警的迟滞(hysteresis)设计:5.0 时代用
{TRIGGER.VALUE}宏实现"超过 45°C 触发、回落到 40°C 以下才恢复"的防抖逻辑;7.0 版本改用标准的recovery expression(last(/HP A5120/switch.temp)>45触发,last(/HP A5120/switch.temp)<=40恢复),语义更清晰、可读性更好。 - CPU 与内存触发器的一个历史 Bug:查看 5.4 版 YAML 可以发现,
Memory usage触发器的表达式实际引用的却是switch.cpu这个 CPU 监控项——也就是说早期版本里"内存超 80%"告警本质上是 CPU 超 80% 的重复告警。该问题在 7.0 版本被修复(last(/HP A5120/switch.memory)>80)。这也提醒使用旧版本模板的用户注意核对。 - 重启检测的阈值差异:早期版本用
SysUptime < 1000(经0.01乘数换算后约 1000 秒)判定设备刚重启;7.0 版本直接写为SysUptime < 10m(10 分钟),并补充了manual_close: YES允许手工关闭。 - CRC 错误用变化量触发:CRC 计数器是只增不减的累积值,直接用
last()>阈值没有意义,因此采用change()>1判断"两次轮询之间新增了 CRC 错误",只要计数器出现增长即触发 Average 告警,能第一时间暴露劣化线缆、故障网卡等物理层问题。
Zabbix 7.0 升级版:接口级监控的全面增强
如果你使用 Zabbix 7.0,可以直接采用仓库中的 7.0 版模板。这一版本对接口监控做了重构,是原模板最大的一次能力升级(作者在 7.0 版 README 中给出了完整的变更清单)。
采集架构:一个 master item + 依赖项
7.0 放弃了旧版逐接口独立轮询的方式,改为一次批量 walk 采集全部接口数据:
- Master item(主监控项):
net.if.walk,SNMP 类型,OID 为walk[1.3.6.1.2.1.2.2.1.2, ..., 1.3.6.1.2.1.31.1.1.1.18],每分钟执行一次,覆盖ifDescr、ifType、ifAdminStatus、ifOperStatus、ifName、ifHCInOctets、ifHCOutOctets、ifHighSpeed、ifAlias共 9 张表;该项history设为 0,不保存历史,只作为数据源。 - 依赖项(Dependent items):发现规则
net.if.discovery及其全部接口原型都是该 master item 的依赖项,通过预处理SNMP_WALK_TO_JSON把 walk 结果解析为 JSON,再用SNMP_WALK_VALUE按{#SNMPINDEX}提取对应字段。这样管理状态与运行状态永远来自同一次轮询,避免了两个状态因采样时刻不同而互相矛盾的问题。
由此派生出的接口原型包括:Admin status(ifAdminStatus,值映射IF-MIB::ifAdminStatus)、Operational status(ifOperStatus)、Bits received(ifHCInOctets,经CHANGE_PER_SECOND+MULTIPLIER 8换算为 bps)、Bits sent(ifHCOutOctets,同理换算)、Speed(ifHighSpeed,MULTIPLIER 1000000将 Mbps 换算为 bps,并加DISCARD_UNCHANGED_HEARTBEAT 1h降噪)、CRC errors(dot3StatsFCSErrors,独立 SNMP 轮询,2 分钟间隔)。同时为每个接口生成了名为"Network traffic"的进出流量图(入向绿色渐变线、出向蓝色粗线)。
ifType 过滤:只发现你关心的接口
接口通过宏{$NET.IF.IFTYPE.MATCHES}按ifType值过滤,默认值为^(6|136|161)$:
| ifType 值 | 含义 | 典型接口 |
|---|---|---|
6 | ethernetCsmacd | GigabitEthernet、Ten-GigabitEthernet |
136 | l3ipvlan | Vlan-interface |
161 | ieee8023adLag | Bridge-Aggregation |
VLAN 接口:默认只监控状态
默认情况下,ifType匹配{$NET.IF.NO_TRAFFIC.IFTYPE.MATCHES}(默认^136$,即 Vlan-interface)的接口只监控管理/运行状态和链路告警,通过一条 LLD override("VLAN interfaces: status only")关闭以下原型:
- 监控项原型:
Bits received、Bits sent、Speed、CRC errors - 触发器原型:
High bandwidth usage、CRC errors - 图形原型:
Network traffic
原因在于 VLAN 逻辑接口上的带宽统计往往不代表真实物理流量。如果确实需要监控 Vlan-interface 的带宽,把{$NET.IF.NO_TRAFFIC.IFTYPE.MATCHES}设为一个匹配不到任何值的正则(如^$)即可。
Link down 触发器:聪明地避免误报
"接口链路中断"是网络监控最常用的告警,但简单的operStatus=down会带来大量噪音。7.0 的 Link down 触发器要求同时满足以下条件才触发:
- 管理状态为
up(1),即端口没有被管理员 shutdown; - 上一次运行状态为
up(1); - 当前运行状态为
down(2)。
表达式为:
{$IFCONTROL:"{#IFNAME}"}=1 and last(/HP A5120/net.if.adminstatus[ifAdminStatus.{#SNMPINDEX}])=1 and last(/HP A5120/net.if.status[ifOperStatus.{#SNMPINDEX}])=2 and last(/HP A5120/net.if.status[ifOperStatus.{#SNMPINDEX}],#2)=1这样设计的结果是:发现时本来就 down 的接口不告警、管理员主动 shutdown 的端口不告警,只有"从 up 掉到 down"才触发 Average 告警;恢复条件为端口不再 down,或管理员将其 shutdown。如果想对某个特定接口关闭该告警,只需设置带上下文的宏,例如{$IFCONTROL:"GigabitEthernet1/0/24"}=0。
High bandwidth usage 触发器:15 分钟均值对比端口速率
带宽告警以接口速率为基准,取入向或出向流量的 15 分钟平均值与{$IF.UTIL.MAX}%(默认90)相乘后的阈值比较,且要求接口速率大于 0 才参与判断(速率为 0 的接口会被忽略,避免除零/误报):
(avg(/HP A5120/net.if.in[ifHCInOctets.{#SNMPINDEX}],15m)>({$IF.UTIL.MAX:"{#IFNAME}"}/100)*last(/HP A5120/net.if.speed[ifHighSpeed.{#SNMPINDEX}]) or avg(/HP A5120/net.if.out[ifHCOutOctets.{#SNMPINDEX}],15m)>({$IF.UTIL.MAX:"{#IFNAME}"}/100)*last(/HP A5120/net.if.speed[ifHighSpeed.{#SNMPINDEX}])) and last(/HP A5120/net.if.speed[ifHighSpeed.{#SNMPINDEX}])>0恢复条件为双向都回落到{$IF.UTIL.MAX} - 3%(即默认 87%)以下,同样保留迟滞防抖。阈值可按接口覆盖,例如{$IF.UTIL.MAX:"Ten-GigabitEthernet1/1/1"}=80。
7.0 版本宏一览
| 宏名 | 默认值 | 说明 |
|---|---|---|
{$IF.UTIL.MAX} | 90 | 带宽利用率阈值(%),基于接口速率、15 分钟均值,可按接口覆盖 |
{$IFCONTROL} | 1 | Link down 触发器开关:1=启用,0=禁用,可按接口覆盖 |
{$NET.IF.IFTYPE.MATCHES} | ^(6\|136\|161)$ | 参与发现的 ifType 正则:6=以太口、136=VLAN 口、161=聚合口 |
{$NET.IF.NO_TRAFFIC.IFTYPE.MATCHES} | ^136$ | 仅监控状态的 ifType 正则(不采集带宽/速率/CRC) |
7.0 新增触发器
7.0 在保留 CPU/内存/温度/重启告警的基础上,新增了电源与风扇可用性告警(last(...)=2即状态为deactive时触发 High 告警;not-install即值为 3 时不告警),以及上述 Link down(Average)与 High bandwidth usage(Warning)两条接口级触发器原型。至此模板共包含 10 条触发器,全部带有scope标签(availability/performance/capacity/notice),原Application标签体系被component标签体系取代。
版本演进:从 Zabbix 3.0 到 7.0 的关键变更
模板"Created on Zabbix 3.0",仓库目前同时维护 5.0(XML)、5.4(YAML)、6.0(YAML)、7.0(YAML)四个导出版本。作者在 7.0 README 的 "Changes for Zabbix 7.0" 中列出了完整的升级要点,核心变更汇总如下:
- 导出格式升级为
7.0(template_groups结构,不再有date字段); - 接口发现从传统
discovery[]迁移到批量walk[]+SNMP_WALK_TO_JSON预处理; - 移除了不再被 Zabbix 6.0+ 支持的原型名称中的位置宏
$1; - 修复了内存触发器误引用 CPU 监控项的问题;
- CRC 采集点从
dot3StatsAlignmentErrors更换为dot3StatsFCSErrors(真正的 FCS/CRC 错误); - 温度触发器迟滞改用 recovery expression 实现;
Application标签替换为component标签,触发器增加scope标签;- 风扇/电源状态引入值映射
HH3C-LSW-DEV-ADM-MIB::DevStatus; - 废弃宏
{HOSTNAME}替换为{HOST.NAME}; - 删除冗余项
Power Supply Sensor(与Internal Power Supply 1轮询同一 OID); - 新增风扇/电源
deactive状态告警、接口带宽/速率/状态/流量图、Link down 与高带宽告警,以及 VLAN 接口"仅状态"发现覆盖。
部署实操:导入、建主机、联模板
按照以下步骤即可在 Zabbix 中启用该模板(以 Zabbix 7.0 为例,旧版本流程相同):
- 导入模板:在 Zabbix Web 界面进入Data collection → Templates,点击右上角Import,选择对应版本的导出文件:
- Zabbix 5.0:导入 5.0 版 XML;
- Zabbix 5.4 / 6.0 / 7.0:分别导入 5.4 版 YAML、6.0 版 YAML 或 7.0 版 YAML。 导入后可在模板组Template Switches下找到名为HP A5120的模板。
- 创建/编辑主机:添加一台主机,配置 SNMP 接口,安全级别选择
authPriv、认证协议SHA、加密协议AES。 - 设置主机宏:在主机宏中填写
{$SNMP_V3_USER}、{$SNMP_V3_AUTHPASSPHRASE}、{$SNMP_V3_PRIVPASSPHRASE},并确保 SNMP 接口中引用了这些宏(宏值也可直接写入接口字段)。 - 链接模板:在主机Templates标签页链接HP A5120,等待一个发现周期与轮询周期后,即可在Latest data中看到 CPU、内存、温度、风扇、电源、系统信息等数据;5.0~6.0 版本会额外出现按接口展开的 CRC 错误项,7.0 版本还会出现每个接口的流量、速率与状态项。
- 按需调参:7.0 版本可按需调整接口发现范围(
{$NET.IF.IFTYPE.MATCHES})、VLAN 接口策略({$NET.IF.NO_TRAFFIC.IFTYPE.MATCHES})、带宽阈值({$IF.UTIL.MAX})与单接口链路告警开关({$IFCONTROL:"<ifName>"})。
关于兼容性的官方依据:作者在 7.0 版 README 中说明该版本已在HP A5120-48G EI设备与Zabbix 7.0.29上实测通过;旧版本文档则声明"创建于 Zabbix 3.0,应在更新/更旧的版本上均可用"。需要说明的是,A5120 各型号的硬件槽位/实体编号存在差异,若设备上风扇或电源模块的实际索引不是 1,需要根据HH3C-LSW-DEV-ADM-MIB的实际 walk 结果调整对应 OID。
结语
template_hp_a5120_switch_snmp_v3是一个小而精的社区模板:它用 SNMP v3 的强安全模型解决了网络设备凭据明文暴露的风险,用低密度发现解决了接口错误计数的自动扩展问题,又在 7.0 版本中通过"单次批量 walk + 依赖项"的架构把接口级监控做得既高效又智能。无论是直接导入生产环境,还是作为自定义 Comware/H3C 系交换机模板的参照蓝本,这份模板都具备很高的实战参考价值。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
Ant Design Progress 进度条组件完全指南:API 详解、源码实现与实战用法
Ant Design Progress 进度条组件完全指南:API 详解、源码实现与实战用法 本文以 Ant Design 仓库中的 Progress 组件文档
Zabbix 社区模板实战:用 SNMP 监控 3COM(HP)4500 28 口交换机——community-templates 模板深度解读
Zabbix 社区模板实战:用 SNMP 监控 3COM(HP)4500 28 口交换机——community templates 模板深度解读 本篇文章以 Z
Zabbix 监控 HP 1920-24G 交换机:SNMP HP v1920-24G 模板全解析与部署指南
Zabbix 监控 HP 1920 24G 交换机:SNMP HP v1920 24G 模板全解析与部署指南 本篇技术指南围绕 community templa
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考