尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

CactiEZ 10.1 国产交换机监控模板:SNMP OID采集与图形配置

CactiEZ 10.1 国产交换机监控模板:SNMP OID采集与图形配置 简介CactiEZ 10.1 平台上面向华为、中兴、H3C 等网络设备的监控主机模板合集适合用 Cacti 对机房、园区网设备做流量与性能监控的运维人员使用。压缩包共 16 个文件以 15 个 xml 主机模板为主体另附 1 个 txt 说明文件整体约 314KB导入后即可在 CactiEZ 10.1 中直接套用。模板覆盖范围较广既有华为 S2300/S2700/S3700 盒式交换机可采集 CPU、内存、光功率与接口流量、S7703 与 S9000 高端交换机、S5700也有中兴 ZXR2609、H3C AR2811 路由器与 S2000 系列交换机还包含 APC 智能 UPS、惠普网络打印机墨量、海康威视硬盘录像机、三元达 WPB5000、Windows 主机及非 SNMP 主机等对象。借助这些现成模板可省去逐项编写 OID 与数据查询方法的工作量较快建立主机监控视图与图形。目前已有 2059 人学习下载。1. 资源定位CactiEZ 10.1 上的国产交换机主机监控模板解决哪几个重复动作CactiEZ 10.1 上这套交换机主机监控模板解决的是把三类国产主流交换机的 CPU、内存、温度、端口流量、光功率等指标接进 Cacti 的重复劳动。CactiE 相关资源里模板不少但能同时覆盖主机模板、图形模板、数据查询和 SNMP OID 映射的成套包仍然要花时间筛。它适合机房运维、网络监控二次开发以及手里已经有一批国产交换机、又不想从零写 OID 的人。这套资源的价值不在“装完就有图”而在把设备侧 OID、Cacti 数据查询索引、图形模板绑定三件事提前对齐。导入后仍要按设备型号做一轮单机验证否则容易出现模板套上了、图形却是空白的玄学问题。先把它当成一套可复用的采集骨架再按现场设备改参数落地会稳得多。2. 模板拆包四类对象、导入顺序与 CactiEZ 环境核对拿到一个 Cacti 模板包先别急着点导入。Cacti 的模板不是单个文件而是主机模板、图形模板、数据模板、数据查询几类对象互相引用导入顺序错了常见结果就是“模板列表里能看到名字但加设备时选不到”或者“图形模板有数据源建不出来”。CactiEZ 10.1 的 Web 控制台把这几类对象分在不同的菜单里模板包里的 XML 也会按 hash 做去重所以导入前先把对象关系捋清楚比导入后到处找报错省时间。2.1 模板包里的四类对象怎么互相咬合主机模板决定“一台设备默认挂哪些图形”图形模板决定“一张图长什么样”数据模板决定“数据源按什么类型存”数据查询决定“从设备表里取哪些索引和字段”。四者的关系可以理解成一条链数据查询先按 OID 找到端口或传感器索引数据模板按索引建数据源图形模板把数据源画成图主机模板再把一组图形模板打包绑定到设备上。任何一环的名字或 hash 对不上后面就会断链。对象类型在 Cacti 里的作用导入后先检查什么主机模板批量绑定图形模板、数据查询模板名是否与设备类型对应是否勾选了正确的图形模板图形模板定义图形标题、图例、坐标轴图形模板里引用的数据源是否都存在数据模板定义数据源类型、采集方式数据源类型是 COUNTER 还是 GAUGE是否匹配 OID 数据类型数据查询定义 OID 表、索引字段、过滤条件索引字段是否能从设备返回过滤条件是否把无用接口排掉我一般会先在测试 Cacti 实例里只导入模板不急着加设备。导入完成后打开“图形模板”列表逐个点开看它引用的数据源名称再打开“数据查询”看它定义的 OID 表根节点。这个动作花十分钟能提前发现大部分命名不一致的问题。模板包里的甲厂、乙厂、丙厂三类设备常见做法是分别建主机模板不要用一个模板硬套所有型号因为温度、电源、光模块的 OID 分支经常不一样。2.2 导入前核对 CactiEZ 10.1 的版本、路径和权限CactiEZ 10.1 的 Web 目录常见路径是/var/www/html/cactiCLI 脚本在cli子目录RRD 文件在rra目录。不同安装方式可能略有差异先用find或ls确认不要直接照抄路径。导入模板前至少做两件事备份数据库和模板目录确认 Web 用户对templates、rra、log目录有写权限。模板导入会写数据库图形生成会写 RRD 文件权限不对时日志里通常只给一句模糊报错排查起来很费时间。#!/bin/bash # 导入前备份 Cacti 数据库和模板目录留一份后悔药 DATE$(date %F-%H%M) mysqldump -u root -p cacti /root/cacti-db-${DATE}.sql tar -czf /root/cacti-templates-${DATE}.tar.gz /var/www/html/cacti/templates ls -lh /root/cacti-db-${DATE}.sql /root/cacti-templates-${DATE}.tar.gz这段脚本里DATE用来给备份文件加时间戳mysqldump导出cacti库tar打包模板目录最后ls -lh确认文件确实生成。-p会交互式提示输入数据库密码不要把密码写进脚本历史。备份目录按现场规范改示例放在/root只是图省事。导入前还要确认 PHP 和 RRDtool 能正常跑CactiEZ 自带环境一般没问题但如果你换过 PHP 版本模板里的某些函数可能不兼容。注意模板导入不是幂等操作。同名模板重复导入可能生成新 hash也可能跳过取决于导入页面的勾选项。生产环境先备份再在测试实例验证。2.3 导入顺序与 hash 冲突处理Cacti 的模板导入页面通常能一次选多个 XML 文件但底层仍按对象类型处理。稳妥顺序是先导入数据模板和数据查询再导入图形模板最后导入主机模板。原因是图形模板引用数据模板主机模板引用图形模板反过来导入时容易找不到依赖。导入页面如果有“替换已有模板”或“保留现有模板”选项第一次导入选保留确认没有冲突后再决定是否覆盖。hash 冲突是常见坑。Cacti 用 hash 判断模板是否重复模板作者改过名字但没改 hash或者你之前导入过同源模板都会触发冲突。处理方式不是硬删生产模板而是先在测试实例里导入打开数据库看host_template、graph_template表里的hash和name确认重复的是哪一类。需要清理时只删测试实例里的记录生产环境按“先导出、再改名、后导入”的顺序走。常见做法是把模板名加上现场前缀比如“某机房-甲厂接入交换机”避免和已有模板撞名。-- 导入后核对模板是否真正落库name 和 hash 一起看 SELECT id, name, hash FROM host_template WHERE name LIKE %交换机%; SELECT id, name, hash FROM graph_template WHERE name LIKE %交换机%; SELECT id, name FROM data_template WHERE name LIKE %交换机%;这几条 SQL 只读用来确认模板落库情况。host_template和graph_template都有hash字段名字相似但 hash 不同说明是两份独立模板名字相同 hash 也相同说明重复导入被合并或跳过。data_template表主要看名字和采集类型。查完不要随手删记录Cacti 里模板被设备引用后直接删表会留下孤立数据源后面图形会报错。3. SNMP 采集落地先把 OID 跑通再谈模板绑定模板导入成功只代表 Cacti 认识这些对象不代表设备能返回数据。交换机监控的成败在 SNMP 这一层版本、团体名、ACL、OID 分支、索引类型任何一项不对图形就是空白。我的习惯是先用命令行把单台设备的 OID 跑通再把同样的参数填进 Cacti。命令行能看到原始返回比在 Web 页面里猜“为什么没图”直接得多。甲厂、乙厂、丙厂的私有 MIB 分支不同模板里的 OID 只是起点现场要按设备型号做替换和验证。3.1 SNMP 版本、只读团体名与设备侧 ACLCacti 采集交换机一般用 SNMP v2c够用且配置简单。团体名用只读权限不要图省事给读写。设备侧如果有 ACL要把 Cacti 服务器的管理地址加进允许列表否则snmpwalk会超时Cacti 日志里只会写“SNMP error”。团体名里如果包含特殊字符命令行用单引号包住Cacti 的 Web 表单里也要保持一致前后空格都算不同字符串。常见翻车点是复制粘贴时多了一个空格排查半天以为是 OID 问题。参数常见值说明SNMP 版本v2c交换机监控够用兼容性好团体名只读字符串不要用读写团体名按现场规范设置端口161改过端口时 Cacti 设备配置里同步改超时2 到 3 秒跨网段或设备忙时适当加大重试1 到 2 次重试太多会拖慢轮询设备侧 ACL 没放行时现象是命令行snmpwalk超时但ping通。这时不要先怀疑 Cacti先在本机用snmpget取sysDescr。能取到系统组说明 SNMP 通取不到查团体名、ACL、SNMP 服务是否开启。Cacti 服务器如果有多个网卡确认出站源地址是设备 ACL 里放行的那个多网卡环境经常在这里踩坑。3.2 用 snmpwalk 做单机 OID 验尸先取系统组再取私有 MIB 根。系统组 OID 是1.3.6.1.2.1.1能返回设备描述、运行时间、联系人等信息用来确认 SNMP 基本可达。私有 MIB 根用模板里写的企业分支示例里用1.3.6.1.4.1.99999占位实际替换成模板中对应厂商的分支。不要直接 walk 整个1.3.6.1.4.1设备上可能挂了很多子代理输出太大还慢。# 先取系统组确认 SNMP 可达 snmpwalk -v 2c -c RO_COMMUNITY -t 3 -r 1 192.0.2.10 1.3.6.1.2.1.1 # 再取模板里的私有 MIB 根确认 CPU、内存、温度分支有返回 snmpwalk -v 2c -c RO_COMMUNITY -t 3 -r 1 192.0.2.10 1.3.6.1.4.1.99999-v 2c指定版本-c后面是只读团体名-t 3是超时 3 秒-r 1是重试 1 次。第一条返回sysDescr、sysUpTime等第二条返回私有分支。如果第二条为空但第一条正常说明模板里的 OID 分支和当前设备型号不匹配需要查设备 MIB 文档或换模板里的对应分支。不要拿一个型号的 OID 硬套整个系列端口数量和传感器编号经常变。批量验证时我一般用一个小脚本先扫一遍不直接往 Cacti 里加设备。下面这段 Python 只取sysDescr和sysUpTime用来判断设备是否可达输出成功或失败方便先筛掉网络不通、团体名错误的地址。脚本里的团体名和地址都是示例实际用时从环境变量或权限 600 的配置文件读取不要硬编码到仓库里。import subprocess devices [ (SW-ACC-01, 192.0.2.10), (SW-ACC-02, 192.0.2.11), ] for name, ip in devices: # 只取 sysDescr 和 sysUpTime判断 SNMP 是否可达 cmd [ snmpget, -v, 2c, -c, RO_COMMUNITY, -t, 2, -r, 1, ip, 1.3.6.1.2.1.1.1.0, 1.3.6.1.2.1.1.3.0, ] result subprocess.run(cmd, capture_outputTrue, textTrue) if result.returncode 0: lines result.stdout.splitlines() print(f{name} OK: {lines[0] if lines else no output}) else: print(f{name} FAIL: {result.stderr.strip()})subprocess.run调系统里的snmpgetcapture_outputTrue收标准输出和错误textTrue让输出按字符串处理。returncode为 0 表示命令成功非 0 时打印错误。这个脚本只做可达性筛查不判断具体 OID 是否正确所以跑通后还要回到snmpwalk看模板里的业务 OID。批量设备多时加一个超时和并发上限不要一次开几百个进程把管理口打满。3.3 把 OID 映射到数据查询和图形模板模板里的数据查询通常按表 OID 取索引比如端口表用ifDescr或ifName做索引传感器表用传感器编号做索引。CPU、内存这类标量指标一般用snmpget单点取端口流量用snmpwalk取表。数据模板里的数据类型要匹配端口字节计数是 COUNTER温度是 GAUGECPU 百分比是 GAUGE。类型填错时图形会变成一条直线或者出现负值看起来像“设备坏了”其实是模板参数问题。监控项OID 示例占位数据类型采集方式CPU 利用率1.3.6.1.4.1.99999.1.1.1.0GAUGEsnmpget 单点内存利用率1.3.6.1.4.1.99999.1.1.2.0GAUGEsnmpget 单点温度1.3.6.1.4.1.99999.1.2.1.1.3GAUGE按传感器索引 walk端口入流量1.3.6.1.2.1.31.1.1.1.6COUNTER按 ifIndex walk端口出流量1.3.6.1.2.1.31.1.1.1.10COUNTER按 ifIndex walk端口状态1.3.6.1.2.1.2.2.1.8GAUGE按 ifIndex walk表里的 OID 是占位示例私有分支要按模板里的实际值替换。端口流量优先用 64 位计数器ifHCInOctets、ifHCOutOctets千兆以上链路用 32 位计数器会很快回绕图形出现周期性尖峰。数据查询里如果同时抓到物理口和 VLAN 接口图形会多出一堆无用图例常见做法是按ifType过滤只保留以太网口或者在索引过滤里排除Vlan、Loop之类描述。这一步不做后面主机模板一绑就是几百张图轮询压力立马上来。4. 模板配置主机模板、图形模板与数据查询的接线方式模板导入后真正决定“图好不好看、轮询扛不扛得住”的是绑定方式。主机模板不是绑得越多越好图形模板也不是每个指标都要单独一张图。Cacti 的轮询是按数据源走的一台交换机绑几十张图几百台设备就是几万个数据源轮询器压力会很明显。我的做法是先定一个最小可用集CPU、内存、温度、电源、上联端口流量、端口状态先跑一周看数据完整性再按需要加光功率、丢包、广播风暴。甲厂、乙厂、丙厂的模板分开绑定避免 OID 不匹配。4.1 主机模板绑定哪些图形才不臃肿主机模板里常见会挂这些图形模板设备 CPU、内存、温度、电源状态、风扇状态、端口流量、端口状态、光模块收发光。端口流量和端口状态通常是“按端口自动生成”不是固定几张图所以主机模板绑定的是图形模板规则具体生成多少张取决于数据查询返回的索引数量。接入层交换机端口多绑定前先做索引过滤把未使用的端口和逻辑接口排掉否则一台 48 口交换机可能生成上百张图其中一半是空的。图形模板是否默认绑定适用场景注意事项CPU/内存是所有管理型交换机标量 OID确认返回百分比还是原始值温度/电源/风扇按型号机房核心、汇聚不同型号传感器索引不同先 walk 再绑端口流量是上联口和关键接入口用 64 位计数器过滤逻辑接口端口状态是所有物理口状态图别和流量图重复绑光模块收发光按需有光口上联的设备不是所有光模块都支持 DOM先确认 OID 有返回绑定主机模板时先在测试设备上应用看“图形”列表里生成了多少张图再决定是否批量。常见误用是把所有图形模板全勾上结果一台设备几百张图真正有人看的没几张。我一般会让主机模板保持精简特殊指标用单独的图形模板按设备手动加或者在主机模板里用“图形模板分组”控制。Cacti 的图形树也要规划按机房、角色、厂商分树后面找图会快很多。4.2 数据查询的索引、过滤和调试模式数据查询的核心是索引。端口表用ifIndex做索引但显示名要用ifDescr或ifName传感器表用传感器编号做索引显示名用传感器描述。索引字段选错时图形标题会变成一串数字或者同一个端口生成多张图。数据查询的 XML 里通常有“索引类型”和“过滤规则”自动索引适合端口会变动的设备手动索引适合固定传感器。导入模板后先打开数据查询的调试模式Cacti 会列出它从设备取到的索引和值确认索引数量与设备实际端口数对得上。-- 查数据查询和图形模板的关联确认模板不是“空壳” SELECT dq.id, dq.name, dq.xml_path FROM data_query dq WHERE dq.name LIKE %交换机%; SELECT gt.id, gt.name, gt.hash FROM graph_template gt WHERE gt.name LIKE %端口流量%;data_query表里xml_path指向数据查询 XML 文件导入后确认文件确实在模板目录下。graph_template表看图形模板是否落库。查完回到 Web 页面打开“数据查询”里的调试模式选一台测试设备运行观察返回的索引列表。如果索引列表为空先查 SNMP 是否可达如果索引太多回到过滤规则里加条件。过滤规则不要写得太死设备扩容后新增端口会被漏掉常见做法是按接口类型过滤不按端口号硬编码。4.3 用 CLI 批量加设备并套模板设备少时 Web 页面一台台加可以设备多时用 Cacti 自带的 CLI 脚本更稳。Cacti 1.x 的add_device.php在cli目录下参数包括设备名、IP、主机模板、团体名、SNMP 版本等。路径按实际安装改示例用/var/www/html/cacti/cli。先跑--help看当前版本支持的参数不要直接照抄旧版本文档。批量添加前先用一台设备验证模板名完全一致主机模板名多一个空格都会找不到。cd /var/www/html/cacti/cli php add_device.php \ --descriptionSW-ACC-01 \ --ip192.0.2.10 \ --template国产交换机主机模板-甲厂 \ --communityRO_COMMUNITY \ --snmp_version2 \ --snmp_port161 \ --notes接入层模板导入后先单机验证--description是 Cacti 里显示的设备名--ip是管理地址--template必须和主机模板列表里的名字完全一致--community是只读团体名--snmp_version2对应 v2c--snmp_port默认 161--notes写现场备注。批量时把设备清单做成 CSV用 shell 循环读每加一台就检查返回码。不要一次性加几百台然后立刻开轮询先加十台等一轮轮询周期结束看图形和数据源都正常再扩量。Cacti 的轮询周期常见是 5 分钟扩量前把poller.php的并发和 PHP 内存限制一起看别只加设备不调轮询。5. 避坑与排查导入报错、图形空白、OID 错位和设备掉线模板类资源最容易出现“导入成功但用不了”的落差。Cacti 的日志分散在 Web 日志、轮询器日志、数据库和 RRD 文件里排查时不能只盯一个页面。下面几条是血泪经验里出现频率最高的按“现象、原因、解决”拆开写。每条都先在测试设备上复现确认不是网络问题再改模板。生产环境改模板前先备份改完只对单台设备重新应用不要批量重建数据源。5.1 导入阶段的三个硬坑现象导入页面提示模板 hash 已存在或者导入后模板列表里出现两个同名模板。原因之前导入过同源模板或者模板作者改过名字没改 hashCacti 按 hash 判断重复。解决先在测试实例查host_template、graph_template的hash确认重复对象生产环境不要直接删模板先导出当前模板再把新模板改名加前缀后导入。如果只是测试可以清空测试库重来生产环境按“停用旧模板、绑定新模板、观察一轮、再清理”的顺序走。现象导入成功但给设备套主机模板时下拉框里找不到。原因主机模板导入失败但页面没明显报错或者模板类型不匹配比如把图形模板当主机模板导入。解决打开“模板导入”页面看历史记录再到host_template表确认记录存在检查 XML 根节点类型主机模板和图形模板的 XML 结构不同。常见做法是先把模板包解压看每个 XML 的name和type按类型分批导入不要一次全选。现象导入后图形模板点开报“数据源不存在”。原因图形模板引用的数据模板没有先导入或者数据模板名字被改过。解决按数据模板、数据查询、图形模板、主机模板的顺序重新导入如果名字被改过在图形模板里重新选择数据源。Cacti 的模板引用靠名字和 hash改名后不会自动修复引用关系所以改模板名要同步改引用。5.2 采集与绘图阶段的四个软坑现象设备加上了图形也生成了但图是空白或者只有一条零线。原因SNMP 不可达、团体名错、OID 分支不匹配或者数据查询索引没取到。解决先在命令行snmpwalk模板里的 OID确认有返回再看cacti.log和poller.log有没有 SNMP error最后打开数据查询调试模式看索引列表。如果命令行有返回、Cacti 没数据检查 Cacti 设备的 SNMP 版本、端口、团体名是否和命令行一致。现象端口流量图有图但数值明显偏小或者周期性归零。原因千兆以上链路用了 32 位计数器或者数据模板类型填成了 GAUGE。解决改用ifHCInOctets、ifHCOutOctets64 位计数器数据源类型设为 COUNTER已经建好的数据源需要重建改模板不会自动改历史数据源。重建前备份 RRD避免历史数据丢失。现象端口图例错位A 端口的流量画到了 B 端口上。原因设备重启或板卡插拔后ifIndex变化数据查询还按旧索引取数。解决检查数据查询的索引类型端口变动频繁的环境用ifName或ifDescr做稳定索引必要时重新跑一次数据查询Cacti 里有“重新索引”功能重建前先确认设备侧端口描述没有重复。现象温度、电源图偶尔断点其他图正常。原因传感器 OID 是表结构某些型号只返回部分索引或者设备忙时 SNMP 超时。解决单独对传感器分支做snmpwalk确认索引数量把该数据查询的超时和重试调大一点如果设备本身返回不稳定减少一次性 walk 的范围拆成多个数据查询。不要把所有传感器塞进一个查询里一个超时会影响整组数据。5.3 轮询性能与权限的收尾检查设备量上来后轮询变慢、CPU 升高是常见问题。先看poller.log里一轮轮询耗时再看 Cacti 的轮询器并发设置。数据源太多时减少无用图形比换服务器更有效。端口状态图如果没人看可以从主机模板里去掉光模块图只给有光口上联的设备绑。Cacti 的轮询是按数据源逐个执行模板绑得越臃肿压力越大。我的习惯是每加一批设备就跑一次手动轮询观察耗时和错误数再决定下一批加多少。# 排查时先看日志、RRD 文件和手动轮询结果 tail -n 100 /var/www/html/cacti/log/cacti.log tail -n 100 /var/www/html/cacti/log/poller.log find /var/www/html/cacti/rra -name *sw-acc-01* -ls php /var/www/html/cacti/poller.php --forcecacti.log记录 Web 侧和采集侧的错误poller.log记录轮询过程find确认 RRD 文件是否生成poller.php --force手动跑一轮看实时输出。路径按实际安装改CactiEZ 10.1 常见路径是/var/www/html/cacti。如果 RRD 文件不存在查权限和轮询器用户如果文件存在但图形不更新查 RRDtool 版本和时区。权限问题常见于手动用 root 跑过轮询导致 RRD 文件属主变成 rootWeb 用户写不进去。注意不要用 root 长期跑 Cacti 轮询。RRD 文件属主错乱后图形会停止更新日志里可能只报“Permission denied”。改回正确属主后等一轮轮询再观察。6. 批量验证从单台交换机到一组设备的检查清单单台验证通过后批量铺开前我一般会做一张验收表不靠记忆。先确认 SNMP 可达、模板绑定、数据源生成、RRD 文件、图形刷新这五项再扩到十台最后按机房分批。每批加完等一个轮询周期看poller.log里的错误数和耗时。下面这段命令用来做单机验收取sysUpTime确认设备活着再看 RRD 目录里有没有对应文件。192.0.2.10和团体名按现场替换。# 单机验收SNMP 可达 RRD 文件存在 轮询无报错 snmpget -v 2c -c RO_COMMUNITY -t 2 -r 1 192.0.2.10 1.3.6.1.2.1.1.3.0 find /var/www/html/cacti/rra -name *sw-acc-01* -ls tail -n 50 /var/www/html/cacti/log/poller.logsnmpget取sysUpTime有返回说明设备侧采集通find看 RRD 文件是否按设备名生成poller.log看最近一轮有没有 SNMP timeout 或数据源错误。三项都正常再把设备加进监控大屏或告警平台。批量时用 CSV 维护设备名、IP、模板名、机房、备注CLI 循环读取每加一台写一条日志。加完十台先别急着扩等一轮轮询结束抽查三台的 CPU、内存、上联端口流量图确认图和设备对得上。验收项通过标准不通过先查SNMP 可达snmpget sysUpTime有返回团体名、ACL、管理地址模板绑定设备图形列表有预期图形主机模板名、图形模板引用数据源数据源状态正常无报错数据查询索引、OID 分支RRD 文件rra目录有对应文件目录权限、轮询用户图形刷新一个轮询周期后图形有数据轮询日志、RRDtool、时区从那以后我每次导入模板前都强制走一遍备份、单机snmpwalk、批量加设备三步少一步后面就要花更多时间补。这份 CactiEZ 10.1 交换机主机监控模板适合先在小范围验证再按机房铺开把 OID 和索引对齐图形稳定之后后面加设备就是重复动作。希望帮到你。本文还有配套的精品资源点击获取
返回列表