参考这篇文章 http://www.mamicode.com/info-detail-187799.html

还有马哥的linux视频。


 cacti使用思路:


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


  1. 自定义数据收集方法,在Collection Methods下有2项,Data Queries(xml方法)和Data Input Methods (scripts, command方法)

  2. 数据收集了如何保存呢?数据模板Data Templates。数据模板定义了:怎么通过数据收集方法获取数据,获取的数据如何保存,以及保存在什么地方。(也就是调用rrdtool create , rrdtool update)

  3. 把数据模板应用到特定的device上,就会创建数据源

  4. 有了数据源,那么就可以绘图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 ,内容如下:

#!/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。

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

    Name项:填入自己定义的名字

    Input Type:选择用什么方式获取数据,因为我们是script方式,所以选择 Script/command

    Input String:脚本怎样运行,后面的2个参数,<hostname> <snmp-community> 是需要传递给脚本的变量,接着下面可以定义传递的数据。


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

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

a、添加传递给自定义脚本的变量。

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

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

  • Field[Input] 第一项:就是刚刚自定义的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

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

b、定义Output Fields,脚本输出的数据。

    我们的脚本tcp_conns.sh 正常运行会输出3个数据,注意格式,中间只有一个空格:

    ESTABLISHED_NUM:2 TIMEWAIT:0 SYN_received:0

    此时需要一个一个根据输出的名字来定义,如下图:

cacti自定义数据收集脚本,创建Data Templates和Graph Templates_cacti_05    Field[Output]内填入脚本产生的数据名


c、定义好传递的数据与产生的数据如下:

cacti自定义数据收集脚本,创建Data Templates和Graph Templates_cacti_06PS:这样就完成了思路里的第一步。


二、定义数据模板,Data Templates


1、创建数据模版,Data Templates  ——>右上角 Add开始创建模版,模版完成点Save

cacti自定义数据收集脚本,创建Data Templates和Graph Templates_cacti_07创建好了如下图,选择Output Field时,记得Internal Data Source Name对应上:

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


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


PS:创建device的过程,略。


 1、   Data Sources ———>> Add ———— >> Create

cacti自定义数据收集脚本,创建Data Templates和Graph Templates_cacti_09selected Data Template :选择刚刚定义的数据模板

host:选择要应用到那台主机。


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

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


四、添加Graph Templates 图形模版


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

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

2、创建绘图的Item

a、点击Graph Template Items 右侧的Add,添加条目:

    可以看到此时的Data Source 里面会多出我们刚刚定义的数据源,选择就可以。cacti自定义数据收集脚本,创建Data Templates和Graph Templates_cacti_12   选择好后如下图说明:

cacti自定义数据收集脚本,创建Data Templates和Graph Templates_cacti_13b、把3个数据都填好后如下图。

cacti自定义数据收集脚本,创建Data Templates和Graph Templates_自定义数据方法_14这样就创建好了Graph Templates


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


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

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

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

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

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