【免费下载链接】community-templates
Zabbix Community Templates repository
本篇技术指南以 Zabbix Community Templates 仓库中的KHP-BROCADE-FC-PORT模板(位于 Network_Devices/Brocade/template_brocade_fc_(3.0.1)))为核心,讲解如何基于 SNMP 对 Brocade Fibre Channel(FC)交换机实现端口级全量监控。读完本文,你将掌握该模板的双 LLD 发现机制(FC 端口发现 + 接口流量发现)、21 个 FC 端口监控项的取值与预处理原理、两套告警触发器的表达式语义,以及基于 SW-MIB 的底层 OID 实现,可直接在 Zabbix 5.0/5.4/6.0 环境中部署使用。
模板概览:KHP-BROCADE-FC-PORT 能监控什么
该模板名为KHP-BROCADE-FC-PORT,归属于模板组ZBX-BROCADE-FC-TEMPLATES,面向运行 Brocade Fabric OS 的光纤交换机(SAN 交换机)。它不依赖任何自定义宏(README 明确说明 "There are no macros links in this template"),也没有链接其他模板,是一个完全自包含的 SNMP 监控方案。
从模板导出文件的元数据看(6.0 YAML 导出/6.0/template_brocade_fc_(3.0.1).yaml#L1-L8)),该模板支持 Zabbix 5.0(XML 格式)、5.4 与 6.0(YAML 格式)三个版本,仓库中对应 5.0/5.0)、5.4/5.4)、6.0/6.0) 三个目录。5.4 与 6.0 的 README 内容完全一致,5.0 版本只是发现规则顺序略有不同。
监控覆盖面可分为三大块:
| 监控维度 | 覆盖内容 | 数据来源 MIB |
|---|---|---|
| 端口身份与状态 | 端口名、WWN、Admin/Operational 状态、速率、发射器类型 | SW-MIB(swFCPort*) |
| 端口收发流量 | FC words / frames 收发计数、Multicast 帧、Class 2/3 帧 | SW-MIB(swFCPort*) |
| 端口错误计数 | CRC、Bad EOF、编码/不均衡错误、截断帧、超长帧 | SW-MIB(swFCPort*) |
| 接口流量 | 入向/出向字节速率(bps) | IF-MIB(ifInOctets/ifOutOctets) |
双 LLD 发现机制:FiberChannel Ports 与 Interface
模板通过两条SNMP agent类型的发现规则(Discovery Rules)自动枚举交换机的端口,无需手工逐个配置监控项。两条规则均以 300 秒(5 分钟)为更新周期,原型(prototype)项的生命周期(lifetime)为 7 天——即端口若从交换机上移除,其派生监控项会在 7 天后自动清理。
规则一:FiberChannel Ports(FC 端口发现)
- SNMP OID:
discovery[{#SNMPVALUE},SW-MIB::swFCPortIndex] - Key:
swFCPortIndex - 更新周期:300s
该规则基于 SW-MIB 中的swFCPortTable表执行 LLD,返回宏{#SNMPVALUE}(端口索引)与{#SNMPINDEX}。从 SW-MIB.mib 的源码可以看到,swFCPortTable位于swFCport节点下(::= { swFCport 2 }),其中每行(swFCPortEntry)以swFCPortIndex为索引:
"This object identifies the switch port index. Note that the value of a port index is 1 higher than the port number labeled on the front panel. E.g. port index 1 correspond to port number 0."
这是一个重要的实战细节:SNMP 返回的端口索引比交换机面板上的端口号大 1,排障时查看告警中的{#SNMPVALUE}需要减 1 才能对应到物理端口号。
规则二:Interface(接口流量发现)
- SNMP OID:
IF-MIB::ifDescr - Key:
ifDescr - 更新周期:300s
该规则遍历 IF-MIB 的ifTable,并带有一个正则过滤器:{#SNMPVALUE}匹配/(YAML 中 filter 条件/6.0/template_brocade_fc_(3.0.1).yaml#L24-L30)),用于过滤掉不符合接口描述的条目,从而只保留有效的 FC 接口。ifDescr发现得到的{#SNMPINDEX}随后被用于读取ifInOctets.{#SNMPINDEX}与ifOutOctets.{#SNMPINDEX}。
两条发现规则配合,既覆盖了 FC 协议层的端口细节(SW-MIB),又覆盖了 IP 化接口的字节流量(IF-MIB),形成了对 Brocade 交换机端口完整的双层观测。
FC 端口监控项:21 个 item prototype 详解
FiberChannel Ports发现规则下共挂载 21 个 item prototype,全部为SNMP agent类型、更新周期 300s、历史保留 7 天,统一打上Application: Port(s)标签。下表按功能分组列出完整清单(Key 中{#SNMPVALUE}由 LLD 自动代入具体端口索引):
| 分组 | 监控项名称 | Key | 底层 OID(SW-MIB) | 类型/单位 |
|---|---|---|---|---|
| 状态 | Admin status of port $1 | swFcPortAdmStatus[{#SNMPVALUE}] | swFCPortAdmStatus.{#SNMPINDEX} | 值映射swFcPortStatus |
| 状态 | Operational status of port $1 | swFCPortOpStatus[{#SNMPVALUE}] | swFCPortOpStatus.{#SNMPINDEX} | 值映射swFcPortStatus |
| 身份 | Description of port $1 | swFCPortName[{#SNMPVALUE}] | swFCPortName.{#SNMPINDEX} | 字符型(不存趋势) |
| 身份 | WWN of port $1 | swFCPortWwn[{#SNMPVALUE}] | swFCPortWwn.{#SNMPINDEX} | 字符型(不存趋势) |
| 身份 | Speed of port $1 | swFCPortSpeed[{#SNMPVALUE}] | swFCPortSpeed.{#SNMPINDEX} | 值映射swFcPortSpeed |
| 身份 | Transmitter type of port $1 | swFCPortTxType[{#SNMPVALUE}] | swFCPortTxType.{#SNMPINDEX} | 值映射swFcPortTXType |
| 收发 | Words transmitted on port $1 | swFCPortTxWords[{#SNMPVALUE}] | swFCPortTxWords.{#SNMPINDEX} | 计数,words,SIMPLE_CHANGE |
| 收发 | Words received on port $1 | swFCPortRxWords[{#SNMPVALUE}] | swFCPortRxWords.{#SNMPINDEX} | 计数,words,SIMPLE_CHANGE |
| 收发 | Frames transmitted on port $1 | swFCPortTxFrames[{#SNMPVALUE}] | swFCPortTxFrames.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 收发 | Frames received on port $1 | swFCPortRxFrames[{#SNMPVALUE}] | swFCPortRxFrames.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 收发 | Multicast frames transmitted on port $1 | swFCPortTxMcasts[{#SNMPVALUE}] | swFCPortTxMcasts.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 收发 | Multicast frames received on port $1 | swFCPortRxMcasts[{#SNMPVALUE}] | swFCPortRxMcasts.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 收发 | Class2 frames received on port $1 | swFCPortRxC2Frames[{#SNMPVALUE}] | swFCPortRxC2Frames.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 收发 | Class3 frames received on port $1 | swFCPortRxC3Frames[{#SNMPVALUE}] | swFCPortRxC3Frames.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 错误 | CRC errors received on port $1 | swFCPortRxCrcs[{#SNMPVALUE}] | swFCPortRxCrcs.{#SNMPINDEX} | 计数,errors,SIMPLE_CHANGE |
| 错误 | Bad EOF delimited frames received on port $1 | swFCPortRxBadEofs[{#SNMPVALUE}] | swFCPortRxBadEofs.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 错误 | Encoding or disparity errors in frames received on port $1 | swFCPortRxEncInFrs[{#SNMPVALUE}] | swFCPortRxEncInFrs.{#SNMPINDEX} | 计数,errors,SIMPLE_CHANGE |
| 错误 | Disparity errors received on port $1 | swFCPortRxEncOutFrs[{#SNMPVALUE}] | swFCPortRxEncOutFrs.{#SNMPINDEX} | 计数,errors,SIMPLE_CHANGE |
| 错误 | Truncated frames received on port $1 | swFCPortRxTruncs[{#SNMPVALUE}] | swFCPortRxTruncs.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 错误 | Truncated too-long frames received on port $1 | swFCPortRxTooLongs[{#SNMPVALUE}] | swFCPortRxTooLongs.{#SNMPINDEX} | 计数,frames,SIMPLE_CHANGE |
| 错误 | (由触发器聚合) | — | swFCPortRxEncOutFrs等 | — |
注:README 中列出的错误项还包括
swFCPortRxEncOutFrs(Disparity errors received),已并入上表。全部 21 个原型项在 6.0 YAML 导出/6.0/template_brocade_fc_(3.0.1).yaml#L103-L459) 中均可逐一核对。
计数器项为何都要做 SIMPLE_CHANGE 预处理
观察 YAML 可以发现,所有以Counter32为 SYNTAX 的 SW-MIB 对象(swFCPortTxWords、swFCPortRxWords、swFCPortRxCrcs等)在模板中都被配置了SIMPLE_CHANGE预处理步骤。这与 MIB 定义直接对应——SW-MIB.mib 中这些对象均声明为SYNTAX Counter32:
"This object counts the number of Fibre Channel words that the port has transmitted."
SNMP 轮询拿到的是一次性的累计绝对值,SIMPLE_CHANGE将其转换为相邻两次轮询之间的差值,即“每秒增量(速率)”语义,使监控数据能直观反映端口当前的实际活动水平,而不是一个只增不减的大数。这也是后续错误触发器能以“某时间段内增量 > 0”作为判定依据的前提。
状态类监控项依赖值映射(valuemap)
三个状态类监控项分别绑定了模板内置的 3 个值映射,把 MIB 中的数字枚举翻译成可读文本(定义见 6.0 YAML 的 valuemaps 段/6.0/template_brocade_fc_(3.0.1).yaml#L577-L642)):
swFcPortStatus(用于 Admin/Operational 状态)——对应 SW-MIB.mib 中swFCPortOpStatus与swFCPortAdmStatus的枚举:
| 值 | 映射文本 | MIB 语义 |
|---|---|---|
| 0 | unknown | 端口模块可能物理缺失 |
| 1 | online | 可以正常转发用户帧 |
| 2 | offline | 离线 |
| 3 | testing | 测试状态,不转发用户帧 |
| 4 | faulty | 故障 |
swFcPortSpeed(用于端口速率)——对应swFCPortSpeed枚举(注意该对象在较新 MIB 中已标记为 obsolete,但本模板仍基于其取值):
| 值 | 映射文本 | 备注 |
|---|---|---|
| 1 | 1 Gb | one-GB |
| 2 | 2 Gb | two-GB |
| 3 | Auto-Negotiate | 自协商 |
| 4 | 4 Gb | four-GB |
| 5 | 8 Gb | eight-GB |
| 6 | 10 Gb | ten-GB |
| 7 | unknown | — |
| 8 | 16 GB | sixteen-GB(原文大小写如此) |
swFcPortTXType(用于发射器类型)——对应 MIB 中swFCPortTxType枚举:1=unknown、2=long wave laser(长波激光)、3=short wave laser(短波激光)、4=long wave LED(长波 LED)、5=copper (electrical)(铜缆/电口)。
这些值映射让 Zabbix 最新值与告警信息直接展示可读状态,便于值班人员快速判断端口是online、offline还是faulty。
接口流量监控项:bps 化的 ifInOctets / ifOutOctets
Interface发现规则下挂载 2 个 item prototype(更新周期 60 秒、历史 7 天、单位 bps):
- Incoming traffic on $1:Key
ifInOctets[{#SNMPVALUE}],OIDIF-MIB::ifInOctets.{#SNMPINDEX} - Outgoing traffic on $1:Key
ifOutOctets[{#SNMPVALUE}],OIDIF-MIB::ifOutOctets.{#SNMPINDEX}
这两个计数器项采用了两级预处理(见 YAML 第 41-49 行/6.0/template_brocade_fc_(3.0.1).yaml#L41-L49)):
CHANGE_PER_SECOND:把字节累计计数换算为每秒字节增量(B/s);MULTIPLIER,参数8:乘以 8,把 B/s 换算为 bps(bit/s)。
最终 Zabbix 中展示的即为端口实时入向/出向比特率,单位统一为bps,与交换机端口速率(如 8 Gb、16 Gb)可直接对比,方便观察端口利用率。
触发器:两套端口健康告警
模板内置 2 个 trigger prototype(均挂载在FiberChannel Ports发现规则下,优先级average),会随 LLD 自动为每个端口生成实例:
1. 端口错误告警
- 名称:
Error(s) was detected on {#SNMPVALUE} - 表达式:
last(/KHP-BROCADE-FC-PORT/swFCPortRxCrcs[{#SNMPVALUE}])>0 or avg(/KHP-BROCADE-FC-PORT/swFCPortRxBadEofs[{#SNMPVALUE}],1s)>0 or avg(/KHP-BROCADE-FC-PORT/swFCPortRxEncOutFrs[{#SNMPVALUE}],1s)>0 or avg(/KHP-BROCADE-FC-PORT/swFCPortRxTooLongs[{#SNMPVALUE}],1s)>0 or avg(/KHP-BROCADE-FC-PORT/swFCPortRxTruncs[{#SNMPVALUE}],1s)>0该触发器聚合了 5 类接收错误计数:CRC 错误(swFCPortRxCrcs)、坏 EOF 定界符帧(swFCPortRxBadEofs)、帧外编码/不均衡错误(swFCPortRxEncOutFrs)、超长帧(swFCPortRxTooLongs)、截断帧(swFCPortRxTruncs)。由于这些项已通过SIMPLE_CHANGE预处理变为增量值,>0即代表在最近两次轮询之间出现了新的错误——这正是 SAN 环境中光路劣化、线缆/光模块故障的典型前兆。
2. 端口运行状态变化告警
- 名称:
Operational status {HOST.NAME} has changed on port {#SNMPVALUE} - 表达式:
last(/KHP-BROCADE-FC-PORT/swFcPortAdmStatus[{#SNMPVALUE}],#2)<1 and last(/KHP-BROCADE-FC-PORT/swFCPortOpStatus[{#SNMPVALUE}],#2)<>1语义为:取最近 2 次采样的 Admin 状态与 Operational 状态,若Admin 状态(期望状态)不是 online(<1,即 offline/testing/faulty)且 Operational 状态(实际状态)也不是 online,则触发告警。也就是说,当某端口被管理性禁用、进入测试或故障状态,且实际状态同步偏离在线时,Zabbix 会以 average 优先级报警,提示运维人员端口已不可用。
5.0 版本(XML 导出/5.0/template_brocade_fc_(3.0.1).xml))使用了等价的旧式表达式语法{KHP-BROCADE-FC-PORT:...}.prev()与.last(0)/.avg(1),而 5.4/6.0 则统一为函数式语法last(...,#2)/avg(...,1s),功能完全一致,升级 Zabbix 版本时触发器逻辑无需改动。
图形原型:流量图与端口监控大盘
模板提供 2 个 graph prototype,随 LLD 自动为每个端口生成图形:
Port {#SNMPVALUE} - Traffic (bits/sec, 95th Percentile):由ifInOctets(绿色填充区域,颜色00CF00)与ifOutOctets(深蓝粗线,颜色002A97)构成,并开启percent_left: 0.95(左侧 95 百分位刻度),可直观查看端口 95 百分位带宽,判断峰值负载。
Monitor port {#SNMPVALUE}:单图聚合 13 条 FC 协议层曲线,覆盖收发 words、收发 frames、收发 Multicast、Class 2/3 帧以及 5 类错误计数(BadEofs、Crcs、EncInFrs、TooLongs、Truncs),每条曲线颜色不同并多置于右 Y 轴(见 YAML 图原型段/6.0/template_brocade_fc_(3.0.1).yaml#L471-L576))。排障时一张图即可横向对比“正常流量 vs 错误计数”的时间相关性。
部署与使用步骤
导入模板
- 进入 Zabbix 前端:Data collection → Templates;
- 点击右上角Import,选择对应版本的模板文件:
- Zabbix 5.0:导入 template_brocade_fc_(3.0.1).xml/5.0/template_brocade_fc_(3.0.1).xml);
- Zabbix 5.4:导入 template_brocade_fc_(3.0.1).yaml/5.4/template_brocade_fc_(3.0.1).yaml);
- Zabbix 6.0:导入 template_brocade_fc_(3.0.1).yaml/6.0/template_brocade_fc_(3.0.1).yaml);
- 导入成功后可在模板列表中找到
KHP-BROCADE-FC-PORT,所属模板组ZBX-BROCADE-FC-TEMPLATES。
关联主机并配置 SNMP
- 在主机(Brocade 交换机)配置中,将
KHP-BROCADE-FC-PORT链接到主机; - 确认主机的SNMP interfaces已正确填写交换机管理 IP、端口(默认 161)与SNMP version(v1/v2c 均可,模板未限定 v3);
- 模板未定义任何宏,因此无需额外宏配置——但主机级需保证 SNMP community(v2c)与交换机侧配置一致,且交换机需开放 SW-MIB 与 IF-MIB 的读取权限。
验证与调优
- 链接模板后,等待首次 LLD 轮询(最长 300 秒),在Data collection → Hosts → Items中应能看到按端口展开的
swFCPort*与ifIn/OutOctets系列监控项; - 检查某端口的
swFCPortOpStatus最新值是否为online,确认 SNMP 数据链路正常; - 若发现误报/漏报,可在触发器表达式层面按需调整聚合的秒数窗口(如将
avg(...,1s)改为更长周期),或结合 SW-MIB.mib 中更多计数器(如swFCPortRxBadOs、swFCPortC3Discards)自行扩展原型项。
源码级补充:SW-MIB 中 FC 端口对象的权威定义
本模板所有swFCPort*监控项均直接映射到 Brocade SW-MIB 的swFCPortTable。仓库中随 template_fiber-channel_switch-brocade_6505_snmpv3 附带完整的 SW-MIB.mib,可作为核对 OID 语义的权威参考。关键结论:
- 表结构:
swFCPortTable ::= { swFCport 2 },每行swFCPortEntry以swFCPortIndex(SwPortIndex)为索引(MIB L1283-L1301); - 对象族谱:
swFCPortOpStatus=entry 4、swFCPortAdmStatus=entry 5、swFCPortTxType=entry 7、swFCPortTxWords=entry 11、swFCPortRxWords=entry 12、swFCPortTxFrames=entry 13、swFCPortRxFrames=entry 14、swFCPortRxC2Frames=entry 15、swFCPortRxC3Frames=entry 16、swFCPortRxMcasts=entry 18、swFCPortRxEncInFrs=entry 21、swFCPortRxCrcs=entry 22、swFCPortRxTruncs=entry 23、swFCPortRxTooLongs=entry 24、swFCPortRxBadEofs=entry 25、swFCPortRxEncOutFrs=entry 26、swFCPortTxMcasts=entry 30、swFCPortWwn=entry 34、swFCPortSpeed=entry 35、swFCPortName=entry 36; - 数据类型约定:除
swFCPortWwn(OCTET STRING SIZE(8))、swFCPortName(DisplayString SIZE(0..255))为字符串外,其余统计对象均为Counter32,这解释了模板对字符型项设置trends: 0(不存趋势)而对计数项统一配置SIMPLE_CHANGE预处理的工程依据。
适用前提与注意事项
- 版本前提:模板随 Zabbix 5.0/5.4/6.0 分别提供导出文件,跨大版本导入可能因导出格式差异报错,请按实际 Zabbix 版本选择对应文件;
- 端口号换算:
{#SNMPVALUE}(swFCPortIndex)比面板端口号大 1,告警定位时需换算; - MIB 兼容性:
swFCPortSpeed在部分较新 Fabric OS 的 MIB 中已标记为obsolete(见 MIB L1703-L1721),若交换机固件不再返回该对象,对应监控项将显示不支持(Not supported),不影响其余端口项工作; - 无宏与无模板链接:模板零依赖,可开箱即用;如需针对不同交换机调整轮询周期,可复制模板后在原型项上修改 delay 值。
结语
KHP-BROCADE-FC-PORT是一个结构紧凑、零依赖的 Brocade FC 端口监控模板:双 LLD 自动发现全部端口、21 个 SW-MIB 监控项覆盖身份/状态/流量/错误四个维度、SIMPLE_CHANGE预处理把 Counter32 变为实时增量、两套 average 级触发器分别捕获端口错误爆发与状态漂移,再配合 95 百分位流量图与 13 曲线监控大盘,构成了一套完整的 SAN 交换机端口健康观测方案。无论是日常带宽监控、容量规划,还是光路劣化与端口故障的快速定位,均可直接套用本文所述配置落地。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
awesome-free-saas自由职业者工具箱:10个撑起个人生意的免费工具
awesome free saas自由职业者工具箱:10个撑起个人生意的免费工具 awesome free saas 是一份由社区维护的 免费SaaS工具精选清
使用 Lightning Fabric 的 ModelParallelStrategy 训练 7B 级大模型:张量并行与 2D 并行(TP + FSDP)实战
使用 Lightning Fabric 的 ModelParallelStrategy 训练 7B 级大模型:张量并行与 2D 并行(TP + FSDP)实战
Zabbix 8.0 模板深度解析:基于 SNMP 监控 Brocade FC 光纤交换机
Zabbix 8.0 模板深度解析:基于 SNMP 监控 Brocade FC 光纤交换机 本篇文章以 Zabbix 官方模板 Brocade FC by SN
指标监控可观测性告警运维
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考