Cacti 安装配置:回大纲
Net-SNMP 的一个强大功能就是你可以对它进行扩展:
让我们运行一下 /tmp/foo.sh 脚本:
- $ /tmp/foo.sh -arg1123
现在把如下这行添加到 snmpd.conf 文件中:
- exec foo /bin/sh /tmp/foo.sh -arg1
现在,脚本的返回结果可以通过 ucdavis.extTabel.extEntry 树:
脚本的输出: ucdavis.extTable.extEntry.extOutput
退出的状态: ucdavis.extTable.extEntry.extResult
命令:
- ucdavis.extTable.extEntry.extCommand
你可以使用如下的 SNMP 查询对结果进行检测:
- $ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.8.1UCD-SNMP-MIB::extIndex.1 = INTEGER: 1UCD-SNMP-MIB::extNames.1 = STRING: fooUCD-SNMP-MIB::extCommand.1 = STRING: /bin/sh /tmp/foo.sh -arg1UCD-SNMP-MIB::extResult.1 = INTEGER: 0UCD-SNMP-MIB::extOutput.1 = STRING: 123UCD-SNMP-MIB::extErrFix.1 = INTEGER: 0UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
extOutput 翻译 .1.3.6.1.4.1.2021.8.1.101 指令后,"foo" 是我们的第一个执行指令,在 OID 的最后增加了 .1。
在 Cacti 中,可以按如下方法使用 "SNMP - Generic OID Template" :
之后你会惊喜的发现 /tmp/foo.sh 脚本的执行结果在Cacti中被图形化输出了。
现在,让我们执行第二个脚本,这个脚本会返回多于一个结果:
- $ /tmp/bar.sh456789
这个脚本返回了两个值,每个值一行(这一点很重要)。
另一个在 snmpd.conf 中调用脚本的办法是指定一个 OID ,如下文所示:
- exec .1.3.6.1.4.1.2021.555 /bin/sh /tmp/bar.sh
执行这个查询:
- $ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.555UCD-SNMP-MIB::ucdavis.555.1.1 = INTEGER: 1UCD-SNMP-MIB::ucdavis.555.2.1 = STRING: "/bin/sh"UCD-SNMP-MIB::ucdavis.555.3.1 = STRING: "/tmp/bar.sh"UCD-SNMP-MIB::ucdavis.555.100.1 = INTEGER: 0UCD-SNMP-MIB::ucdavis.555.101.1 = STRING: "456"UCD-SNMP-MIB::ucdavis.555.101.2 = STRING: "789"UCD-SNMP-MIB::ucdavis.555.102.1 = INTEGER: 0UCD-SNMP-MIB::ucdavis.555.103.1 = ""
脚本返回的第一行可以通过 .1.3.6.1.4.1.2021.555.101.1 进行访问,第二行可以通过 .1.3.6.1.4.1.2021.555.101.2 进行访问,以此类推。
之后你就可以使用 Cacti 的 "SNMP - Generic OID Template" (每个 OID 一个数据源)。
假如你想同意一个日志文件中的条目数,那么添加如下内容到 snmpd.conf 中:
- logmatch cactistats /home/cactiuser/cacti/log/cacti.log 120 SYSTEM STATS
(符合条件的全局统计数可以通过 OID .1.3.6.1.4.1.2021.16.2.1.5.1 进行访问;符合条件的 "正则匹配数" (通过每个文件特征重置) 可以通过 OID .1.3.6.1.4.1.2021.16.2.1.7.1 进行访问)。
使用下面的查询,可以列出所有能够访问的变量:
- $ snmpwalk -v 1 -c public localhost logMatchUCD-SNMP-MIB::logMatchMaxEntries.0 = INTEGER: 50UCD-SNMP-MIB::logMatchIndex.1 = INTEGER: 1UCD-SNMP-MIB::logMatchName.1 = STRING: cactistatsUCD-SNMP-MIB::logMatchFilename.1 = STRING: /home/cactiuser/cacti/log/cacti.logUCD-SNMP-MIB::logMatchRegEx.1 = STRING: SYSTEM STATSUCD-SNMP-MIB::logMatchGlobalCounter.1 = Counter32: 301634UCD-SNMP-MIB::logMatchGlobalCount.1 = INTEGER: 301634UCD-SNMP-MIB::logMatchCurrentCounter.1 = Counter32: 6692UCD-SNMP-MIB::logMatchCurrentCount.1 = INTEGER: 6692UCD-SNMP-MIB::logMatchCounter.1 = Counter32: 1UCD-SNMP-MIB::logMatchCount.1 = INTEGER: 0UCD-SNMP-MIB::logMatchCycle.1 = INTEGER: 120UCD-SNMP-MIB::logMatchErrorFlag.1 = INTEGER: 0UCD-SNMP-MIB::logMatchRegExCompilation.1 = STRING: Success
现在,让我们使用另外一个有趣的指令, "proxy"。 以 Squid 代理为例:启用时,SNMP 代理会侦听 UPD 3401端口。如果你想在Cacti中绘制系统图形和Squid图形,但是又不想Cacti中声明这两个设备,那么,在 snmpd.conf 中添加如下内容:
- proxy -v 1 -c public localhost:3401 .1.3.6.1.4.1.3495.1
Squid SNMP 树可用通过访问 .1.3.6.1.4.1.3495.1 获取。
对这个主机进行查询:
- $ snmpwalk -v 1 -c public 10.151.33.3 sysdescrSNMPv2-MIB::sysDescr.0 = STRING: Linux srv1.foo.com 2.6.8.1-12mdk #1 Fri Oct 1 12:53:41 CEST 2004 i686
下面是如何输出 Squid 部分(指定的 OID 会返回 Squid 版本):
- $ snmpwalk -v 1 -c public 10.151.33.3 .1.3.6.1.4.1.3495.1.2.3.0SNMPv2-SMI::enterprises.3495.1.2.3.0 = STRING: "2.5.STABLE6"
如果你想知道如何开启 Squid SNMP 代理,那么,请参照其他文章。
【编辑推荐】