简介:面向使用 CactiEZ 10.1 监控平台的网络运维人员,这份主机模板包针对华为、中兴、H3C 等常见网络设备,补齐了 SNMP 监控模板缺失的痛点。模板覆盖面较广,除盒式交换机、核心交换机外,还包含路由器、UPS、网络打印机(可监控墨量)、Windows 主机以及海康威视硬盘录像机等,导入后即可实现对 CPU、内存、光功率、流量等关键指标的监控。压缩包内共 16 个文件,以 15 个 XML 模板文件为主,附 1 个 TXT 说明文档,整体仅 314KB,体积小巧,便于分发部署。模板按设备型号和类型命名,如 S2300/S2700/S3700、S7703、S9000、ZXR2609 等,用户可按需选用,直接通过 Cacti 的导入功能即可完成配置,极大简化了手工创建数据模板和图形模板的过程。已有 2042 人学习下载,适合正在使用或计划部署 Cacti/CactiEZ 进行网络设备监控的运维人员参考。 如果内网里还跑着一台 CactiEZ 10.1,你大概率和我一样,对它是又爱又恨。爱在它装完就是一套带 Web 界面的监控全家桶,插件、模板、中文支持全给你配好;恨在一旦要把华为、中兴、H3C 这些国产交换机的正经监控模板加进去,自带的模板库基本歇菜。我这台监控服务器负责着几十台设备的流量、性能和告警,最近新到的一批 S5735、S5130、ZXR10 5260 急着上线,我就被 CactiEZ 10.1 的模板问题结结实实卡了一周。这篇就记录我怎么把这三家的部分交换机主机监控模板从零做出来,从 SNMP 探路、OID 比对到模板导入和排错,全流程复盘一遍,给同在用老 CactiEZ 接国产设备的兄弟兜个底。
1. 为什么还在 CactiEZ 10.1 上自造华为、中兴、H3C 模板?
1.1 老平台能打的地方和不能打的地方
CactiEZ 10.1 是一套基于 CentOS 的整合监控发行版,装完自带 Cacti、RRDTool、MySQL 和一堆常用插件。对运维老手来说,它最大的价值是“开箱即用”:不用像裸装 Cacti 那样慢慢配 LAMP 环境,也不用折腾调度任务和权限,装完就是一个中文界面的监控系统。再加上 Thold、Monitor、Weathermap、Syslog 这些插件都是配套好的,很多内网环境一跑就是五六年。
但它的短板同样明显。Cacti 的原生模板积累大多来自国外设备社区,思科、Juniper、Foundry 这些设备的模板随便找都有,轮到华为 VRP、H3C Comware、中兴 ZXR10,情况就反过来了。拿华为 S5735 举例,CactiEZ 自带模板能画接口流量,是因为 ifTable 这些通用 MIB 各家设备都得实现;可一旦要监控 CPU 使用率、内存占用率,就必须走厂商私有 MIB,这部分 Cacti 模板库里基本找不到现成东西。
1.2 自带模板的盲区:私有 MIB 基本靠手搓
我刚开始也抱着侥幸心理,想着给设备套一个“Generic SNMP Device”模板,再把接口流量模板挂上去,凑合能用就行。结果发现三家的 CPU、内存数据一个都拿不到。原因很简单:华为 VRP 的实体 MIB、H3C Comware 的 hh3cEntityExt 表、中兴 ZXR10 的 ZX10-CPU-MIB,这三棵私有 OID 树长得完全不一样,Cacti 默认的 UCD/Net-SNMP 数据查询根本不认识它们。
所以结论也很直白:想把这三家设备纳入 CactiEZ 10.1 的监控范围,就得按照 Cacti 的“数据查询-数据模板-图形模板”三层结构,把模板手工做出来。做之前不需要有很深的 Cacti 二次开发功底,但必须先把设备侧的 SNMP 数据摸清楚。
2. 探路阶段:把三家交换机的 SNMP 数据先摸清楚
2.1 交换机侧 SNMP 参数配置要点
模板能不能出数据,第一步不在 Cacti,而在交换机上 SNMP 参数配得对不对。我见过不少人直接在设备上开了 SNMP 就回来配模板,结果采集器拿不到数据,来回折腾半天。实际上只要抓住三个点:开启 SNMP、指定版本、配置只读社区号。
华为 VRP 平台比较典型的配置是这样的:
system-view snmp-agent snmp-agent sys-info version v2c snmp-agent community read cipher Monitor@2024H3C Comware 平台略有差异,但思路一致:
system-view snmp-agent snmp-agent sys-info version v2c v3 snmp-agent community read cipher Monitor@2024中兴 ZXR10 的命令在不同产品线上差异更大一点,我实配过的 5260 系列大致是:
enable configure terminal snmp-agent snmp-agent sys-info version v2c snmp-agent community read Monitor@2024这里强调一个安全细节:不要用 public 当社区号,也不要让全网都能读。生产环境里最好加一条 ACL,只允许监控服务器的 IP 访问。华为 H3C 平台上可以这样收口:
acl number 2001 rule 5 permit source 192.168.1.100 0 # 然后在 SNMP 配置里关联 snmp-agent community read cipher Monitor@2024 acl 20012.2 snmpwalk 探路与 OID 速查
交换机侧配好之后,先用 snmpwalk 把设备数据探一遍。这一步特别关键,因为网上流传的 OID 经常是某篇老博客里的截图,和你手头设备的固件版本对不上。我的习惯是先看系统信息,再拉整棵企业子树。
snmpwalk -v2c -c Monitor@2024 192.168.1.1 1.3.6.1.2.1.1.1 snmpwalk -v2c -c Monitor@2024 192.168.1.1 1.3.6.1.4.1 | grep -i -E "cpu|usage|memory"第二行命令会把设备私有大树上带 CPU、Memory 字样的节点全列出来。输出可能比较多,但里面往往直接就是答案。根据我这几年实测下来,三家设备出现频率比较高的路径大概是下面这样:
| 厂家平台 | 常见 CPU 利用率 OID 示例 | 常见内存利用率 OID 示例 | 备注 |
|---|---|---|---|
| H3C Comware V5/V7 | 1.3.6.1.4.1.25506.2.6.1.1.1.1.6 | 1.3.6.1.4.1.25506.2.6.1.1.1.1.7 | 实体表,多板卡设备需要带实体索引 |
| 华为 VRP | 1.3.6.1.4.1.2011.5.25.31.1.7.1.1.1.2 | 1.3.6.1.4.1.2011.5.25.31.1.7.1.1.1.3 | 部分型号返回的是百分比整数 |
| 中兴 ZXR10 | 需要根据厂家 MIB 确认 | 需要根据厂家 MIB 确认 | 我实配的 5260 走的是 zxRackCpuDev 这类节点 |
这张表只能作为参考路径,不能盲抄。设备固件版本一变,OID 可能就换了。所以每接一台新设备,我都会先用 snmpget 验证一下:
snmpget -v2c -c Monitor@2024 192.168.1.1 1.3.6.1.4.1.25506.2.6.1.1.1.1.6如果返回 “No Such Instance”,就说明这个路径在设备上不存在,需要再 walk 一下找真实节点。
2.3 从命令结果到 Cacti 能用的“数据字段”
探路阶段还有个容易忽略的点:不同设备返回的数据类型不一样。华为有的型号 CPU 使用率返回整数,比如 12 表示 12%;H3C 实体表返回的也是百分比整数;中兴的多板卡设备甚至可能返回一组带槽位索引的数据。这就提醒我们在 Cacti 里建数据模板时,数据源类型统一用 Gauge,最大值设 100,最小值设 0。如果设备返回的是千分比或者小数,就要在图形模板里用 CDEF 做换算,不然画出来的曲线会直接顶到 100 或者变成一条直线。
还有一个兜底方案可以记住:通用主机资源 MIB 里的 hrProcessorLoad(OID 是 1.3.6.1.2.1.25.3.3.1.2)在很多交换机上也是支持的。虽然拿不到多核细粒度数据,但做个粗略 CPU 监控完全够用。遇到私有 OID 怎么都啃不下来的老设备,这一招往往能救急。
3. 核心实操:制作 H3C/华为/中兴可用的接口与 CPU 内存模板
3.1 先把接口流量模板弄稳:ifIndex 漂移问题的处理
接口流量模板我建议直接基于 Cacti 自带的 “Interface - Traffic” 来做,不用从零写 XML。但有一个坑必须提前处理:国产交换机的 ifIndex 在设备重启、板卡复位之后是可能变化的。Cacti 默认用 ifIndex 做索引,一旦索引变了,之前的图形数据全对不上,曲线会从中间断掉。
解决办法有两个。第一个是在设备侧开启 ifIndex 持久化,华为 VRP 平台可以用命令set ifindex persist enable,H3C Comware 也有类似的 persist 配置。第二个更通用,是在 Cacti 里把数据查询的索引字段从 ifIndex 改成 ifName 或 ifDescr。
实际操作路径:Console -> Data Queries,找到 “SNMP - Interface Statistics”,编辑后把 Index 选成 ifName。如果设备不支持 ifName 返回,可以选择 ifDescr。很多国产老交换机 ifDescr 返回的是类似 GigabitEthernet1/0/1 这样的字符串,稳定性比 ifIndex 好得多。
如果自带查询的索引选项不够用,可以复制一份 XML 自建数据查询。核心结构长这样:
<interface> <name>Get Huawei/H3C Interface Statistics by ifName</name> <description>由 ifName 做索引的接口查询</description> <oid_index>ifName</oid_index> <fields> <ifName> <name>Interface Name</name> <method>walk</method> <source>value</source> <direction>input</direction> <oid>ifName</oid> </ifName> <ifOperStatus> <name>Interface Oper Status</name> <method>walk</method> <source>value</source> <direction>output</direction> <oid>ifOperStatus</oid> </ifOperStatus> <ifInOctets> <name>Interface In Octets</name> <method>walk</method> <source>value</source> <direction>output</direction> <oid>ifInOctets</oid> </ifInOctets> </fields> </interface>把这份 XML 放到/var/www/html/cacti/resource/snmp_queries/目录下,然后在 Data Queries 里导入,再创建一个基于它的图形模板即可。创建完后在设备页面添加关联数据查询,再到 New Graphs 里勾选接口,等两个轮询周期就能看到曲线。
3.2 CPU 和内存模板的制作链条
接口流量搞定后,接着做 CPU 和内存监控。大多数盒式交换机只有一个主控 CPU,用 Cacti 的 Data Input Method 做单值模板最省事。流程不复杂,但每一步都得踩在正确的位置上。
第一步,确认数据输入方法。Console -> Data Input Methods,编辑 “SNMP - Get SNMP Data (Ver 2)”,确认它的字段里有 SNMP Version、SNMP Community、SNMP OID 这三个。
第二步,创建数据模板。Console -> Data Templates,新建 “Device - H3C CPU Usage”,数据输入方法选上一步确认好的方式,数据源类型选 Gauge,最大值填 100,最小值填 0。然后在 Data Source Item 里把 OID 填成 1.3.6.1.4.1.25506.2.6.1.1.1.1.6。
第三步,创建图形模板。Console -> Graph Templates,新建 “Device - H3C CPU Usage”,绑定刚才的数据模板。图形项里至少加两条数据:一条用 AREA 或 Line1 显示当前值,一条用 MAX 显示峰值。图名模板可以写成|host_description| - CPU,这样生成的图名一眼就能认出是哪台设备。
第四步,把图形模板关联到目标设备。Device 页面里的 Associated Graph Templates 添加这个模板,然后到 New Graphs 里创建图形。创建完之后不要急着看图形,先看底层数据:
rrdtool fetch /var/www/html/cacti/rra/h3c_s5130_cpu_12.rrd AVERAGE | tail -20如果 rrd 文件里出现具体数值,说明采集链路已经通了。内存监控的模板做法一模一样,只是 OID 换成 1.3.6.1.4.1.25506.2.6.1.1.1.1.7,数据模板名称改成 Device - H3C Memory Usage 即可。
华为的 VRP 平台也走这个流程,把 OID 换成 1.3.6.1.4.1.2011.5.25.31.1.7.1.1.1.2 和 1.3.6.1.4.1.2011.5.25.31.1.7.1.1.1.3 就行。这里要注意,华为设备的实体表可能包含多个实体项,snmpwalk 会输出一个列表,而不是单个值。这时候就不能死板地用单值模板了,需要回到 Data Query 的方式,用一个自定义 XML 把实体索引作为 input 字段传进来。不过中小型场景里常见的 S5735、S5720 这类盒式交换机,单值模板基本够用。
3.3 中兴设备没有现成 OID 怎么办
中兴的情况特殊一些,它的企业 OID 根是 1.3.6.1.4.1.3902,不同产品线的 CPU/内存节点命名差异很大。我实配 ZXR10 5260 的时候,就是先把厂家提供的 MIB 文件放进 Cacti 服务器,用 snmpwalk 在整棵企业子树里做检索:
snmpwalk -On -v2c -c Monitor@2024 192.168.1.1 1.3.6.1.4.1.3902 | grep -i -E "cpu|memory|usage|mem"加 -On 参数是为了让输出直接显示数字形式的 OID,方便后面填到数据模板里。找到目标节点后,用 snmpget 验证一下能否返回具体数值,能的话就按上面同样的流程创建数据模板和图形模板。中兴设备不要指望一个模板通吃所有型号,我手里 5260 和 2928 用的 OID 路径就不一样,换型号时最好重新 probe 一次。
4. 图形不出数?一次完整排查链路复盘
4.1 症状和第一轮检查
做模板这件事,一次成功的概率不太高,我那次给 H3C S5130 接 CPU 模板时就翻车了。症状很典型:接口流量图形正常,CPU 图形创建后一直是空白,rrd 文件始终不增长。
第一轮检查先看调度是否正常。CactiEZ 10.1 的轮询靠 cron 驱动,执行一下crontab -l | grep poller,确认/usr/bin/php /var/www/html/cacti/poller.php还在跑。然后在 Cacti 日志里翻设备信息:
tail -100 /var/www/html/cacti/log/cacti.log | grep S5130日志里常见两种报错:一种是 “SNMP error”,说明设备侧没响应;另一种是 “No Such Object available”,说明 OID 路径不对或者私有 MIB 没开启。我这里第一次看到的是第二种,说明需要往 OID 方向查。
4.2 Verbose Query + rrdtool 两级定位
Cacti 的 Data Query 页面里有一个非常关键的排错入口,叫 Verbose Query。找到关联的数据查询后,点后面的绿色小图标,它能展示本轮查询拿到的原始 SNMP 返回结果。如果 Verbose Query 里能返回 CPU 数值,但 rrd 文件里是 NaN,问题就出在数据模板绑定阶段。
这时候用 rrdtool 查看数据源详情:
rrdtool info /var/www/html/cacti/rra/h3c_s5130_cpu_12.rrd | head -30 rrdtool fetch /var/www/html/cacti/rra/h3c_s5130_cpu_12.rrd AVERAGE | tail -20如果 fetch 结果一直出 NaN,我排查下来最常见的原因有三个。第一,数据源类型选成了 COUNTER,CPU 本身就是 Gauge 类型,COUNTER 会把数值当作计数器来算差值,结果自然变成 NaN。第二,数据模板里最大值填错了,设备偶发返回超过 100 的值,会把 rrd 里的数直接顶爆。第三,SNMP 响应超时,Cacti 默认的 SNMP Timeout 只有 10 秒,设备负载高的时候响应慢,加大到 30 秒能解决不少问题。
我那次的问题最后就落在 COUNTER 和 GAUGE 选错上。数据模板里把类型改回 Gauge,重新生成数据源,等两个轮询周期后曲线就出来了。
4.3 修好之后的坑:同型号新设备为什么又空
修复之后还有一次意外值得一提。第二批 H3C 设备上线时,直接套用已经跑通的模板,CPU 图形又是空的。后来在设备上一查,发现这批设备保存配置的时候没有把私有 MIB 视图放出来。H3C 和华为设备上如果遇到这种情况,需要确认是否有类似下面的配置:
snmp-agent mib-view included ViewAll 1.3.6.1.4.1 snmp-agent community read cipher Monitor@2024 mib-view ViewAll中兴设备也有 MIB 视图的概念,只是命令表达不一样。所以现在每上线一台新设备,我的固定流程就是三步:先 snmpwalk 确认 OID 能返回数值,再套模板,最后用 rrdtool fetch 确认 rrd 文件有写入。哪一步不对就停在哪一步排查,不等图形出来再返工。
5. 模板落地后的运维联动:阈值告警、状态页与流量图
5.1 用 Thold 给 CPU 内存设告警阈值
模板做出图形只是第一步,真正让监控起作用的是告警。CactiEZ 10.1 自带的 Thold 插件正好能干这事。在 Console -> Templates -> Threshold Templates 里新建阈值模板,选择之前做好的 CPU 数据模板,高阈值填 85,低阈值填 50,持续周期填 3,再填上通知邮箱。
持续周期这个参数建议不要填 1,否则设备短时负载波动就会狂发邮件。填 3 表示连续三个轮询周期都超阈值才告警,误报会少很多。另外,CactiEZ 10.1 的 Thold 默认发邮件用的是 sendmail,进垃圾箱的概率不小,有条件的话可以把 SMTP 配置改到企业邮箱服务器上。
5.2 Monitor 和 Weathermap 联动
阈值搞定之后,把 Monitor 插件打开,设备列表页面就会显示每台设备的红绿状态点,点进去还能直接看缩略图。这个页面适合放监控大屏,领导和同事一眼就能看出哪台设备掉了。
Weathermap 插件则适合做链路流量可视化的拓扑图。把交换机互联接口的流量数据源拖到地图上,就能生成一张带实时带宽的链路图。我实际用下来觉得 Weathermap 的自动布局比较乱,还是手工拖一拖更直观。需要注意 CactiEZ 10.1 自带的字体文件对中文支持不太好,图和节点名尽量用英文,不然地图上容易出方块字。
最后再说一点个人体会。模板这东西,第一次做很痛苦,第二次做就顺了。最难的不是在 Cacti 界面上点点鼠标,而是先学会用 snmpwalk 把设备的私有 MIB 摸清楚。会了探路,会了比对返回值和字段类型,后面再遇到新设备,基本上半天就能做完一套完整模板。我这台 CactiEZ 10.1 现在跑着华为、H3C、中兴几款主力交换机的 CPU、内存、接口流量监控,新设备上线也就是套模板、改 OID、验证三步的事。如果你们那边也卡在老旧监控平台接国产设备这一步,别急着整体迁移平台,先把手头设备的 OID 梳理清楚,按这条思路做一套自己的模板库,比推倒重来省事得多。
本文还有配套的精品资源,点击获取