Cacti的基本使用
对于Cacti是通过snmpget来获取数据,使用 RRDtool绘画图形,用snmp服务获取数据,然后用rrdtool储存和更新数据,那么就可以简单理解为Cacti就是RRDTool的一个web图形界面管理工具,不用记住RRDTool那繁杂的参数选项,在Cacti界面直接填入或者选择值,即可用snmp服务获取数据,然后用rrdtool储存和更新数据。
0x01 前言
安装好cacti,登陆进入首先可以看到提示,说明了如何开始监控。
You are now logged into Cacti. You can follow these basic steps to get started.
- Create devices for network
- Create graphs for your new devices
- View your new graphs
比较难明白的是Cacti里面所谓的图形模板,数据模板,主机模板这些,但是既然Cacti是rrdtool的友好使用界面那肯定是脱离不了rrdtool的,所以需要用rrdtool如何生成图像的思维来理解如何使用Cacti
监控设备一般步骤:
1、在“Data Input Methods”把写好的脚本路径添加进去
2、在“Data Templates”定义如何生成rrd文件(定义DS和RRA,相当于rrdtool create),这里只是模板,并不生成实际rrd文件
3、在“Graph Templates”定义如何生成图片(相当于rrdtool graph),当然作为模板也不真实生成图片。
4、新增监控目标,模板有了肯定需要套用到具体设备上,在“Devices”增加设备基本信息如:IP、存活检测方式等
5、新增“Data Sources”结合数据模板生成实际的rrd文件,这里实际上也是rrdtool create的实现
6、最后就是绘图了“Graph Management”中新增内容,实际上也是rrdtool graph的实现
7、有了多个图像之后为了方便查看,在“Graph Trees”新增分支
其中在Cacti主界面左侧中每一个选项所关联涉及的内容大概如下:
按照上面在Cacti设置监控的步骤,对照rrdtool生成图像的过程应该好理解。
0x02 添加监控
对照上面描述的步骤添加,随便写了个生成随机数的脚本
#/bin/bash j=`echo $RANDOM` echo -n "myvalue:$j"
1、添加Data Input Methods
2、添加Data Templates
3、添加Graph Templates
在这里定义图形元素,比如画多少线条,颜色粗细等
4、按照以上步骤添加好模板之后就是设置关联了,添加设备,把图形模板和数据模板关联上去,最后在Graph Management中生成最终的图像,关于添加被监控主机的过程网上有很多资料,这里就不再写重复的东西了,要了解RRDTools是如何采集数,据保存数据和生成图像的,理解cacti就容易了
0x03 故障处理
有了rrdtool的知识后,对cacti不出图无数据的故障排查更加方便了,直接查看rra目录下面对应的rra文件,看其中是否含有数据,按照上面的方法添加了主机之后,无论是默认安装后的四个图还是新增的图都出现空白图的情况。
使用rrdtool fetch查看rra发现其中没有任何数据,显示皆为-nan-,艰辛的解决过程如下:
1、时间不一致
出现问题看日志是基本的处理流程,这里我不够细心,导致折腾很久才发现问题,如图,这个是早上截取的图,可是日志里显示的为PM,和当前时间相差了十二个小时,这也是日志十二小时制的显示一眼看上去和当前时间一样,而绘图的时间却是当前时间,这显示空白图也是合理的。date查看当前系统时间显示是DST时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //将时间改成CST时间后,日志的记录时间和当前系统时间一致了
2、rrd插入数据的时间戳
调整时间后还是显示空白图,查看rra还是没有数据,于是打算测试下,通过rrdtool update自行插入数据。
[root@localhost22 cacti]# rrdtool update rra/myhost_mydsname_8 N:`echo $RANDOM`
ERROR: rra/localhost_mydsname_8.rrd: illegal attempt to update using time 1459320311 when last update time is 1459363502 (minimum one second step)
上面两个时间戳的时间分别是
[root@localhost cacti]# date -d @1459320311
Wed Mar 30 14:45:11 CST 2016
[root@localhost cacti]# date -d @1459363502
Thu Mar 31 02:45:02 CST 2016
发现问题了,修改时间之后时间提前了十二个小时,rrd文件update的时间必须比最后一次更新的时间晚,所以按照这个理论,cacti无法更新rrd,自然也是空白图了。那要等到过了最后一次更新的时间戳才能插入数据。
3、硬件时钟
上面明明发现rra最后次更新时间是Thu Mar 31 02:45:02 CST 2016,可是后面无意中查看rra文件的最后更新,发现居然推后了,这样系统时间岂不是一直到达不了这个时间戳。
[root@localhost22 cacti]# rrdtool last rra/myhost_mydsname_8.rrd
1459371001
[root@localhost22 cacti]# date -d @1459371001
Thu Mar 31 04:50:01 CST 2016
此时便好奇cacti对rrd更新数据的时间戳是根据什么为标准了,查看本机时间,发现问题了,硬件时钟和系统时钟不一致,根据两个不同时间可以判断出cacti根据hwclock显示的时间来运行。同步本机的两个时间,这时候过了rra最后一次更新的时间戳应该就可以了。
[root@localhost22 cacti]# date
Wed Mar 30 16:51:50 CST 2016
[root@localhost22 cacti]# hwclock
Thu 31 Mar 2016 04:51:54 AM CST -0.788025 seconds
4、Internal Data Source Name
第二天早上一看,还是没有图/(ㄒoㄒ)/~~
可是这次就可以手动插入数据了,高兴的是直接更新rrd数据,可以显示图像了,那就可以判断出问题就出现在cacti采集数据或者更新数据的过程。
[xxx@localhost cacti]$ while(true);do rrdtool update rra/myhost_mydsname_8.rrd N:`echo $RANDOM`;sleep 60;done
最后终于找到了问题所在了,因为自行写的脚本,在定义数据模板的时候有个”Internal Data Source Name”这个并不是随便自定义的名称,要根据脚本输出的标识来确定
比如脚本中echo -n "myvalue:$value",就要根据”myvalue”来命名
还需要把原本的rrd文件删除之后,让其自动新建才能生效。(rra目录下删除或者删除数据源)
5、Heartbeat
[root@localhost cacti]# rrdtool fetch rra/myhost_mydsname_8.rrd -s 1459405920 AVERAGE
myvalue
1459405980: 2.7779000000e+04
1459406040: 1.8693000000e+04
1459406100: -nan
1459406160: 7.4240000000e+03
1459406220: 3.0414333333e+04
1459406280: -nan
1459406340: 2.0620000000e+04
1459406400: -nan
1459406460: 2.1035000000e+04
1459406520: 2.6959583333e+04
1459406580: -nan
1459406640: 1.5934000000e+04
1459406700: 3.0761683333e+04
1459406760: -nan
1459406820: 2.4725000000e+04
1459406880: -nan
1459406940: 2.7797000000e+04
1459407000: 1.6526033333e+04
1459407060: -nan
1459407120: 2.5301000000e+04
1459407180: 2.9005216667e+04
1459407240: -nan
1459407300: –nan
绘图一段时间过后,发现图像断续,查看rrd文件的内容如上,查看到Data Templates的Heartbeat设置和step相同,延长Heartbeat即可
[root@localhost cacti]# rrdtool fetch rra/myhost_mydsname_9.rrd -s 1459407780 AVERAGE
myvalue
1459407840: 3.1443649773e+04
1459407900: 1.3106983333e+04
1459407960: 2.6746500000e+04
1459408020: 1.9850050000e+04
1459408080: 2.0599833333e+04
1459408200: 1.3683100000e+04
1459408260: 1.5904333333e+03
1459408320: -nan
0x04 其他采集脚本
通过以上,基本熟悉了如何写脚本获取数据并生成图片的过程,也就是只要写出一个有数据输出的脚本就可以被cacti采集绘图。只要保证输出格式正确。
比如通过snmp获取,以下代码源于互联网。
#!/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"