参考这篇文章

还有马哥的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 communitySNMPNETSTAT=/usr/bin/snmpnetstatTEMPFILE=`mktemp /tmp/$1_tcp_conns.XXXXXX`$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1 > $TEMPFILEESTABLISHED=`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个参数,<hostname> <snmp-community> 是需要传递给脚本的变量,接着下面可以定义传递的数据。

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

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

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

  • 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

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

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

    ESTABLISHED_NUM:2 TIMEWAIT:0 SYN_received:0

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

wKioL1T9OLrTJZTBAAFhphTc3I4624.jpg    Field[Output]内填入脚本产生的数据名

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

PS:这样就完成了思路里的第一步。

二、定义数据模板,Data Templates

1、创建数据模版,  ——>右上角 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上,终于完成了!