cacti的有许多数据模板,可以满足大多数需求。http://docs.cacti.net/templates
但是如果有比较特殊的要求,就只能自己定制了。
模板的定制首先要明确一个概念,模板是否成功,在于图表是否显示正常,图表是否显示正常在于数据是否正确。所以归根到底核心问题首先是得到数据。
关于得到数据,有两种方式。
A.用脚本,这种比较自由。但是要求脚本编写的功底。不是很通用;
B.用snmp的OID,这个是基于snmp提供的OID来获取数据,也可以为自己编写的确脚本赋予OID。这个要对snmp进行设置,但数据获得相对明确,而且通用性比较高。一些通用的OID我就转载前辈的记录了http://www.cnblogs.com/aspx-net/p/3554044.html
严格来说,这一篇只能算是对各前辈文章的再述和实验算不得原创,但我打算写一点我自己的感想,希望各位——也包括多年后的我,在看完之后能得到比原创更多的东西。
A.用脚本取得监控数据
首先要写一个脚本。
# vim only.sh
#!/bin/bash
echo $RANDOM
输出一个随机数,给它755权限之后,放到./cacti/scrpts/下面
# chmod 755 only.sh
# cp only.sh /var/www/html/cacti/scripts/
(这篇的环境和之前的不一样了,但基础配置是一样的,所以路径什么不要一概而论)
好了。转到cacti界面。
选择“Collection Methods”——》“Data Input Methods”,然后点击右上角的“add”
Data Input Mothods的录入
大概说明一下,Name是数据录入方法的名称,这个随便写;Input Type,这个是cacti采取数据的方式,因为是脚本,所以这里选的是“Script/Command”;Input
String,这个是脚本执行的过程,即脚本执行命令,sh改成/bin/bash也行,只要能执行。
一切OK之后,右下角“Create”。
“Create”之后,会出来这两项。“Input Fields”是脚本运行时要输入的参数,我们这个脚本没有输入参数,所以不管它;“Output Fields”是脚本运行输出的数据,我们要得到的就是这个,所以点击右上角“add”
输出字段的定义。这里要说明一下:
Field,这个是cacti对这个输出字段调用时的标识符,说白了就是这个输出字段的名称。
Friendly Name,这个其实是针对Field的补充说明,让人知道这个字段输出的具体是什么。
Update RRD File,这个是否更新RRD文件,这个不勾,最后的图上可能没有点。
一切OK。就点击右下的“save”
出去之后是“Data Input Methods”,别忘了再save一次。
下面,生成数据模板。
选择左面“Templates”——》“Data Templates”,点击右上角的“add”
数据源添加页面:
“Data Templates”
Name,数据模板名称
“Data Source”
Name,数据源名称
Data Input Method,选择我们刚刚录入的数据录入方法RANDOM。特别说明一下,如果这里为空,那么最后rra文件将无法生成,也自然就没有图形。
“Data Source Item”
Internal Data Source Name,这个是cacti内部调用数据源时使用的名称标识,只能用字母和_。
Minimum value 和 Maximum value,默认是0,使用U是依实际为主,不设图形最大值。
Save完之后,可以看到
这里“Output field”已经自动识别了,我们这里只输出一个,但如果有多个输出请选择自己实际要的那个。然后再“save”,这里搞定。下一步,生成图形模板。
生成图形模板。
点击左侧“Templates”——》“Graph Templates”,然后点击右上角的“Add”
这里分成两段设置
第一,设置图形模板的名称和图形Title
“Template”Name,是图形模板的名称。
“Craph Template”Title,是显示在图形模板上的标题。
设置好之后直接“save”
添加完成之后,在“Template”上层多了两个选择,开始添加图形相关项目,选择右上的“Add”
图形项目,其实就是把数据源加到图形并显示的过程。基本流程是:先把数据源添加到图形并设置数据基本的图形表现类型,然后针对相关数据进行统计。这两者的图形项目添加,有小小的不同。
数据源添加到图形并设置数据基本的图形表现类型:
关键在于“Graph Item Type”和“Consolidation Function”。“Graph
Item Type”其实是选择选择具体的图形框架;“Consolidation Function”这项选择AVERAGE。
点击右下角的“Create”之后,可以明显的看出,数据源已经被添加到图形模板中,数据基本的图表类型为LINE1
现在点击右上角“Add”把要统计的数据添加进图形模板
以统计数据类型“MAX”为例。
“Graph Item Type”的类型必然是“GPRINT”
“Consolidation Function”这个根据实际选择。
“Text Format”这个是显示在图形上的标签。
“Create”之后,是这样的。
最后我添加了四个统计数据,最后是这样的:
添加方式都一样,请注意一下不同点。
之后拉到最下(现在还在添加“图形模板”不是把“图形项目”添加就了事的)进行“save”
下一步,应用 图形模板,生成图形,开始监控数据。
这里有两种方法。1:直接放到默认树图,2:添加到本机图形。
添加到本机图形比较简单,先说这个。
从左边“Management”——》“Devices”,选择“Localhost”(这是个在本机的单一脚本只能添加到localhost,如果脚本是所有机器通用那无所谓添加到哪个机器)
拉到最下面,选择我们刚刚新建的图形模板“随机数图形模板”,进行“Add”添加
然后拉到最上面,选择“Create Graphs for this Hostt”添加新图表
勾选之后,右下角“Create”
转到图相区,几分钟之后就有图形出现了
最下面这行,就是在图形模板里添加的标签。
不过由于title不支持中文,所以图行标签没有显示,现在改回来。
再刷新一下图形,标签就出来了。
直接放到默认树图
从左边“Management”——》“Graph Management”,直接右上角“Add”
然后选择图形模板,不要选择HOST,然后“Create”
添加出来是没有图的,要选择数据源才行。SO,现在转过去添加数据源。
从左边“Management”——》“Data Sources”,Host选择“None”,点击右上角“Add”
选择相应的数据模板,点击右下角“Create”
可以看到模板文件已经生成了,直接右下角“save”
从左边“Management”——》“Graph Management”,然后直接选择图形Random
选择刚刚新建的数据源,记住是“NO Host”打头,然后Save
再点进去
图形就有了。
下一步,把这图形添加到默认树
从左边“Management”——》“Graph Trees”,选择“Default
Tree”
直接选择右上角“Add”
选择添加图形。
“Tree Item Type”,选择“Graph”,(Header是子目录,HOST是新主机)
“Graph”选择要添加的图形模板。(这里很好认,没有HOST头的就是)
然后转到图形查看
已经有了。
B.用snmp的OID来获取数据
恩,既然都说OID了,那这种方法最核心的问题就是要取相关的OID码。OID码是snmp服务直接读取服务器数据的数据编码。Snmp服务内置了一部分OID码,如上(http://www.cnblogs.com/aspx-net/p/3554044.html)这部分OID码基本是通用的,此外还可以自己定义OID直接读取脚本输出结果,注意自己定义的OID码,不能占用snmp内置已经存在的。
说些题外话,网上资料很多,我一开始百试不得其解。后来发现,其实是对snmp并不了解。
恩,总的来说。得益于这篇文章:
http://wenku.baidu.com/link?url=QQYmYKElcII-2_mpN92yR4Vc9DeysSxPsCPjU3qm-U8aggYdhOwpIfgxKKZa2e397xVOmKo1NsddWStiTrjKKM6nEJsRkpJRvaEbCFQZwES
在snmp的配置文件/etc/snmp/snmpd.conf中有一个分段,是专门介绍利用脚本自定义OID的,叫Executables/scripts。但可惜的是,这个分段很长,而且是全注释状态,很容易让人忽略掉。而一般情况下,没有注释的是以pass开头的,类似这样的:
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat
再看一下上面被注释掉的例子:
exec .1.3.6.1.4.1.2021.50 shelltest /bin/sh /tmp/shtest
可以很明显的发现,下面的OID友比上面少了一位,即是说,按没注释的那条来配置是怎么都不会成功的。
废话,不多说了。开始吧。
被监控机:(如果只有一台机,也可以自己监控自己)
把之前的那个脚本,在被监控机再写一次。
# vim only.sh
#!/bin/bash
echo $RANDOM
改权限:
# chmod 755 only.sh
放到一个文件夹
# cp only.sh /temp.sh/
然后编辑 /etc/snmp/snmpd.conf
添加如下的条目
exec .1.3.6.1.4.1.200.11 test /temp.sh/only.sh
说明一下:
exec 是执行命令
.1.3.6.1.4.1.200.11 这一段是自定义的OID码,但记住是八位。
test 这个其实只是说明标签或者说名称之类的,总之就是让你知道脚本是干什么的,随意写。
/temp.sh/only.sh 脚本路径
重启snmp服务
#service snmpd restart
OID码可以自己随意写,但在这之前需要测试一下是否已被占用
例:
#snmpwalk -v 2c -c public 127.0.01 OID码
如果如下所示表示可以使用
例
# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.200.100
SNMPv2-SMI::enterprises.200.100 = No Such Object available on this agent at this OID
如果如下所示表示已经被占用了
# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.200.11
SNMPv2-SMI::enterprises.200.11.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.200.11.2.1 = STRING: "test"
SNMPv2-SMI::enterprises.200.11.3.1 = STRING: "/temp.sh/only.sh"
SNMPv2-SMI::enterprises.200.11.100.1 = INTEGER: 0
SNMPv2-SMI::enterprises.200.11.101.1 = STRING: "18985"
SNMPv2-SMI::enterprises.200.11.102.1 = INTEGER: 0
SNMPv2-SMI::enterprises.200.11.103.1 = ""
(被监控机的其它设置请查看 添加监控机那篇)
之后可以转到监控机上,测试OID码是否能够应用。
# snmpwalk -c public -v 2c 被监控机IP .1.3.6.1.4.1.200.11
SNMPv2-SMI::enterprises.200.11.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.200.11.2.1 = STRING: "test"
SNMPv2-SMI::enterprises.200.11.3.1 = STRING: "/temp.sh/only.sh"
SNMPv2-SMI::enterprises.200.11.100.1 = INTEGER: 0
SNMPv2-SMI::enterprises.200.11.101.1 = STRING: "24147"
SNMPv2-SMI::enterprises.200.11.102.1 = INTEGER: 0
SNMPv2-SMI::enterprises.200.11.103.1 = ""
OK,可以了。现在从这组数据中找到我们所需要的数据:
SNMPv2-SMI::enterprises.200.11.101.1 = STRING: "24147"
很明显,就是这一行。
OK,那么我们实际所需的OID码就是:
.1.3.6.1.4.1.200.11.101.1
恩。自己比对一下有什么不同
这是最初的:.1.3.6.1.4.1.200.11
这是结果行: .200.11.101.1
这是最后结果:.1.3.6.1.4.1.200.11.101.1
很明显了吧。
现在,我们可以操作cacti了。
这里说明一下,脚本进行数据采集的话,第一步是要添加数据输入方式,但用OID方式数据输入方式其实已被OID码代替,所以可以直接添加数据模板。
从左边选择“Templates”——》“Data Templates”,点击右上角“Add”
恩,数据模板的添加与脚本方式不同,“Data Inpu Method”选择“Get SNMP Data”,右下角“Create”
现在OID属性出来了,把上面的OID填进去吧,右下角“Save”
OK.下一步添加图形模板
左侧点击“Templates”——》“Graph Templates”,右上角“Add”
恩,如下,可以“Create”
好了。点右上角“Add”开始添加图形项目:数据源和数据统计
添加数据源:
恩,数据源已经添加,再次点击右上角“Add”开始添加数据统计
恩,这是第一个统计数据,平均数。
点击“Add”,按上面的方法依次添加“MAX,MIN,LAST”
最后结果
好了。记得点击图形模板右下角的“Save”直接保存。
恩,最后一步,添加到主机直接监控。
点击左边“Management”——》“Devices”,选择目标主机
拉到“Associated Graph Templates”,选择要添加的图形模板,“Add”
拉到最上方,点击“Create Graphs for this Host”开始添加图形
在要添加的图形后打勾,
然后拉到最下方,“create”。
OK,可以去graphs查看图形了。
如果没图,别忘记在监控机打一下命令
#/usr/bin/php /var/www/html/cacti/poller.php --force
过一会儿。。