
简介面向网络运维人员与Cacti监控使用者的主机模板合集针对CactiEZ 10.1环境下华为、中兴、H3C等设备监控模板缺失、手工配置繁琐的问题提供可直接导入的现成方案适合具备基础SNMP与Cacti操作经验的运维工程师快速搭建监控体系。压缩包共16个文件以15个xml主机模板为主另附1个txt说明文件整体约314KB体积轻便、导入即用。模板覆盖范围较广既有APC智能UPS、惠普网络打印机可监控墨量、海康威视硬盘录像机、Windows主机与非SNMP主机等通用场景也包含华为S2300/S2700/S3700、S5700、S7703、S9000系列交换机及H3C S2000、AR2811、中兴ZXR2609、三元达WPB5000等设备模板其中华为盒式交换机模板可监控CPU、内存、光功率与流量等关键指标。目前已有2058人学习使用可帮助读者省去逐台编写模板的时间快速完成多品牌设备纳管与指标采集。1. 从一台华为 S5720 死活出不来图说起上周帮某公司机房做监控补录一台华为 S5720 接进 CactiEZ 10.1 之后设备能 ping 通、SNMP 也能 walk 出数据可图形页面就是一片空白连流量图都画不出来。折腾到半夜才发现问题根本不在 SNMP 团体字而是模板里的 OID 跟这台机器的固件版本对不上——CactiEZ 自带的通用模板认不出华为私有 MIB 里的接口索引。这类翻车在交换机监控里太常见了CactiEZ 10.1 是个开箱即用的 CentOS 集成镜像省掉了 LAMP 和 RRDtool 的编译但真正决定能不能出图的是主机模板跟设备型号、固件版本的匹配度。这份华为、中兴、H3C 交换机主机监控模板解决的就是「设备接进来了、数据也采到了、图却出不来」这最后一公里。适合刚接手机房监控、手里一堆国产交换机、又不想从零写数据查询的运维。2. 装前把环境盘清楚CactiEZ 10.1 的底座与模板依赖2.1 CactiEZ 10.1 到底装了什么CactiEZ 10.1 本质是一个预打包的 CentOS 6.x 系统镜像里面已经塞好了 Apache、MySQL、PHP、RRDtool、SNMP 工具链和 Cacti 本体。装它不需要你先配 LAMP直接拿 ISO 写盘、装系统、设 IP浏览器打开就能进 Cacti 登录页。这一点对新手很友好但也埋了个坑系统自带的 PHP 和 RRDtool 版本偏老模板里如果用了新版本才支持的语法导入时会静默失败。我一般会在装完系统后先确认三件事——Cacti 版本号、PHP 版本、RRDtool 版本三者对不上就先别急着导模板。# 确认 Cacti 版本登录后控制台右下角也能看但命令行更准 cat /var/www/html/cacti/include/cacti_version # 确认 PHP 与 RRDtool 版本 php -v | head -n 1 rrdtool --version | head -n 1 # 确认 SNMP 工具链是否齐全后面验证设备要用 which snmpwalk snmpget snmpbulkwalk这几条命令的作用是建立基线。cacti_version文件里写的是当前 Cacti 主版本CactiEZ 10.1 对应的是 Cacti 0.8.8 系列模板的 XML 结构必须跟这个版本兼容。php -v看的是 5.3 还是 5.4老模板里有些数组写法在 5.4 之后会报 deprecated。rrdtool --version决定数据源类型能不能用 GAUGE 之外的 COUNTER、DERIVE交换机流量图基本都靠 COUNTER。最后确认 snmpwalk 存在是因为后面所有排错都从命令行 walk 开始图形界面只是结果展示。2.2 模板文件的结构与放置位置这套模板是 Cacti 的主机模板加数据查询组合通常包含.xml模板文件可能还有配套的脚本查询文件。导入前要搞清楚 Cacti 的模板目录结构别一股脑丢进去。Cacti 的模板导入走的是 Web 界面的「Import Templates」但底层读的是你上传的 XML导入后数据查询脚本要放到scripts/或resource/snmp_queries/下具体看模板用的是脚本查询还是 SNMP XML 查询。国产交换机模板绝大多数走 SNMP XML 查询文件应落在resource/snmp_queries/。# 进入 Cacti 根目录确认目录结构 cd /var/www/html/cacti ls -l resource/snmp_queries/ | head ls -l scripts/ | head # 备份现有模板目录导坏了能回滚 tar -czf /root/cacti_templates_backup_$(date %F).tar.gz resource/snmp_queries/ scripts/备份这一步别省。Cacti 导入模板时如果 XML 里有重复哈希会覆盖同名模板一旦覆盖错了原来的通用模板就没了回滚全靠这个压缩包。resource/snmp_queries/放的是 SNMP 查询定义 XMLscripts/放的是 PHP 或 Perl 脚本查询。国产交换机模板以 SNMP XML 为主所以重点看前者。备份命令用日期做后缀方便区分多次操作。2.3 设备侧要先开的 SNMP 参数模板能不能出图一半取决于设备侧 SNMP 配置。华为、中兴、H3C 三家命令不一样但核心参数就那几个版本、团体字、访问控制。Cacti 默认用 SNMP v2c团体字建议单独建一个只读的别用默认 public。访问控制要放行 Cacti 服务器 IP否则 walk 能通但部分 OID 返回空图形照样出不来。# 华为 S 系列V200R 及以后典型配置 snmp-agent snmp-agent sys-info version v2c snmp-agent community read cipher 只读团体字 acl 2000 snmp-agent target-host trap address udp-domain Cacti服务器IP params securityname 团体字 v2c acl number 2000 rule 5 permit source Cacti服务器IP 0华为这边community read后面跟acl是关键很多人只配了团体字没配 ACL结果 Cacti 能 walk 系统信息但接口表返回不全。中兴和 H3C 的写法不同但逻辑一致开 v2c、设只读团体字、绑 ACL。设备侧配完先在 Cacti 服务器上用 snmpwalk 验证别急着进界面加设备。# 验证设备 SNMP 可达性与接口表 snmpwalk -v 2c -c 只读团体字 设备IP 1.3.6.1.2.1.2.2.1.2这条 walk 的是ifDescr返回的是接口描述列表。如果这条能出结果说明 SNMP 通、接口表可读模板导入后出图的概率就高。如果返回Timeout或No Such Object先查 ACL 和团体字别往下走。3. 导入模板从 XML 上传到主机模板绑定3.1 导入前的版本兼容检查Cacti 的模板 XML 里有个hash字段和cacti_version字段导入时会校验。CactiEZ 10.1 的 Cacti 版本是 0.8.8 系列如果模板 XML 里写的是 0.8.7 或 1.x 的结构导入会报「Template file does not contain a valid hash」或者直接白屏。常见做法是先用文本编辑器打开 XML看头部几行。# 查看模板 XML 头部确认版本与哈希字段 head -n 30 huawei_switch_template.xml grep -i cacti_version\|hash huawei_switch_template.xml | head如果cacti_version跟本机不一致不要硬导。Cacti 0.8.8 对 0.8.7 的模板兼容性尚可但 1.x 的模板结构变化很大硬导会污染数据库。遇到版本不一致我一般会先在测试环境导一遍确认主机模板列表里能正常出现再上生产。测试环境可以用虚拟机快照导坏了直接回滚。3.2 Web 界面导入与常见报错导入走的是 Cacti 控制台 → Import Templates → 上传 XML。上传后 Cacti 会解析并列出将要导入的模板项包括主机模板、数据模板、图形模板、数据查询。这里有个细节国产交换机模板往往同时包含「主机模板」和「数据查询」导入时要确保两者都勾选只勾主机模板会导致图形模板找不到数据源。导入路径Console → Import Templates → 选择 XML 文件 → Import 导入后检查Console → Templates → Host Templates 是否出现对应型号 Console → Data Queries 是否出现对应 SNMP 查询导入过程中最常见的报错是「Duplicate hash found」意思是模板里某一项的哈希跟现有模板重复。这不一定是坏事可能是之前导过同系列模板。处理方式是先看重复项是什么如果是数据查询重复可以跳过如果是主机模板重复建议先删旧的再导新的避免两套模板混用导致图形错乱。提示导入前把 Cacti 的log/cacti.log开着 tail导入时的详细报错会写进日志比界面上的提示信息全。3.3 把设备挂到模板上模板导入成功只是第一步设备要绑定主机模板才会生成图形。在 Console → Devices 里新增设备填 IP、选 SNMP v2c、填团体字然后在 Host Template 下拉里选刚导入的华为/中兴/H3C 模板。保存后 Cacti 会自动根据模板生成数据源和图形但不会立刻出图要等第一次轮询。# 手动触发一次轮询不用等 5 分钟 php /var/www/html/cacti/poller.php --force--force参数强制立即执行一次采集适合刚加完设备时验证。执行完看log/cacti.log末尾有没有该设备的采集记录有记录且无报错再去 Graphs 里看图形。如果日志里出现SNMP: No response或Data Query returned no rows说明设备侧或模板 OID 有问题回到第 2 章的 snmpwalk 重新验证。3.4 数据查询与图形模板的对应关系国产交换机模板的核心是数据查询Data Query它定义了从设备哪些 OID 取接口列表图形模板再基于这些数据生成流量图。华为、中兴、H3C 的接口索引 OID 有差异华为常用1.3.6.1.2.1.2.2.1标准接口表但部分型号的流量统计在私有 MIB 里。模板如果写死了标准 OID遇到私有实现的型号就会出空图。# 对比标准接口表与设备实际返回 snmpwalk -v 2c -c 团体字 设备IP 1.3.6.1.2.1.2.2.1.10 # ifInOctets snmpwalk -v 2c -c 团体字 设备IP 1.3.6.1.2.1.31.1.1.1.6 # ifHCInOctets如果ifInOctets返回空但ifHCInOctets有值说明设备用的是 64 位计数器模板里的数据源类型要改成 COUNTER64否则图形会是负数或者直接断线。这是国产交换机监控里最隐蔽的坑之一表面看模板导入了、设备也加了就是图不对。4. 避坑与排查五条血泪记录4.1 图形空白但日志无报错现象设备加了、模板绑了、poller 也跑了Graphs 里就是空白日志里没有明显错误。原因多半是数据查询返回了接口列表但图形模板绑定的数据源没生成。Cacti 的图形生成依赖数据源数据源依赖数据查询的返回行。如果数据查询的「Associated Graph Templates」没勾选或者勾了但 OID 不匹配数据源就是空的。解决方式是进 Data Queries 看该查询的 Debug 输出确认返回行数再检查 Graph Templates 的绑定关系。4.2 SNMP walk 通但 Cacti 采集超时现象命令行 snmpwalk 秒回Cacti 里该设备却频繁超时。原因是 Cacti 默认的 SNMP 超时是 500ms、重试 3 次部分国产交换机响应慢尤其接口多的时候。解决方式是在 Devices 里把该设备的 SNMP Timeout 调到 2000msRetries 保持 3。这个参数在设备编辑页的 SNMP Options 里别全局改只改慢设备。4.3 导入模板后原有图形全部错乱现象导入新模板后原来正常的设备图形变成乱码或错位。原因是新模板覆盖了同名的图形模板或数据模板原有设备引用的模板 ID 被替换。Cacti 的模板是按 ID 引用的覆盖同名模板会改变 ID 指向。解决方式是导入前备份数据库导坏了用备份恢复或者导入时给新模板改名加前缀避免同名覆盖。4.4 接口流量图只出上行不出下行现象流量图只有 outbound 有曲线inbound 是平的。原因是模板里 inbound 用的 OID 是 32 位计数器设备实际是 64 位或者 inbound/outbound 的 OID 写反了。解决方式是用 snmpwalk 分别验证ifHCInOctets和ifHCOutOctets确认哪个 OID 对应哪个方向再改数据模板里的 OID。国产交换机有些型号的 in/out 定义跟标准相反这个只能实测。4.5 poller 跑完 CPU 飙高现象加了十几台交换机后每次 poller 执行 CPU 冲到 100%图形更新延迟。原因是 Cacti 默认单进程轮询设备多了串行采集扛不住。解决方式是在 Settings → Poller 里把 Poller Interval 保持 5 分钟同时启用 Spine 轮询器CactiEZ 自带Spine 是多线程的改完在spine.conf里调threads参数一般设成 CPU 核数的 2 倍。# 确认 Spine 是否已安装并查看当前线程配置 which spine grep -i threads /etc/spine.confSpine 的配置文件里threads默认可能是 1改成 4 或 8 后重启 poller 生效。这一步对设备量超过 20 台的场景提升明显但别设太大线程过多反而增加 MySQL 连接压力。5. 装完怎么验证三条命令确认模板真的跑通模板导入、设备绑定、poller 跑完不代表真的成了。我一般用三条命令做最终验证分别对应「数据采到了」「数据源生成了」「图形有数据」三个层次。第一条验证设备侧采集第二条验证 Cacti 数据源文件第三条直接读 RRD 文件看有没有数据点。# 1. 验证设备采集walk 接口表确认返回行数 snmpwalk -v 2c -c 团体字 设备IP 1.3.6.1.2.1.2.2.1.2 | wc -l # 2. 验证 Cacti 数据源查看 rra 目录下是否生成了对应 rrd 文件 ls -lt /var/www/html/cacti/rra/ | grep 设备IP或主机名 | head # 3. 验证 RRD 内有数据用 rrdtool 读最近一个数据点 rrdtool lastupdate /var/www/html/cacti/rra/对应rrd文件第一条返回行数应该跟设备实际接口数接近差太多说明 ACL 或 OID 有问题。第二条看 rra 目录下有没有该设备命名的 rrd 文件文件生成时间应该是最近一次 poller 之后。第三条最关键rrdtool lastupdate会输出最近一次写入的时间戳和各数据源的值如果值全是 NaN说明采集到了但没写进去问题在数据源类型或 poller 权限。验证层次命令正常表现异常处理设备采集snmpwalk ifDescr返回接口列表行数匹配查 ACL、团体字、OID数据源生成ls rra 目录有对应 rrd 文件时间新查数据查询绑定、poller 日志数据写入rrdtool lastupdate时间戳新值非 NaN查数据源类型、文件权限三条都过了再去 Graphs 里看图形基本就是实时曲线了。如果图形有延迟别慌Cacti 默认 5 分钟一轮询刚加的设备要等一到两个周期才平滑。注意rrdtool lastupdate读的是文件如果 Cacti 的 rra 目录权限不对属主不是 apachepoller 写不进去值会一直是 NaN。CactiEZ 默认属主是 apache手动改过目录权限的要检查回来。从那以后我每次导完国产交换机模板都强制走一遍这三条命令不再靠「界面看着有图」来判断。界面会骗人rrd 文件不会。希望这套流程帮你少熬一个半夜。本文还有配套的精品资源点击获取