gersdqw 发表于 2015-3-10 08:46:17

cacti自定义数据收集脚本,创建Data Templates和Graph Templates

cacti使用思路:

cacti自定义监控脚本进行监控的具体流程如下:



[*]自定义数据收集方法,在Collection Methods下有2项,Data Queries(xml方法)和Data Input Methods (scripts, command方法)
[*]数据收集了如何保存呢?数据模板Data Templates。数据模板定义了:怎么通过数据收集方法获取数据,获取的数据如何保存,以及保存在什么地方。(也就是调用rrdtool create , rrdtool update)
[*]把数据模板应用到特定的device上,就会创建数据源。
[*]有了数据源,那么就可以绘图Graph了。图形模板或者自定义,应用到相应的数据源上。(rrdtool graph)

实例说明:创建一个监控tcp 连接ESTABLISHED,SYN,TIMEWAIT 数目的绘图

一、创建采集数据脚本

    poller.php 是cacti的轮询器,用来收集数据,所以创建crond任务让他每5分钟执行一次。cacti/scripts 目录下放的是cacti自定义Data Input Methods的脚本文件。
    我们在cacti/scripts 下创建一个 tcp_conns.sh 的脚本,记得chmod +x ,内容如下:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
#
# $1:hostname or IP
# $2:snmp community
SNMPNETSTAT=/usr/bin/snmpnetstat
TEMPFILE=`mktemp /tmp/$1_tcp_conns.XXXXXX`
$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1 > $TEMPFILE
ESTABLISHED=`grep -i "established" $TEMPFILE | wc -l`
TIMEWAIT=`grep -i "TIMEWAIT" $TEMPFILE | wc -l`
SYNRECEIVED=`grep -i "SYNRECEIVED" $TEMPFILE | wc -l`
echo -n "ESTABLISHED_NUM:$ESTABLISHED TIMEWAIT:$TIMEWAIT SYN_received:$SYNRECEIVED"





二、在cacti上添加数据方法

1、创建自定义方法。
    Collection Methods ---> Data Input Methods ---> 右上角add,填入数据后点击create。

    Name项:填入自己定义的名字
    Input Type:选择用什么方式获取数据,因为我们是script方式,所以选择 Script/command
    Input String:脚本怎样运行,后面的2个参数,是需要传递给脚本的变量,接着下面可以定义传递的数据。

2、定义需要传递给自定义脚本的变量以及自定义方法所产生的数据

a、添加传递给自定义脚本的变量。
    点击Input Fields 右边的Add开始添加,点击create完成,因为我们有2个需要传递的变量hostname和snmp community ,所以完成一个后还需要再add一个,第二个过程略。


[*]Field 第一项:就是刚刚自定义的2个需要获取数据的变量的第一个
[*]Friendly Name:便于识别的名字,任意填写。
[*]Special Type Code:具体说明如下:
      我们看到,cacti已经定义了许多Speial Type Code。它们类似于宏,我们能够继承它并能够取得相应device相关的信息。我们知道图形和数据收集方法都必须关联到特定的device上,在定义device时,就会指定其hostname等相关信息。如果我们没有提供输入的参数,就让它自动去继承device的那些宏。如果使用hostname,那么此脚本应用到哪个设备上,就会获得那个设备的hostname。如果snmp_community,那么就会自动引用我们在添加设备时,指定的那个community。


      比如,我在定义device时,填入的信息如下,那么,此时的Special Type Code: hostname==127.0.0.1, snmp_community==public
b、定义Output Fields,脚本输出的数据。
    我们的脚本tcp_conns.sh 正常运行会输出3个数据,注意格式,中间只有一个空格:
    ESTABLISHED_NUM:2 TIMEWAIT:0 SYN_received:0
    此时需要一个一个根据输出的名字来定义,如下图:

    Field内填入脚本产生的数据名

c、定义好传递的数据与产生的数据如下:
PS:这样就完成了思路里的第一步。

二、定义数据模板,Data Templates

1、创建数据模版,Data Templates——>右上角 Add开始创建模版,模版完成点Save
创建好了如下图,选择Output Field时,记得Internal Data Source Name对应上:


三、把数据模板应用到指定device,应用后会自动创建rrd文件。

PS:创建device的过程,略。

1、   Data Sources ———>> Add ———— >> Create
selected Data Template :选择刚刚定义的数据模板
host:选择要应用到那台主机。

2、    可以点开创建好的DS进行修改,如下图:


四、添加Graph Templates 图形模版

1、创建图形模版,Graph Templates ——>> add ————>> Name ,title 自己定义,点击create后


2、创建绘图的Item
a、点击Graph Template Items 右侧的Add,添加条目:

    可以看到此时的Data Source 里面会多出我们刚刚定义的数据源,选择就可以。   选择好后如下图说明:
b、把3个数据都填好后如下图。
这样就创建好了Graph Templates

五、把图形模版关联到相关device

1、点击Graph Management右边的Add,选择刚刚定义的Graph Template到Host 上。

2、选择Graph Templates Data里的DS,刚刚都定义好了,如下图。

最后记得添加到Graph Trees上,终于完成了!

abiu 发表于 2016-5-26 17:04:43

有数据吗?按照你说的方法好像不会在/tmp目录下创建$1_tcp_conns.XXXXXX文件。或者可以创建,但是文件$1_tcp_conns.XXXXXX里面没有内容。正常应该是有snmpnetstat命令执行后的内容的。求教。如有解决方法烦请发送到15060447211@139.com。万分感激
页: [1]
查看完整版本: cacti自定义数据收集脚本,创建Data Templates和Graph Templates