README.md 3.9 KB

华为 VRP SNMP 模板(Walk + 依赖项)

版本: 7.4-walk-1 | 适用: Zabbix 7.4.x | 厂商: FlyingRome

1. 背景:Zabbix 服务器为什么老是挂(10.160.10.213)

  • 环境:Zabbix 7.4.2 + MySQL 8.0.43 + AlmaLinux 9.6 + Docker Compose。
  • 根因一(容量):SNMP poller 默认只有 1 个进程。
  • 根因二(放大器):旧版华为模板对每台交换机逐个 OID 发 GetRequest(每台约 1962 个接口项 + 传感器项)。下联 down 端口的 OID 每次要 3~5 秒超时,仍每分钟重试。全网数万个 SNMP 项 / 60s ≈ 1000+ 请求/秒,单 poller 100% 打满 → 采集队列积压 2~9 分钟、约 1.5 万项 “became not supported: timed out”、数据延迟与误告警,最终 server 频繁假死。

结论: 不是设备单点问题,而是 poll 并发不足 × 逐 OID 轮询放大 的结构性问题。

2. 解决措施(两层)

1) 运维层:将 SNMP poller 由 1 提升到 30 并重启(ZBX_STARTSNMPPOLLERS=30)。

  • 验证:snmp poller 忙碌由 100% → ~9.5%,unreachable poller 由 42% → 0%。 2) 模板层:本模板用 “一次 bulk walk + 依赖项(dependent items)” 彻底替代逐 OID 轮询。

3. 新模板架构 / 新特性

  • net.if.walk:单条 master 项,一次 SNMP walk[](GetBulk)取回接口多列 OID: ifOperStatus, ifAdminStatus, ifDescr, ifName, ifAlias, ifHighSpeed, ifType, ifHCInOctets, ifHCOutOctets, 各类 errors / discards。
  • net.if.discovery:DEPENDENT 发现规则,预处理 SNMP_WALK_TO_JSON 把 walk 结果转 JSON,产出 {#SNMPINDEX} 等宏。
  • 9 类依赖项原型(每类 218 项/主机):status / type / speed / in / out / in.errors / out.errors / in.discards / out.discards。 每个依赖项用预处理 SNMP_WALK_VALUE: <OID>.{#SNMPINDEX} 从 master 取值,master_item = net.if.walk。
  • 传感器沿用 SNMP_AGENT(风扇、温度、CPU、内存、型号、序列号、版本等)。
  • 效果:每台主机每轮 SNMP 请求由 ~1962 次 → 1 次 bulk walk,SNMP 负载降低约 99%。

4. 解决了哪些问题

  • ✅ poller 饱和 / 采集积压 / 数据延迟(2~9 分钟)
  • ✅ down 端口逐 OID 超时风暴 → down 口直接返回 ifOperStatus=2,不再超时
  • ✅ 大量 “became not supported: timed out” 与误告警
  • ✅ Zabbix server 频繁假死 / 重启

5. 验证结果(生产核心 core office / 10.160.7.2,HUAWEI S12700E-12,218 接口)

  • 1962 个接口依赖项全部刷新,9 类 × 218 接口齐全;
  • ifOperStatus 分布:77 up / 141 down(值正确,down 口不超时);
  • net.if.speed[ifHighSpeed.100] = 10000000000(10 Gbps);
  • snmp poller busy = 9.47%,unreachable poller = 0%。

6. 部署 / 迁移步骤

  1. 导入模板(createMissing: true)。
  2. 重要(迁移坑):若主机已用旧模板且 item key 相同,Zabbix 会保留旧的逐 OID 项(类型/预处理可能不更新)。 建议:先 unlink 旧模板 → 删除旧 net.if.* 逐 OID 项 → 再链接本模板,让 LLD 重新生成“依赖项”;若已链接,删除旧项后执行一次 config_cache_reload 即可由 LLD 重建。
  3. 主机需配置 SNMP 接口(示例 SNMPv3:authPriv / SHA / AES)。
  4. 大核心建议把 net.if.walk 的 timeout 调大(如 30s) 以容忍慢速 bulk。

7. 已知注意事项

  • 绝对不要在两个 Zabbix 主机上填写同一台设备的 IP,否则 SNMPv3 会报 SNMP engineId is not unique,导致该设备相关所有项采集失败(本模板排障中即遇到)。
  • 主 net.if.walk 的 value_type = TEXT,history 必须为 0(历史由依赖项承载);设为非 0 会导致主项不被调度。
  • 若设备不支持 EtherLike-MIB(duplex),本模板不含 duplex 项(本核心即不支持)。

8. 文件

  • zabbix-huawei-walk.yaml — 模板导出文件
  • README.md — 本说明