简介:为Zabbix用户提供了一套开箱即用的Juniper EX系列交换机监控模板,适用于需要统一管理企业网络设备的管理员。资源包共3个文件,以XML模板文件为主,辅以Markdown说明文档和License授权文件,压缩包整体仅10KB,轻量易部署。使用者可将其导入Zabbix,透过SNMP协议快速采集接口状态、CPU利用率、内存使用、端口流量等关键指标,并结合预置触发器与可视化图形及时发现端口故障、内存溢出等异常。目前已有419人学习,模板内置的监控项、触发器、图形和屏幕配置能显著减少手动定义监控项的工作量,适合追求高效监控落地的运维团队按自身网络环境调整阈值后直接使用。
1. Juniper EX 交换机的 Zabbix 模板:为什么说它是网工最省事的 SNMP 落地方式
接手一台 Juniper EX4300 的时候,我第一个动作不是登 CLI,而是在想 Zabbix 里能不能把它完整管起来。EX 系列交换机不是不能监控,真正的问题是:从零写 item 的话,你得对着 MIB 文件逐个翻 OID,CPU、内存、温度、电源、风扇每个都要单独试,还要处理 Junos 私有表和标准 IF-MIB 对不上的那些边界。这套 Zabbix-Template-Juniper-Ex-Series-Switch 模板就是干这个的,它把 EX 系列的设备级监控项、端口发现规则、硬件实体发现规则和告警触发器都封装好了,导入 Zabbix 之后填一个 SNMP community 就能出数据。适合网络运维、兼职管监控的小团队,以及那些想快速上线交换机监控、又不想从 OID 开始啃的从业者。
2. 模板内部结构:EX 系列的监控项、发现规则与触发器怎么协作
2.1 模板的三层骨架:静态 item、发现规则、触发器各管什么
一份能落地的 Zabbix 交换机模板,绝不会是 item 的堆砌。打开这套模板的导出 XML 后,先看结构,基本是三层。第一层是静态 item,负责固定的设备级数据,比如系统运行时间 sysUpTime(1.3.6.1.2.1.1.3.0)、SNMP 服务可达性、交换机名称 sysName,这些 OID 不随硬件变化,所以写死在模板里。第二层是发现规则(discovery rule),负责批量生成 item。EX 交换机的物理端口从 8 口到 48+ 口不等,还有电源、风扇、温度传感器这类随型号和堆叠状态变化的实体,不可能在模板里逐个写死,必须靠发现规则去扫。第三层是触发器,静态触发器管设备级阈值,原型触发器(trigger prototype)挂靠在发现规则下,扫出来多少个实体就自动生成多少个告警规则。
拿到模板后的第一个习惯动作,是看宏定义区,一般在 XML 最上面。这套模板默认定义了 {$SNMP_COMMUNITY}、{$JNX_CPU_CRIT}、{$JNX_TEMP_CRIT}、{$JNX_MEM_CRIT}、{$IFNAME_MATCHES} 这几个宏。{$SNMP_COMMUNITY} 是对接设备时的口令,通常在主机级覆盖;{$JNX_CPU_CRIT} 这类阈值宏保留在模板级,方便批量调整。这个设计的价值在于:同一个模板挂到上百台 EX 上,社区字符串和告警阈值都能按机器差异化覆盖,不需要复制模板,也不影响后续模板升级。
模板组件之间还可以拆开讲。Zabbix 6.x 里模板可以挂其他模板,这套模板如果做得干净,会把接口监控拆成两部分:标准 IF-MIB 的部分引用 Zabbix 自带的基础网络接口模块,Juniper 私有的 jnxOperatingTable 部分自己写。这样省了重复发明轮子,接口的流量、错误包、丢包这些通用指标,官方模块已经覆盖得很细。导入后打开模板的 Linked templates 页签,能看到这种继承关系。如果你拿到的是单文件模板,也没有问题,就是把通用部分复制进来了,只是后续官方模块升级时没法自动同步,这是取舍。
还有一点容易被忽略:模板自带的图形(graphs)。图形不是必需品,但模板里预置的 CPU utilization、Temperature 这类图,省去了每台主机手工配图的功夫。导入到 Zabbix 6.0 以上版本时要注意,图形和仪表盘是分开存储的,导进去之后到对应页签确认是否都在。如果只导入了 item 没见到图,多半是导入时把图形相关的 XML 节点漏了,重新勾选一次即可。
2.2 关键 OID 对照表:jnxOperatingTable 与标准 IF-MIB 怎么配合
Juniper 设备级监控的主战场在私有 MIB,挂在企业 OID 树 1.3.6.1.4.1.2636 下面。模板里最核心的是 jnxOperatingTable,完整 OID 是 1.3.6.1.4.1.2636.3.1.13.1。这张表特殊在于:它是一张一维运行单元表,每一行代表一个能独立上报状态的硬件单元,可能是路由引擎 RE、可能是线卡 FPC、可能是 PFE 转发芯片、可能是电源控制板,也可能是机箱温度传感器。判断一行到底是谁,靠的是列 2 的 jnxOperatingDescr。
| OID 节点 | 列名 | 含义 | 模板用途 |
|---|---|---|---|
| 1.3.6.1.4.1.2636.3.1.13.1.2 | jnxOperatingDescr | 组件文本描述,如 "EX4300-48P RE 0" | 识别组件、给 item 命名 |
| 1.3.6.1.4.1.2636.3.1.13.1.3 | jnxOperatingType | 组件类型编号,RE/FPC/PFE 等 | 筛选哪类实体参与发现 |
| 1.3.6.1.4.1.2636.3.1.13.1.5 | jnxOperatingState | 运行状态,online/offline | 硬件失效告警 |
| 1.3.6.1.4.1.2636.3.1.13.1.7 | jnxOperatingTemp | 组件温度,多数平台单位摄氏度 | 温度告警 |
| 1.3.6.1.4.1.2636.3.1.13.1.8 | jnxOperatingCPU | CPU 占用率,精度随版本变化 | CPU 告警 |
| 1.3.6.1.4.1.2636.3.1.13.1.9 | jnxOperatingMem | 内存占用率,精度随版本变化 | 内存告警 |
模板对这棵表的处理方式是建一条发现规则,snmp_oid 指向整张表,然后让原型 item 用 {#SNMPINDEX} 继承行索引。下面这是简化后的发现规则 XML 结构,实际模板里字段会更多,但核心就这几项:
<discovery_rule> <name>Juniper EX: Discover operating components</name> <type>SNMP</type> <snmp_oid>1.3.6.1.4.1.2636.3.1.13.1</snmp_oid> <key>jnxOperatingTable.discovery</key> <delay>3600</delay> </discovery_rule>逻辑说明:type 为 SNMP 时,Zabbix 会对 snmp_oid 做一次 walk,把返回的每一行变成一个宏环境,行索引自动写入 {#SNMPINDEX}。delay 3600 表示每小时重新发现一次,对硬件实体来说这个频率够用,太频繁反而增加 SNMP 负载。如果设备是虚拟机箱(Virtual Chassis),成员加入或退出后实体行号会变化,小时级发现周期能保证数据及时跟上。
原型 item 这边,典型写法是把组件身份带进 item:
<item_prototype> <name>Juniper EX: Temperature on {#SNMPINDEX}</name> <type>SNMP</type> <snmp_oid>1.3.6.1.4.1.2636.3.1.13.1.7.{#SNMPINDEX}</snmp_oid> <key>jnxOperatingTemp[{#SNMPINDEX}]</key> <units>℃</units> <preprocessing> <step> <type>MULTIPLIER</type> <params>0.01</params> </step> </preprocessing> </item_prototype>逻辑说明:{#SNMPINDEX} 在发现执行时被替换成实际行号,比如 1.3.6.1.4.1.2636.3.1.13.1.7.3 表示第 3 行的温度。preprocessing 里的 MULTIPLIER 0.01 是单位换算用的,因为 jnxOperatingTemp 在某些 Junos 版本上按 0.1℃ 上报,乘 0.01 是常见做法。但注意这不是通用的——不同型号、不同版本精度不一致,我在第 4 章展开讲这个坑。
接口部分走标准 IF-MIB(1.3.6.1.2.1.2.2.1),流量用 ifHCInOctets/ifHCOutOctets 这对 64 位计数器,端口状态用 ifOperStatus(列 8)。EX 的物理口命名是 ge-0/0/0、xe-0/0/0、et-0/0/0 这种格式,逻辑口是 irb、lo0、me0、vlan 这些。发现规则里用 {$IFNAME_MATCHES} 正则(默认 ^(ge|xe|et|ae)-)把逻辑接口过滤掉,避免把虚拟接口当物理端口监控。
2.3 触发器设计思路:哪些告警必须开,哪些默认就该关
模板自带的触发器一般集中五类:组件温度过高、CPU 持续占用偏高、内存偏高、物理端口 down、电源或风扇单元失效。这五类是正确的监控重点,但默认触发器的写法直接决定你上线后会不会被告警骚扰。
先说 CPU。jnxOperatingCPU 是轮询值,单次采集很容易抖动,所以成熟模板会给触发器加持续时间,典型表达式是 min(5m) > {$JNX_CPU_CRIT},意思是最近 5 分钟平均值超过阈值才告警,而不是一碰就报。EX 的 RE 负责控制面,PFE 负责转发面,两条曲线要分开看。控制面 CPU 高通常意味着有异常流量冲击或 BGP/OSPF 计算异常,转发面 CPU 高则可能和 ACL、组播复制有关,告警阈值也应该分开。模板如果只给了一个 CPU 触发器,建议复制一份按 RE/PFE 分开。
再说端口 down。这个触发器最容易翻车:接入层用户的网线被拔,ifOperStatus 从 up 变 down,这本来是正常物理行为,但如果不区分端口类型,告警就会刷屏。建议触发器表达式里限定只对上行物理口生效,实际操作是把 {#IFNAME} 匹配到 ^(xe|et|ae)- 的前缀。这里有个 helper 级技巧:先用发现规则把所有物理口都建了 item,再在触发器里用正则过滤告警范围,而不是在发现规则里过滤,因为端口流量数据是全都要的,只是告警范围收窄。
温度阈值不要写死在模板里。EX2200 和 EX4300 的工作温度范围差异很大,机房空调故障场景下不同机型承受力也不同。模板默认的 {$JNX_TEMP_CRIT} 通常取 70℃ 到 80℃ 之间,具体值建议按实际机房环境覆盖到主机级宏。电源风扇的触发器属于硬件失效类,一般保持默认即可,但 Virtual Chassis 环境下留意实体列表会随成员加入退出变化,原型触发器会自动跟随发现结果,如果 Zabbix 版本老于 5.0,发现规则删掉旧实体后触发器可能残留,需要手动清理。
3. 导入与配置:从 Junos CLI 到 Zabbix 界面完整跑通
3.1 在 EX 上开通 SNMP:最小权限配置与验证
这一步的关键是权限。很多人图省事把 community 设成 read-write,其实 Junos 里只需要 read-only。进 configure 模式执行以下命令:
configure set snmp community zabbix version v2c set snmp community zabbix authorization read-only set snmp community zabbix clients 192.168.100.0/24 set snmp location "IDC-Floor3-RackA12" set snmp contact "netops" commit and-quit参数说明:community zabbix 是团体名,后面 Zabbix 主机宏里要填同一个值,别用 public,否则网络里任何机器都能读走你的 ARP 表和配置摘要。clients 192.168.100.0/24 限定只有监控网段能访问,这是 Junos 的 SNMP 访问控制列表,强烈建议配上。version v2c 是必须的,模板的接口发现依赖 64 位计数器 ifHCInOctets,SNMPv1 不支持。location 和 contact 不是必填,但 Zabbix 的 snmp location、snmp contact 两个 item 可以把它读出来,填了以后资产盘点方便。
commit 之后先在交换机本机验证:
show snmp能看到 community 和 client 列表就说明配置生效。如果这台设备之前被其他网管系统挂过,先看下现有配置,同名 community 冲突会导致 commit 时报 "Node already exists",需要先删旧的:
delete snmp community zabbix提示:如果交换机管理接口上挂了 loopback filter 或防火墙策略,记得放行 UDP 161 端口来自监控服务器的流量,否则 snmpwalk 会一直超时。
3.2 Zabbix 导入模板与主机绑定
模板导入路径是 Configuration → Templates → Import。选中下载的 XML 文件后点 Import,导入成功会看到模板出现在 Templates 列表里。两个注意点:第一,模板如果是从旧版 Zabbix 导出的,导入到 6.x 时选 "Update existing" 可能提示 schema 不兼容,建议选择新建,然后在页面上按提示调整宏关联;第二,模板名一般带 Juniper 或 EX 字样,导入后搜索一下确认没进错组。
绑定主机的步骤是 Host → Create host → 填 IP → Templates 页签里 Link 模板 → Macros 页签覆盖参数。宏覆盖是这套模板能不能跑对的关键,常见覆盖项如下:
| 宏 | 示例值 | 说明 |
|---|---|---|
| {$SNMP_COMMUNITY} | zabbix | 与交换机配置的 community 严格一致 |
| {$JNX_TEMP_CRIT} | 75 | 设备温度 critical 阈值,摄氏度 |
| {$JNX_CPU_CRIT} | 85 | CPU critical 阈值,百分比 |
| {$IFNAME_MATCHES} | ^(ge|xe|et)- | 参与发现的物理端口名正则 |
这里有个容易漏的点:模板自带的 {$SNMP_COMMUNITY} 默认值通常是 public。如果你在模板层改了默认值,所有挂这个模板的主机都会跟着变;如果交换机之间 community 不一样,就必须在主机级覆盖。我一般习惯保留模板默认值,在每台主机的 Macros 里单独填,这样新增主机时少一个踩坑点。
绑定后不会立刻有数据,等一个采集周期。静态 item 的 update interval 一般是 60s,发现规则是 3600s,所以端口发现数据最多要等一小时才全。等不及的话,Discovery 页签找到对应规则,点 Execute now 手动触发一次,几秒内就能看到新的 discovered host。
3.3 验证采集链路:从 snmpwalk 到最新数据
先在监控服务器上直接打交换机,确认 MIB 数据本身没问题:
snmpwalk -v2c -c zabbix 192.168.100.1 1.3.6.1.4.1.2636.3.1.13.1重点看输出里有多少条记录。正常一台 EX4300 会有十几到几十条,对应 RE0/RE1、FPC 和电源传感器。如果只回了一条,多半是交换机侧 SNMP 进程异常;如果完全超时,先 ping 再查有没有防火墙策略挡了 UDP 161。接着按列抽查 CPU 和温度:
for oid in 1.3.6.1.4.1.2636.3.1.13.1.8 1.3.6.1.4.1.2636.3.1.13.1.7; do echo "== $oid ==" snmpwalk -v2c -c zabbix 192.168.100.1 "$oid" done逻辑说明:循环里分别 walk CPU 列和温度列,拿到的原始值和交换机上 show chassis environment 对比,能提前发现单位问题,避免上了 Zabbix 才发现数值不对。
Zabbix 侧验证走 Monitoring → Latest data,输入主机名过滤。先看 Uptime,有数值说明 item 走通了;再看 jnxOperatingDescr 发现出来的项,确认 RE 和 FPC 都扫到了。图形验证走 Monitoring → Host graphs,模板自带的 CPU utilization 和 Temperature 图如果出现断点,优先怀疑 SNMP timeout。Zabbix 默认 SNMP timeout 是 3 秒,对大型机箱的 bulk 请求往往不够,改成 5 秒的方法在 Administration → General → Other 里,但不要超过 10 秒,否则 item 会堆积。
4. 避坑与常见问题:EX 模板上线后最常踩的五个坑
4.1 现象:CPU 监控值常年 99%,交换机却一点也不卡
原因:jnxOperatingCPU 的返回值精度不统一。模板预处理写的 MULTIPLIER 0.01,在部分老版本 Junos 上原始值已经是百分比,再乘一次就翻倍;反过来,新版本某些平台返回 0-10000 的整数值,不乘又偏低。这个问题属于典型的"模板能用但不一定对你这台设备正确"。
解决:先 snmpwalk 拿到原始值,再对照 show system processes 里的实际占用判断方向。如果翻倍,把预处理改成 MULTIPLIER 1 或直接删掉;如果低 100 倍,确保是 0.01。改完到 Latest data 复查,CPU 值应该落在 0-100 区间内。从那以后我每次接新设备都先抓一次原始 OID 再导模板,这个习惯救了我好几次。
4.2 现象:端口 down 告警刷屏,全是接入层网线被拔
原因:ifOperStatus 是物理层状态,用户拔网线端口就是 down。模板默认触发器把每个发现的物理端口都纳入告警,于是"正常断线"和"故障断线"分不清。
解决:把物理端口 down 触发器加一个正则限制,只监控上行链路,比如 ^xe- 或 ^et- 前缀,接入端口不在触发器 scope 内;或者用宏全局排除。更稳的方案是配合 LLDP:EX 默认开了 LLDP,Zabbix 里可以读 lldpRemTable,只对存在 LLDP 对端的端口做 down 告警。这样用户拔线不报,真正的上行链路断了才报,告警准确率高很多。
4.3 现象:Virtual Chassis 加入新成员后,电源风扇监控项消失
原因:首先,发现规则扫到旧实体的缓存没有被及时清理;其次,原型 item 的 name 如果写成固定文本没带 index 或 descr,新旧实体名字一样,Zabbix 认为还是同一个,数据串了。
解决:把发现规则里的 Keep lost resources period 从默认 30 天改短到 7 天;然后检查原型 item 的 name,确保包含 {#SNMPINDEX} 或 {#JNXOPDESCR}。另外,虚拟机箱里 RE 和 FPC 的 slot 编号会随成员编号变化,命名时优先用 jnxOperatingDescr 里的文本,而不是 slot 号,否则成员重排后监控项对不上物理设备。
4.4 现象:温度图形很平滑,但阈值谁说了都不算
原因:jnxOperatingTemp 单位不统一。多数 EX 平台直接返回摄氏度整数,少数软件版本按 0.1 摄氏度返回。模板里如果统一按整数处理,那几台机器读数会偏大 10 倍,75℃ 阈值等于实际 7.5℃ 就误报。
解决:用 snmpwalk 抓 jnxOperatingTemp 原始值,和交换机上 show chassis environment 的温度对比,如果有倍率差异,在这台主机的对应 item 预处理里单独覆盖,不要改整个模板。环境差异是真实存在的,同一机房同型号设备也可能因为固件版本不同而单位不统一,这个坑只能逐台核对,没捷径。
4.5 现象:CPU 和内存图形出现周期性断点,间隔很规律
原因:设备级 item 采集周期太短,加上 SNMP 全局 timeout 不够。EX4600 这类设备 jnxOperatingTable 行数多,ifTable 也有上百行,bulk 请求一次拉不完时 Zabbix 会超时,item 抓不到数据就形成断点。断点间隔规律是因为 item 更新周期固定,每次都在同一个环节失败。
解决:把设备级低频数据(温度、电源状态)的 update interval 从 60s 拉到 300s,流量类 item 保持短周期;同时把全局 SNMP timeout 从 3s 提到 5s。注意 timeout 是全局参数,改完要观察平台上其他设备的采集是否受影响,如果有大量设备共用这台 Zabbix,优先考虑给大机箱单独建 proxy 分摊轮询压力。
5. 实战进阶:把通用模板改造成适合自己机房的形态
5.1 用宏和子模板做多型号统一管理
EX2200、EX4300、EX4600 温度耐受差异很大,一个模板挂所有型号必然有人误报。做法是拆分成两层:基础模板只放通用 item 和发现规则,然后为每个型号建一个子模板,link 基础模板,只覆盖温度、CPU 阈值这类宏。Zabbix 6.x 支持模板 link 模板,把 EX4300 专有阈值放在子模板的 macro 里,子模板再挂到对应主机上。这样新增一台机器只需要确认型号,不用记它的参数。
5.2 扩展采集项:PoE 和光模块功率自己怎么加
模板只覆盖常规硬件和端口,PoE 供电状态、光模块收发功率这类通常是空的。扩展路径不复杂,先确认 MIB 表和 OID 段:
snmpwalk -v2c -c zabbix 192.168.100.1 1.3.6.1.4.1.2636.3.60这段是 JUNIPER-IFOPTICAL-MIB 所在的企业分支,walk 能看到 jnxOptics 相关的表结构。确认列号后,复制模板里一个原型 item 改 OID,加上预处理做单位换算(光功率一般是 dBm,标准 OID 返回的是毫瓦乘系数)。PoE 的 JUNIPER-POE-MIB 同理,先 walk 再建发现规则,注意 PoE 表按端口索引,原型 item 的 key 里要带 {#SNMPINDEX}。
5.3 上线前强制走一遍的检查清单
最后分享我的清单,按顺序做,做完再宣布"上线":先 snmpwalk 确认所有要用的 OID 存在且单位正确;再导模板、绑主机、填宏;第三步去 Latest data 核对每个 item 的第一个数值,CPU 应该在 0-100,温度应该和环境温度吻合;第四步对关键触发器做一次模拟,比如手动 down 一个上行端口,看告警是否在 2 分钟内产生;第五步设置好维护窗口,避免夜间交换机升级触发一堆硬件告警。
从那以后我每次接新机房交换机,都强制走一遍这个流程:先拿原始 OID 数据,再导模板,最后用 Latest data 核对每一个 item 的第一个数值。模板是别人写的,数据是自己的,单位不核对就上线,迟早会被假告警坑一次。这套 Juniper EX 模板的完整包按项目名 Zabbix-Template-Juniper-Ex-Series-Switch 在资源站就能找到,拿到手先别急着导,先按第 2 章的 OID 表核一遍再上。希望帮到你。
本文还有配套的精品资源,点击获取