☰
CactiEZ 10.1 华为、中兴、H3C交换机监控模板导入与排错指南
2026/10/29 15:35:55 网站建设 项目流程

简介:面向网络运维与监控实施人员的一套CactiEZ 10.1主机监控模板合集,重点解决华为、中兴、H3C等品牌交换机、路由器及周边设备在Cacti中缺少现成监控模板、需手工逐项添加数据查询与图形的问题。资源共16个文件,以15个xml模板文件和1个txt说明为主,压缩包约314KB,xml可直接在Cacti主机模板中导入使用,txt用于辅助说明。模板覆盖范围较广,既有华为S2300/S2700/S3700、S5700、S7703、S9000等盒式与框式交换机,也有中兴ZXR2609、H3C AR2811与S2000系列,还包含APC智能UPS、惠普网络打印机墨量、海康威视硬盘录像机、三元达WPB5000、Windows主机及非SNMP主机等场景,部分华为模板可监控CPU、内存、光功率与流量等指标。已有2058人学习,适合需要快速搭建多品牌设备监控、减少模板调试成本的运维人员参考复用。

1. 拿到一套交换机监控模板,先别急着导入

CactiEZ 10.1 这套模板包,解决的是一个很具体的问题:华为、中兴、H3C 三家交换机的接口流量、CPU、内存、温度这些指标,在 Cacti 里默认没有现成的主机模板可用,得自己一条条建数据查询、图形模板、数据源。这套模板把这三家的 OID 映射和图形配置预先打包好了,导入后绑定主机就能出图。适合手里管着一批国产交换机、又不想从零手搓 RRD 的运维。但模板这东西最怕“拿来就导”,版本对不上、OID 偏移、SNMP 视图没开,导进去也是一堆断图。下面按我实际拆包验证的顺序讲。

2. 模板结构与导入前的环境核对:先看清包里到底有什么

2.1 模板包的组成与三厂商 OID 差异

一套 Cacti 主机模板不是单个 XML,它通常由几类文件构成:主机模板(host_template)、数据查询(data_query)、数据模板(data_template)、图形模板(graph_template),导出时被打成一个.xml或分厂商的几个 XML。导入 Cacti 时走的是 Console → Import/Export → Import Templates,Cacti 会按 XML 里的 hash 去重、按依赖顺序重建对象。所以第一步不是导,是解压看结构。

三家交换机的指标口径差别不小,这决定了模板里数据查询的写法。华为的接口流量走ifHCInOctets/ifHCOutOctets(64 位计数器),CPU 利用率常见在hwEntityCpuUsage这类私有 MIB 下;H3C 的接口统计同样是标准 IF-MIB,但 CPU/内存多在hh3cEntityExtCpuUsage、hh3cEntityExtMemUsage私有节点;中兴的私有 MIB 前缀一般是zxAn,接口和资源指标节点跟另外两家不重合。这意味着模板里每个厂商的数据查询 XML 是独立的,OID 不能混用。拆包时先确认包内是否按厂商分了文件,比如host_template_xxx.xml、data_query_xxx.xml,如果只有一个大 XML,导入后要逐个核对数据查询绑定的 OID 前缀对不对。

我一般会先做一次静态检查,把 XML 里的 OID 和图形项抽出来看:

# 解压模板包,看文件构成 unzip cacti_templates_huawei_zte_h3c.zip -d ./tpl_inspect ls -lh ./tpl_inspect # 统计每个 XML 里出现的数据查询与图形模板名 for f in ./tpl_inspect/*.xml; do echo "== $f" grep -oE '<name>[^<]+</name>' "$f" | head -20 done # 抽出所有 OID,确认没有跨厂商混写 grep -ohE '\.1\.3\.6\.1\.[0-9.]+' ./tpl_inspect/*.xml | sort -u | head -40

这段脚本干三件事:解压、列出每个 XML 里的对象名、把 OID 去重抽出来。重点看 OID 前缀——.1.3.6.1.4.1.2011是华为,.1.3.6.1.4.1.25506是 H3C,.1.3.6.1.4.1.3902是中兴。如果某个标着“华为”的 XML 里混进了 25506 的节点,那就是打包时串了,导入后必然断图。参数上head -40只是抽样,实际核对时建议全量导出到文件再比对。

2.2 导入前的 Cacti 版本与 SNMP 连通性核对

CactiEZ 10.1 是基于较老 Cacti 版本的集成镜像,模板 XML 里的cacti_version字段和导入端的版本差太多时,Cacti 会拒绝导入或导入后字段错位。导入前先在 Console → Utilities → Technical Support 看 Cacti 版本,和模板 XML 头部的版本声明对一下。差一个大版本以内一般能导,差太多就得手动改 XML 里的版本字段,或者干脆只导数据查询、图形模板手工重建。

SNMP 侧必须先通,否则模板导进去绑了主机也是空图。对每台交换机先做一次snmpwalk验证:

# 验证华为交换机 SNMP 可达性与接口表 snmpwalk -v 2c -c public 192.0.2.10 1.3.6.1.2.1.2.2.1.2 # 验证 H3C 的 CPU 私有节点是否有返回 snmpwalk -v 2c -c public 192.0.2.11 1.3.6.1.4.1.25506.2.6.1.1.1.1.6 # 验证中兴接口 64 位计数器 snmpwalk -v 2c -c public 192.0.2.12 1.3.6.1.2.1.31.1.1.1.6

-v 2c是版本,-c public是团体名(实际环境别用 public),后面跟设备 IP 和 OID。第一条走标准 IF-MIB 的ifDescr,能返回接口名说明基础 SNMP 通;第二条打 H3C 私有 CPU 节点,返回空说明该设备没开这个视图或 MIB 不支持,模板里对应的图形就会断;第三条打 64 位计数器ifHCInOctets,老设备可能只支持 32 位,模板若按 64 位建的数据源会取不到值。这一步是后面所有排错的地基,别省。

提示:团体名、SNMP 版本(v2c 还是 v3)要和模板里数据查询的认证配置一致,v3 还要对 auth/priv 协议,模板默认多半是 v2c,v3 环境要手工改。

3. 导入与主机绑定:把模板落到具体设备上

3.1 分厂商导入模板并处理依赖顺序

Cacti 导入模板有依赖关系:图形模板依赖数据模板,数据模板依赖数据查询,主机模板又引用图形模板。导入时如果顺序乱了,Cacti 会报“missing dependency”并把对象标红。稳妥做法是先导数据查询,再导数据模板,再导图形模板,最后导主机模板。如果包是一个整 XML,Cacti 一般会自动排序,但老版本偶尔抽风,手工分批导更保险。

导入路径是 Console → Import/Export → Import Templates,选文件、勾选“Import”提交。导入完成后到 Data Queries 里确认每个厂商的查询都出现了,且 XML 路径(Data Input Method)指向的脚本存在。Cacti 的数据查询常依赖一个 PHP 采集脚本放在scripts/下,模板 XML 只存脚本名不存脚本本体,如果包里没带脚本,导入后数据查询会显示“Script not found”。

# 确认数据查询依赖的采集脚本是否就位 ls -l /var/www/html/cacti/scripts/ | grep -iE 'huawei|h3c|zte|host' # 若模板引用了自定义脚本但包里没带,从 XML 里抽出脚本名 grep -oE '<script_path>[^<]+</script_path>' ./tpl_inspect/*.xml | sort -u

第一行看scripts/目录下有没有对应厂商的采集脚本;第二行从 XML 里抽script_path字段,拿到脚本名后去包里找,找不到就得自己补一个符合 Cacti 数据查询输入格式的 PHP 脚本(入参是 hostname、snmp 社区、OID 列表,输出是字段名:值的文本)。这是这套模板最容易翻车的地方——很多人以为 XML 导完就完事,结果数据查询一直空跑。

3.2 主机绑定与图形模板勾选

模板导入成功后,到 Console → Devices → Add 新建主机,Host Template 下拉里选对应厂商的模板(如“Huawei Switch”),填 IP 和 SNMP 参数,保存。保存后 Cacti 会自动按主机模板关联的图形模板创建图形,但数据查询的“索引”要手动跑一次:进设备的 Data Queries 区块,点对应查询的“Verbose Query”或“Reload”,让 Cacti 走一遍 SNMP 把接口索引抓回来,再在 Create Graphs 里勾选要出图的接口。

# 手工触发一次数据查询索引刷新(Cacti 命令行方式) php /var/www/html/cacti/poller_reindex_hosts.php --id=<host_id> --qid=all # 跑一次采集,看是否有数据写入 php /var/www/html/cacti/poller.php --force

poller_reindex_hosts.php的--id是设备在 Cacti 里的 host id,--qid=all表示刷新该设备所有数据查询的索引;poller.php --force强制跑一轮采集。跑完到 Graphs 里看新图有没有数据点,没有就进 Utilities → View Poller Cache 看该数据源的命令和返回值,能直接看到 SNMP 取回的是空还是数值。参数上--force会忽略时间窗口强制采集,调试时用,生产环境别频繁跑。

注意:接口索引(ifIndex)在设备重启或板卡插拔后可能变化,模板按索引建图的话,索引一变图就错位。建议在数据查询里勾选“Index Type”为ifDescr或ifName这类稳定字段,而不是纯数字索引。

4. 避坑与排查:断图、空值、错位的五条血泪记录

4.1 导入成功但图形全空

现象:模板导入无报错,主机也绑了,图形列表有图但全是 NaN。原因多半是数据查询的采集脚本缺失或路径不对,Cacti 拿不到返回值。解决:进 Data Queries 看该查询的“Script Path”,到服务器上确认文件存在且 PHP 可执行;再跑一次 Verbose Query,看返回的索引列表是否为空。空的话回到第 2 章的snmpwalk验证 OID 是否真能取到值。

4.2 华为接口流量图数值明显偏小

现象:千兆口流量图峰值只有几十 Mbps,实际早跑满了。原因:模板用了 32 位计数器ifInOctets,高速口会回绕,Cacti 算出来的速率被截断。解决:把数据源里的 OID 换成 64 位ifHCInOctets/ifHCOutOctets,并在数据模板里把“Maximum Value”设为U(无符号大整数),否则 Cacti 按 32 位上限截断。

4.3 H3C 的 CPU 图一直无数据

现象:接口图正常,CPU/内存图空白。原因:H3C 私有 CPU 节点需要设备开启对应 SNMP 视图,默认视图可能只暴露标准 MIB。解决:在设备上确认snmp-agent mib-view包含hh3c相关子树,或临时用snmpwalk打私有节点确认有返回;没返回就是设备侧没开,模板本身没问题。

4.4 中兴设备导入后数据查询报“Duplicate”

现象:导入时提示对象重复,部分图形模板被跳过。原因:Cacti 按 XML 里的 hash 去重,之前导过同名模板或手工建过同 hash 对象。解决:先在 Import/Export 里看已存在的同名对象,确认是旧版本就删掉再导;不想删就在导入时勾选“Use existing”让 Cacti 复用,但要注意旧对象的 OID 可能和新模板不一致。

4.5 设备重启后图形错位到别的接口

现象:某台交换机重启后,A 口的图变成了 B 口的数据。原因:数据查询按 ifIndex 建索引,重启后索引重排。解决:把数据查询的索引字段改成ifDescr或ifName,并在设备侧固定接口描述;已经错位的图需要删掉重建,改索引类型后重新 Reload 一次。

5. 让模板长期可用的两个习惯:索引固化与批量校验

模板导完只是开始,真正决定这套东西能不能长期用的是索引稳定性和批量校验。索引固化前面提过,落到操作上就是在每个厂商的数据查询 XML 里,把<index_order>和索引字段指向ifDescr,而不是默认的ifIndex。改完重新导入一次,让 Cacti 按新索引重建数据源。这一步做完,设备重启、板卡插拔导致的错图能少一大半。

批量校验我一般用一个简单的 shell 循环,把所有绑了模板的主机跑一遍 SNMP 关键 OID,输出一张“设备-指标-是否有值”的表,比一台台点 Web 界面快得多:

#!/bin/bash # 批量校验三厂商关键 OID 是否有返回 while read -r ip vendor; do case "$vendor" in huawei) oid="1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5" ;; h3c) oid="1.3.6.1.4.1.25506.2.6.1.1.1.1.6" ;; zte) oid="1.3.6.1.2.1.31.1.1.1.6" ;; esac val=$(snmpget -v 2c -c public -Oqv "$ip" "$oid" 2>/dev/null) if [ -z "$val" ] || echo "$val" | grep -q "No Such"; then echo "FAIL $ip $vendor $oid" else echo "OK $ip $vendor $val" fi done < devices.txt

devices.txt每行是“IP 厂商”两列,脚本按厂商选对应 OID 做snmpget,-Oqv只输出值不带 OID 前缀,方便判断空值。输出里出现 FAIL 的设备,就是模板图会断的那批,优先去设备侧查 SNMP 视图和团体名。这个脚本我放在 cron 里每天跑一次,比等用户报“图不更新”再查主动得多。

还有一个容易忽略的点:Cacti 的 poller 采集周期和数据源里的“Step”要匹配。模板默认 Step 是 300 秒(5 分钟),如果 poller 配的是 1 分钟,RRD 会按 5 分钟步长聚合,短时突发流量会被平滑掉,看流量图会觉得“怎么没峰值”。要抓突发就把 Step 调到 60,同时 poller 周期也调 60,两者必须一致,否则 RRD 更新会报错。这个参数改之前先评估磁盘 IO,60 秒周期下 RRD 文件增长和 poller 负载都会上去,设备多了要算一下。

从那以后我每次拿到一套新模板,都强制先跑一遍静态 OID 核对和snmpwalk连通性,再导入、再绑主机、再批量校验,四步缺一步都不敢往生产上放。希望这套流程帮到你,少走几次断图的弯路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询