批量修改Data Templates的step以及给Cacti安装插件

由于cacti-0.8.8a.tar.gz 这个版本已经安装上了插件管理工具所以这里不需要再安装cacti-plugin-0.8.7h-PA-v3.0.tar.gz,直接可以解压安装插件。

安装settings插件

官网下载地址:

http://docs.cacti.net/plugin:settings#settings

[root@radius ~]# cd /usr/local/nginx/html/cacti/plugins

[root@radius plugins]# wget http://docs.cacti.net/_media/plugin:settings-v0.71-1.tgz

[root@radius plugins]# mv plugin\:settings-v0.71-1.tgz settings-v0.71-1.tgz

[root@radius plugins]# tar -zxvf settings-v0.71-1.tgz

安装thold 插件

官网下载地址:

http://docs.cacti.net/plugin:thold#thold

[root@radius ~]# cd /usr/local/nginx/html/cacti/plugins

[root@radius plugins]# wget http://docs.cacti.net/_media/plugin:thold-v0.4.9-3.tgz

[root@radius plugins]# mv plugin\:thold-v0.4.9-3.tgz thold-v0.4.9-3.tgz

[root@radius plugins]# tar -zxvf thold-v0.4.9-3.tgz

问题㈠:

如果单击出现500错误解决办法

排错步骤:

1、 试打开php.ini中的display_errors=on看能不能显示出错误来。

2、 在命令行执行/usr/local/php/bin/php –rf define_syslog_variables看是否支持define_syslog_variables函数

3、 define_syslog_variables是在初始化与 syslog 相关的变量,而syslog相关变量已经被全局定义,无需再定义,直接注释掉settings.php 132行即可。

4、 http://www.centos.bz/2012/01/cacti-install-tutorials/

注释掉132行

clip_image002

问题㈡:

如果点击clip_image004出现 You are running MySQL in Strict Mode,which is not supported by Thold 就需要修改sql模式一般在安装好MYSQL之后就修改最好,因为你装好CACTI再来修改你的数据库就会出问题

clip_image006

mysql> SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

增加如下一行

[root@radius ~]# vim /etc/my.cnf

clip_image008

2013年5月13日 13:32:48

今天发现重启之后又出现这个问题了

You are running MySQL in Strict Mode, which is not supported by Thold.

2013年5月13日 14:02:51

找到问题所在,因为配置文件路径不正确,配置文件路径是(下图)我修改的却是/etc/my.cnf,各种坑啊

clip_image010

修改内容如下,修改成空的,或者注释掉就OK

clip_image012

安装monitor插件

官网下载地址:

http://docs.cacti.net/plugin:monitor

[root@radius ~]# cd /usr/local/nginx/html/cacti/plugins

[root@radius plugins]# wget http://docs.cacti.net/_media/plugin:monitor-v1.3-1.tgz

[root@radius plugins]# mv plugin\:monitor-v1.3-1.tgz monitor-v1.3-1.tgz

[root@radius plugins]# tar -zxvf monitor-v1.3-1.tgz

配置报警功能如下图

clip_image014

clip_image016

clip_image018

2、通过数据库修改所有模版的step

查询所有Data Templates的step

[root@radius bin]# cd /usr/local/mysql/bin/

[root@radius bin]# ./mysql -uroot –p

mysql> use cacti;

mysql> select id,t_name,name,t_rrd_step,rrd_step from data_template_data;

修改所有Data Templates的step

[root@radius bin]# cd /usr/local/mysql/bin/

[root@radius bin]# ./mysql -uroot –p

mysql> use cacti;

mysql> update data_template_data set rrd_step='60';

以下内容为可选笔记

修改rrd文件

查询现有rrd的step

[root@radius ~]# /usr/local/rrdtool/bin/rrdtool info /usr/local/nginx/html/cacti/rra/localhost_load_1min_5.rrd |grep step

修改现有rrd的step

下载rrdjig.pl工具

[root@radius src]# wget https://svn.oetiker.ch/rrdtool/trunk/contrib/rrdjig/rrdjig.pl

新增环境变量

[root@radius ~]# vim .bash_profile

增加如下内容

PERL5LIB=/usr/local/rrdtool/lib/perl

export PERL5LIB

完整配置如下:

clip_image020

使环境变量生效

[root@radius ~]# . .bash_profile

rrdtool tune 常用用法

rrdtool tune 常用语句如下:

1

2

3

4

5

rrdtool tune filename

[--heartbeat|-h ds-name:heartbeat]

[--data-source-type|-d ds-name:DST]

[--data-source-rename|-r old-name:new-name]

[--minimum|-i ds-name:min] [--maximum|-a ds-name:max]

例:如下是我们建的数据结构

/usr/bin/rrdtool create traffic1.rrd --start $(date -d '1 days ago' +%s) --step 60

DS:In:COUNTER:600:0:U

DS:Out:COUNTER:600:0:U

RRA:AVERAGE:0.5:1:600

RRA:AVERAGE:0.5:4:700

RRA:AVERAGE:0.5:24:775

RRA:AVERAGE:0.5:288:797

如上可以看到heartbeat 是600  dsname有两个In 和Out  DStype 是COUNTER
下面几条命令是我们常用的。

rrdtool tune traffic.rrd  -h In:300 修改In 的heartbeat的值为300
rrdtool tune traffic.rrd  -d In:GAUGE  修改In 的DST为GAUGE
rrdtool tune traffic.rrd  -r In:traffic_in   修改数据源In 为traffic_in (在mrtg 生成的log文件转换rrd,再导入cacti做图的时候,要用到此命令转换)
rrdtool tune traffic.rrd  -i In:800 -a In:1024     修改数据源In 最大值和最小值

rrdtool思维导图

clip_image022

RRDTool基础

? RRDTool介绍

RRDTool是基于RRD数据库来存储时间序列数据,并在需要的时候能够很轻易产生漂亮图表的一套工具包。常用于监控领域,比如监控温度、湿度、流量、CPU、内存、磁盘等等。

? RRD介绍

为什么监控数据采用RRD数据库来存储,如果采用关系数据库将其记录下来有什么问题呢?
1. 首先,监控一般是7*24小时不间断进行的,长期积累下数据量很大,来给运维带来沉重负担。
2. 其次,我们对监控数据的关注点也不一样,通常对最近的数据比较关心,而对一年前的数据就只关心一个大致趋势即可。
3. 再次,我们需要将数据转化为图表以观察变化趋势,如果数据从关系数据库取的话,数据量多、还慢,用户感知也不好。
RRD(Round Robin Database)最大的特点是以循环格式来存储时间序列格式,在持续不断插入新数据的过程中它不断将老数据淘汰掉,因此它不会积累太多的数据,RRD文件大小也会保持在一个合适的范围内。在使用RRDTool之前,首先需要建立RRD数据库,然后持续将监控数据更新至RRD,最后再将数据从RRD中取出来生成趋势图。建议RRD数据库需要涉及两个概念,一个是数据源DS,一个是循环存档RRA。下面我们就来说说什么是DS和RRA。

? 数据源DS

我们将采样来的数据放到哪里,以后出图就从那个地方(数据源)取数据。每个RRD文件可以定义多个DS,也就是一个RRD里可以同时保持多个对象的采样数据,这就方便以后我们将这些数据绘制到同一张图表中对比分析。定义数据源最重要的就是给源取个名字,以及指定其类型。
语法 DS:name:type:heartbeat:min:max
– name:数据源的名称,长度为1-19个字符
– type:数据源类型,COUNTER:累计,GAUGE:离散
– heartbeat:心跳时间,当心跳时间内仍未采样到监控数据时,将此step时间点填充为UNKONWN,一般设置为两倍step,或者取前后采样的平均值
– min:最小数据界限,在不需要限制的情况下,可以指定为U
– max:最大数据界限,在不需要限制的情况下,可以指定为U

? 循环存档RRA

DS里源源不断的记录着新采样回来的数据,我们会如何使用这些数据呢?当然是按照指定的时间周期来绘制走势图表了,就好比我们看股票走势图,有时看日线,有时看周线,有时看月线,有时看年线。RRA就是RRD的日线、周线、月线、年线!每个RRD可以定义多个RRA,一个5分钟为周期的RRA,一个半小时为周期的RRA,一个2小时为周期的RRA,等等。之所以定义这么多的RRA是方便以后快速出图,每个RRA都是即时更新,也就是新来一个采样数据,所有的RRA就会计算一次并保存下来,以后要出图就直接从某个RRA中取数据就好了,不需要在出图时再重新计算平均值什么的。
语法 RRA:cf:xff:steps:rows
– CF: 聚合函数,定义如何对数据进行聚合[平均:AVERAGE | 最小:MIN | 最大:MAX | 最后一笔:LAST]
– xff: 聚合时可以容忍多少个UNKOWN值,这个是UNKOWN个数和全体个数的一个比率,一般定义为0.5
– steps: RRA步长,一般为采样间隔(step)的倍数
– rows: 此RRA最多保留几份这类采样数据,注意高采样频率的RRA不要保存太多的rows,否则会影响出图性能
RRA示例图:
clip_image023

? 创建RRD

语法:

rrdtool create filename [--start|-b start time]

[--step|-s step]

            [DS:name:type:heartbeat:min:max]

            [RRA:cf:xff:steps:rows]

? 更新RRD

语法:

rrdtool update filename timestamp:datapoints

? 简单示例

#!/usr/bin/python

import subprocess

import random

START_TIME = 1324474748

END_TIME = 1324996652

# create RRD for cpu traffic

cmd = 'rrdtool create cpu.rrd'

cmd += ' --step 300'

cmd += ' --start %d' % START_TIME

cmd += ' DS:sys:GAUGE:600:U:U'

cmd += ' DS:usr:GAUGE:600:U:U'

cmd += ' DS:idle:GAUGE:600:U:U'

cmd += ' RRA:AVERAGE:0.5:1:8640' # 5 min, save 1 month data

cmd += ' RRA:AVERAGE:0.5:6:5760' # 30 min, save 4 month data

cmd += ' RRA:AVERAGE:0.5:24:2160' # 2 hour, save 6 month data

cmd += ' RRA:MIN:0.5:1:8640' # 5 min, save 1 month data

cmd += ' RRA:MIN:0.5:6:5760' # 30 min, save 4 month data

cmd += ' RRA:MIN:0.5:24:2160' # 2 hour, save 6 month data

cmd += ' RRA:MAX:0.5:1:8640' # 5 min, save 1 month data

cmd += ' RRA:MAX:0.5:6:5760' # 30 min, save 4 month data

cmd += ' RRA:MAX:0.5:24:2160' # 2 hour, save 6 month data

cmd += ' RRA:LAST:0.5:1:8640'

subprocess.call('rm -rf cpu.rrd', shell = True)

subprocess.call(cmd, shell = True)

# update RRD

for i in xrange(START_TIME, END_TIME, 300):

sys = random.randint(0, 15)

usr = random.randint(25, 55)

idle = 100 - (sys + usr)

cmd = 'rrdtool update cpu.rrd -t sys:usr:idle %d@%d:%d:%d' % (i, sys, usr, idle)

retcode = subprocess.call(cmd, shell = True)

# draw graph

cmd = 'rrdtool graph cpu.png -h 250 -w 800'

cmd += ' --start %d --end %d' % (START_TIME, START_TIME + 86400 * 2)

cmd += ' --title "CPU Load"'

cmd += ' -v "use percent"'

cmd += ' DEF:v1=cpu.rrd:sys:AVERAGE'

cmd += ' DEF:v2=cpu.rrd:usr:AVERAGE'

cmd += ' DEF:v3=cpu.rrd:idle:AVERAGE'

cmd += ' AREA:v1#FF2626:"sys"'

cmd += ' AREA:v2#00FF00:"usr":STACK'

cmd += ' AREA:v3#C0C0C0:"idle":STACK'

subprocess.call(cmd, shell = True)

clip_image025

clip_image027