
简介面向使用 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 Monitor2024H3C Comware 平台略有差异但思路一致system-view snmp-agent snmp-agent sys-info version v2c v3 snmp-agent community read cipher Monitor2024中兴 ZXR10 的命令在不同产品线上差异更大一点我实配过的 5260 系列大致是enable configure terminal snmp-agent snmp-agent sys-info version v2c snmp-agent community read Monitor2024这里强调一个安全细节不要用 public 当社区号也不要让全网都能读。生产环境里最好加一条 ACL只允许监控服务器的 IP 访问。华为 H3C 平台上可以这样收口acl number 2001 rule 5 permit source 192.168.1.100 0 # 然后在 SNMP 配置里关联 snmp-agent community read cipher Monitor2024 acl 20012.2 snmpwalk 探路与 OID 速查交换机侧配好之后先用 snmpwalk 把设备数据探一遍。这一步特别关键因为网上流传的 OID 经常是某篇老博客里的截图和你手头设备的固件版本对不上。我的习惯是先看系统信息再拉整棵企业子树。snmpwalk -v2c -c Monitor2024 192.168.1.1 1.3.6.1.2.1.1.1 snmpwalk -v2c -c Monitor2024 192.168.1.1 1.3.6.1.4.1 | grep -i -E cpu|usage|memory第二行命令会把设备私有大树上带 CPU、Memory 字样的节点全列出来。输出可能比较多但里面往往直接就是答案。根据我这几年实测下来三家设备出现频率比较高的路径大概是下面这样厂家平台常见 CPU 利用率 OID 示例常见内存利用率 OID 示例备注H3C Comware V5/V71.3.6.1.4.1.25506.2.6.1.1.1.1.61.3.6.1.4.1.25506.2.6.1.1.1.1.7实体表多板卡设备需要带实体索引华为 VRP1.3.6.1.4.1.2011.5.25.31.1.7.1.1.1.21.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 Monitor2024 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 里的 hrProcessorLoadOID 是 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 enableH3C Comware 也有类似的 persist 配置。第二个更通用是在 Cacti 里把数据查询的索引字段从 ifIndex 改成 ifName 或 ifDescr。实际操作路径Console - Data Queries找到 “SNMP - Interface Statistics”编辑后把 Index 选成 ifName。如果设备不支持 ifName 返回可以选择 ifDescr。很多国产老交换机 ifDescr 返回的是类似 GigabitEthernet1/0/1 这样的字符串稳定性比 ifIndex 好得多。如果自带查询的索引选项不够用可以复制一份 XML 自建数据查询。核心结构长这样interface nameGet Huawei/H3C Interface Statistics by ifName/name description由 ifName 做索引的接口查询/description oid_indexifName/oid_index fields ifName nameInterface Name/name methodwalk/method sourcevalue/source directioninput/direction oidifName/oid /ifName ifOperStatus nameInterface Oper Status/name methodwalk/method sourcevalue/source directionoutput/direction oidifOperStatus/oid /ifOperStatus ifInOctets nameInterface In Octets/name methodwalk/method sourcevalue/source directionoutput/direction oidifInOctets/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 Monitor2024 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我排查下来最常见的原因有三个。第一数据源类型选成了 COUNTERCPU 本身就是 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 Monitor2024 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 梳理清楚按这条思路做一套自己的模板库比推倒重来省事得多。本文还有配套的精品资源点击获取