柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

Centos6.4 搭建cacti(一)

一直想找时间想把cacti总结一下,cacti这个词大家也不陌生了,网上文章也有很多了,搭建起来也很轻松。这几篇关于cacti的博文更多的是笔记形式吧,为了节省流量,文字描述会更多一点吧。再扯一句,我这里cacti主要用来对流量进行监控,这是cacti的优势,但是对其他方面的监控我交给了其他的监控软件,大家自行选择。

一、系统环境优化

像关闭防火墙,关闭selinux,调整时间等一系列的系统服务都是系统优化的部分,这里就是不说了。

注:如果mysql启动失败

# /etc/init.d/mysqld restart

停止 mysqld:                                              [确定]

MySQL Daemon failed to start.

正在启动 mysqld:                                          [失败]

日志报错信息为:

InnoDB: The error means mysqld does not have the access rights to

InnoDB: the directory.

InnoDB: File name ./ibdata1

InnoDB: File operation call: 'open'.

InnoDB: Cannot continue operation.

解决办法:

请查看selinux是否关闭。

二、Web环境搭建

这里我直接就采用的yum安装的方式,安装的lamp环境,当然你也可以编译安装。

# yum install -y httpd php php-mysql php-snmp php-xml php-gd mysql mysql-server gd gd-devel  #yum安装lamp环境

这里对mysql配置文件做了个简单的改动,主要是让让其默认是utf8,并且更改了mysql数据库的路径位置下面为配置文件

#cat /etc/my.cnf 

[client]

default-character-set=utf8

[mysqld]

socket=/var/lib/mysql/mysql.sock

user=mysql

datadir=/home/mysql/mysqldata

symbolic-links=0

character-set-server=utf8

collation-server=utf8_general_ci


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


[mysql]

no-auto-rehash

default-character-set=utf8


# sed -i 's#;date.timezone =#date.timezone =Asia/Shanghai#g' /etc/php.ini  #php的时区进行修改

# /etc/init.d/httpd start && echo '/etc/init.d/httpd start' >>/etc/rc.local   #启动httpd并添加开机启动

# /etc/init.d/mysqld start && echo '/etc/init.d/mysqld start' >>/etc/rc.local  #启动mysqld并添加开机启动

# netstat  -lntup   #查看一下端口是否启用,通过结果可以看出80端口和3306端口都已经启动

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1124/sshd           

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1201/master         

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1916/mysqld         

tcp        0      0 :::80                       :::*                        LISTEN      1734/httpd          

tcp        0      0 :::22                       :::*                        LISTEN      1124/sshd           

tcp        0      0 ::1:25                      :::*                        LISTEN      1201/master   


# vi /var/www/html/index.php  #对进行测试,http加载php是否正常

<?php

    phpinfo();

?>

#在浏览器直接输入IP,出现下面的界面表示php测试正常:

blob.png


三、安装net-snmp

# yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils php-snmp

# sed -i '/^com2sec/s/public/51niux/' /etc/snmp/snmpd.conf  #将public的团体名改为其他的名称,也就是说这是其他机器通过snmp来获取数据的通行口令(com2sec notConfigUser  default       public  #这里的default默认是不限制访问IP,这里可以设置访问IP来限定发起snmp请求的来源IP,当然我们机房做了ACL可以这么设置,你可以根据自己的需求更改。notConfigUser为组名,组名对下面的安全设置有作用,另外默认的public也就相当于这个组名的密码。

#sed -i '/view all/s/^#//' /etc/snmp/snmpd.conf #定义一个可操作的范围(view)名, 这里是all,范围是 .1 ,(view all    included  .1表示可以查看.1节点下的所有设备信息 )

#sed -i '/^access/s/systemview/all/' /etc/snmp/snmpd.conf #将systemview改为all,此选项定义监控主机具有的权限,systemview表示只对系统视图有权限。(access  notConfigGroup ""      any       noauth    exact  all none none表示定义notConfigUser这个组在all这个view范围内可做的操作(即权限),这时定义了notConfigUser组的成员可对.1这个范围做只读操作。)

#sed -i '/view all/s/^#//' /etc/snmp/snmpd.conf #定义一个可操作的范围(view)名, 这里是all,范围是 .1 ,(view all    included  .1表示可以查看.1节点下的所有设备信息 )

解释:

#       group          context sec.model sec.level prefix read   write  notif

access  notConfigGroup ""      any       noauth    exact  all none none

context:上下文,v1、v2c中始终为空。

sec.model:安全模式,可选值为v1/v2c/usm。

sec.level:安全级别,可选值为auth/noauth/priv,v1、v2c中只能为noauth。

prefix:前缀,指定context如何与PDU中的context匹配,v3使用。

read:授权的读视图。

write:授权的写视图。

notif:授权的trap视图。


# /etc/init.d/snmpd start && echo '/etc/init.d/snmpd start'>>/etc/rc.local   #启动snmpd服务并添加开机自启动

# snmpget -v 2c -c 51niux localhost sysDescr.0   #执行测试命令读取MIB库中的RFC1213->system->sysDescr 对象,获取对象的设备的描述信息。

SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64  #出现此条命令表示测试通过。


博文来自:www.51niux.com

四、 安装cacti

现在cacti更新到0.8.8h版本了,但是为了稳定退一到两个小版本,同意用的是0.8.8g版本。

# yum install -y rrdtool*  #安装rrtdtool绘图工具

# mkdir /tools

# cd /tools/

# wget www.cacti.net/downloads/cacti-0.8.8g.tar.gz  #官网下载cacti软件

# cp -rf cacti-0.8.8g /var/www/html/cacti #因为include/config.php文件里面有一句话//$url_path = "/cacti/";,如果要放到html下面,就要改这句话为:$url_path = "/";。同时include/global.php也要将$url_path = "/cacti/";改为$url_path = "/";

# mysql -uroot -p -e 'create database cacti;'  #创建cacti数据库

# mysql -uroot -p cacti</tools/cacti-0.8.8g/cacti.sql #导入cacti数据库,主要是生成相关的表结构

# mysql -uroot -p -e "grant all privileges on cacti.* to cactiuser@'localhost' identified by 'cactiuser';" #给cacti数据库授权用户名密码,这个用户名和密码可以少改很多地方。

# mysql -uroot -p -e "flush privileges;"  #刷新权限

访问浏览器:IP/cacti,进行web端的配置:

然后cacti的安装配置界面就出现了,这里默认next下一步就可以,有一个地方要注意一下,RRDTool Binary Path默认的路径为/usr/local/bin/rrdtool,但是我们yum的命令路径为/usr/bin/rrdtool,我们需要手工更改一下。

然后就到了登录界面:默认的账号密码都为admin,通过后就让你输入你自己要设置的密码,输入两次,然后再刷新页面,就以用户名admin,密码是你设置的密码来登录就可以了。


五、安装spine

出于效率原因,在大量采集数据时使用自带的cmd.php轮询器会比较慢,1分钟1次的采集频率可能无法完成轮询所有机器。我们每个机房一百多台机器,自己本机房cacti监控自己机房的流量数据,1分钟一采集,压力也是很大的。这里为了优化,采用官方推荐的spine来高效轮询。

# wget www.cacti.net/downloads/spine/cacti-spine-0.8.8g.tar.gz #下载与cacti对应的spine包

#tar zxf cacti-spine-0.8.8g.tar.gz 

#  ./configure --prefix=/usr/local/spine-0.8.8g --with-snmp=/usr/include/net-snmp/ --with-mysql

#make && make install

# ln -s /usr/local/spine-0.8.8g /usr/local/spine

# cp /usr/local/spine/etc/spine.conf.dist  /etc/spine.conf

注:如果make的时候出现下面的报错:

false // No help2man // --output=spine.1 --name='Data Collector for Cacti' --no-info --version-option='--version' ./spine

make: *** [spine.1] 错误 1

解决办法:

# yum -y install help2man

注:如果./configure安装的时候执行./configure --prefix=/usr/local/spine-0.8.8g --with-snmp --with-mysql,make和make install倒是不会报错,不过运行的时候会提示!

# /usr/local/spine/bin/spine 

10/25/2016 07:34:39 PM - SPINE: Poller[0] FATAL: Unable to read configuration file! (Spine init)

解决办法:

#--with-snmp 改为--with-snmp=/usr/include/net-snmp/ 或者不加这个参数,或者你可能配置文件出错,检查一下配置文件,也许是找不到配置文件,可以加-C 指定配置文件。


#cat /etc/spine.conf |grep -v "^#"  #安装完毕之后我们来查看一下配置文件,配置没有问题。

DB_Host         localhost

DB_Database     cacti

DB_User         cactiuser

DB_Pass         cactiuser

DB_Port         3306

# /usr/local/spine/bin/spine   #下面的提示信息为spine执行正常的结果

SPINE: Using spine config file [/etc/spine.conf]

SPINE: Version 0.8.8g starting

SPINE: Time: 0.2515 s, Threads: 5, Hosts: 2


六、安装cacti插件

首先是官网插件下载url:http://docs.cacti.net/plugins

进入上述插件下载页面之后,下载自己所需要得插件,下载到本地,解压,然后丢到/var/www/html/cacti/plugins目录下面

这里我就以setting插件举例,因为setting插件是第一个要安装的,安装完setting插件之后再安装其他的插件。

# cd /tools

# wget docs.cacti.net/_media/plugin:settings-v0.71-1.tgz

# tar zxf settings-v0.7-1.tgz

#cp -rf settings /var/www/html/cacti/plugins/

这里我总共安装了:settings(cacti 设置插件),monitor(监控主机存活状态插件),realtime(查看实时数据图像插件),thold(阀值报警插件),syslog(日志显示插件,可不装),clog(cacti日志显示)

好了现在我们把这些插件都解压并放到plugins目录下了。

#chown -R apache:apache  /var/www/html/cacti/plugins/

然后要登录cacti的web页面,通过web页面进行插件的安装,下面以clog举例。

console==》Configuration==》Plugin Management

blob.png

点击上图的蓝色按钮。

blob.png

然后点击上图中的绿色箭头。至此插件就安装结束了。下图是我们所有插件安装结束后的全貌。

blob.png


博文来自:www.51niux.com

七、cacti相关设置

(1). 首先第一点在linux系统端添加同步时间的设置

echo '*/5 * * * * /usr/sbin/ntpdate  0.centos.pool.ntp.org  && /sbin/hwclock -w >/dev/null 2>&1' >>/var/spool/cron/root 

 #注意,这里主要是同步系统时间到硬件时钟,因为,如果不同步的话,硬件时钟跟系统时钟不同步,你的cacti采集程序又是开机启动的,然后rrd库又是依赖于时间的,打个比方,如果现在时间是7月3日,硬件时间是7月4日,当你机器重启的之后,rra库里数据的更新时间就是7月4日,然后你就要等到7月4日以后才能让cacti继续插入数据并绘图。

 下面是错误信息:ERROR: /var/www/html/cacti/rra/111/184.rrd: illegal attempt to update using time 1477476921 when last update time is 1477502582 (minimum one second step) 

(2).  修改cacti的RRAS

下图为修改后完之后的截图

blob.png

       cacti主要使用了rrdtool这个工具来绘图,rrdtool的数据文件,和一般关系型数据库不同的地方在于它是环形数据库,是一个特别依赖时间的数据库,默认的cacti图形是以日、周、月、年4个时间,每个时间都可以任意缩放查看,默认情况下日图是5分钟频率,周是30分钟,月是2小时,年是1天。

       如果不修改的话,大家看当天的流量图,它是5分钟画一个点,两个点之间画一条直线,但是时间一长你就看不到5分钟一个点了,因为数据会被合并,

比如我们看轴突,就是6个5分钟合并成为周图中的一个点,也就是说12个5分钟才化成周图中的一条线。月、年都是以此类推。合并之后默认情况下是取平均值,也就是为什么时间越大,数据越小的原因。

       如果不修改的话,多久之后就不能看5分钟的流量图了呢?默认情况下5分钟的图保存50小时,也就是说2天内还可以看见5分钟的流量图。换算公式为:保存时间 = Step * Steps * Rows。以我们上图修改完之后的6分钟的Weekly (6 Minute Average)这个RRA精度的数据保存时间为:(6*6*1680)=60480m

也就约等于60480m/60m=1008h/24=42d。

其中:

Name:为创建精度的名称,也就是rrd模板名称

Step:为步进时间,单位是秒,是在Data Source中定义的,在Data template中定义。

Steps:为多少分钟绘图一次,以Hourly (1 Second Average)举例就是1分钟绘图一次

Rows:表示存储多少行,以Hourly (1 Second Average)  Rows=60举例,就是一小时存储60行。

Timespan:表示一定范围之内多少秒,以Hourly (1 Second Average) Timespan=3600举例,就是一小时为3600秒。也就是我们点开一张图,这张小时图的时间长度是一小时。以此类推,Timespan=86400那张一天的图显示的就是昨天到现在范围是一天的流量图。

这个RRAS可以再设置,你有几个rra模板,就能呈现几张图。下面是一个rras一小时模板的详细设置截图,结合上图以此类推便可:

blob.png

注:时间采集为1分钟我们稍后再设置,这里要提前设置好,再开始采集并出图,不然的话要将rra库文件删除之后重新采集出图。


(3). 更改数据源模板

这里以流量数据源模板举例

Templates==>Data Template==>Interface - Traffic==>将Step从300改为60(也就是将图像的数据更新从5分钟改为60秒也就是一分钟)==>traffic_in==>Heartbeat从600改为120(heartbeat为心跳有效期。在两个刷新周期内,如果没有接收到数据更新,这个时候,必须往数据库中中写入一个(UN)UNKNOWN值。这是RRDTool一个特别的地方。)==>save==>traffic_out==>Heartbeat从600改为120==>save

blob.png

其他的数据模板也要修改Step和Heartbeat的值,因为我们将采集精度和出图精度从5分钟变为了1分钟。


博文来自:www.51niux.com

(4). Settings设置(console==>Configuration==>Settings),这里只讲要修改的地方吧,每个页面更改完之后都要选择右下角的save,不能全部页面都改完后一次性保存,只能保存当前页面,切记。

General下的设置:

      SNMP Version:snmp的使用版本,这里选择版本2,默认也是版本2,就是需要安全口令便可。

       SNMP Community:snmp获取数据的安全口令。

       SNMP Timeout:snmp获取数据的超时时间,单位是毫秒。尽量小点,这里我设置成500.如果网络不好,采集数据容易出现断层的话,这里调大。

       SNMP Port Number:默认的udp端口用于snmp调用,默认是161

       SNMP Retries:snmp轮询器的失败尝试次数,这里设置为3

Paths下的设置:

        其他一些都是命令路径,再创建cacti的时候已经都找到了。

        Cacti Log File Path:cacti的记录日志位置

        Spine Poller File Path:Spine轮询器命令的位置,因为我是编译安装的/usr/local/spine/bin/spine

        Structured RRA Path (/host_id/local_data_id.rrd):每个主机RRD文件都在一个独立的文件夹,选择勾选。这也是cacti优化项之一重构rra目录结构。

blob.png

Poller下设置:

         Poller Type:这里是选择采集轮询器。两种一种是低效的cmd.php也是默认项,这里我们改为spine,这也是cacti的重要优化之一。

         Poller Interval:这里设置多长时间采集一次,从默认的五分钟改为每分钟。

         Cron Interval:定时任务的采集间隔也从默认5分钟改为每分钟。

         Maximum Concurrent Poller Processes:最大并发轮询器进程,从1改为4.

         Balance Process Load:选择勾选,让其自动平衡过程负载

         Maximum Threads per Process:每个进程最大的线程数,大家可以根据自己服务器的性能调节该值,然后执行采集命令查看哪个值采集时间比较短,就选择哪个值。一般为cpu的2倍,我cpu是虚拟机,4核的,我这里就设置了为8.

        Number of PHP Script Servers:php脚本的执行数量,范围是1-10.这里设置为5.

        Script and Script Server Timeout Value:脚本执行的超时时间单位为秒,这里设置为35.

        The Maximum SNMP OID's Per SNMP Get Request:保持默认值是10

         Downed Host Detection:这里是选择用什么方式检测主机是否存活,这里我们选择ping或者snmp Uptime两种检测形式

         Ping Type:ping包的类型为ICMP Ping

         Ping Timeout Value:ping检测多长时间为超时,单位为毫秒,我这里设置的为400

         Ping Retry Count:ping的失败之后,尝试ping再ping的次数,我这里为3次

         Failure Count: 轮询几次之后,记录主机的错误,这里是三次。

         Recovery Count:轮询几次之后,恢复主机的状态,这里是2次。

blob.png

Graph Export:

          这里是导出图形设置,一般如果没这个需求不设置。

Visual:

          如果有需求可自行设置

blob.png

Authentication:

        身份验证,这里一般不设置

Mail/DNS:邮件与dns的设置:(右上角有个Send a Test Email可以点击进行测试,配置是否成功)

       Test Email:你设置完成后总要发封测试邮件,看看你邮件是否能发出吧,所以这里就是测试邮件的收件人。

       Mail Services:因为我们这里是通过SMTP连接远端的邮件服务器来发送邮件,所以选择SMTP。

       From Email Address:发件人的地址。

       From Name:发件人名称

       SMTP Hostname:smtp邮箱的名称,如163的邮箱服务器就有,smtp.163.com

       SMTP Port:smtp端口默认是25

       SMTP Username:邮箱的用户名,比如你是wokao@51niux.com的用户名,这里就设置wokao。

       SMTP Password:用户名的密码,输入两次

blob.png

Misc:

         Alarm Sound:down机时显示的声音,默认也用不到

         Icon Spacing:monitor显示的主机图标,范围是1-20,就设置成10吧,太多图标就太小了。

         Graph Timespan:实时图形,也就是realtime图形显示的图形的时间间隔。

         Refresh Interval:实时图形多长时间刷新一次,这里选择为5秒

         Cache Directory:这里很重要,是你的realtime图形的缓存存放目录,这个目录要提前创建并授权。如:/var/www/html/cacti/cache

blob.png

Thresholds:阀值与宕机设置

        Dead Hosts Notifications:这里要勾选上,这是宕机和恢复是否提醒,也就是通知,当我们调整机器的时候这里可以先去掉,省的误报。

         Dead Host Notifications Email:宕机或者机器恢复提醒收件人列表,多个邮箱之间用逗号隔开

         From Email Address:发件人的邮箱,跟前面保持一致

         From Name:发件人姓名跟前面保持一致

图片.png

Syslog:

            我们又专门的syslog日志收集工具,所以这里没有做设置


博文来自:www.51niux.com

(4).创建主机模板

模板的概念已经并不陌生了。因为我们监控的大部分是linux主机的流量,这里就以创建linux主机模板举例。

console==>Templates==>Host Templates==>Add(页面右上角)==>主机模板名称==>Create==>Associated Data Queries下面的SNMP-Interface Statistics(因为我们只监控了一个流量,所以就选择了这一项)==>save(都添加完毕之后,进行保存)

下图为我创建的linux host的主机模板:

blob.png


(5). 为cacti添加一台监控主机,默认会有一个localhost的主机,我已经删除了。

console==>Management==>Devices==>Add(页面右上角)==>页面输入选项==>save(点击保存后成功与否都会很快出现在左上角,注意查看)==>假设我们添加这台主机成功了,然后选择右上角的Create Graphs for this Host==>Host:选择我们要添加图形的主机,保持默认==>Graph Types:SNMP - Interface Statistics==>在要监控的网卡的右边选择框打钩==>Select a graph type:In/Out Bits(64-bit Counters)==>Create

上面最后第二项选择,意思是选择64位作为单位,因为我们带宽单位是按位说的,为什么是64位呢,因为cacti默认是32位的,但是当你流量图超过100M的时候就会显示不正常,所以我们这里要选择为64位作为单位。另外,windows机器的话,如果不装插件和调整图形模板的话,选择64位作为单位,流量图是没有数据的,选择默认的32位不做什么调整时可以正常显示流量图的。

blob.png


(6). cacti服务器添加定时采集任务

# /usr/bin/php /home/cacti/cactiweb/poller.php --force  #强制执行一次,等机器多了之后,可以看出有哪些问题,如果不加--force选项的话,就只有下面这些信息,报错采集周期用时多少啊等等,不会有错误消息提醒。

11/07/2016 04:18:58 PM - SYSTEM STATS: Time:0.2709 Method:spine Processes:4 Threads:8 Hosts:2 HostsPerProcess:1 DataSources:0 RRDsProcessed:0

# echo '*/1 * * * * /usr/bin/php /home/cacti/cactiweb/poller.php >/dev/null 2>&1' >>/var/spool/cron/root   #每分钟采集一次


博文来自:www.51niux.com

(7). 创建图形树

console==>Management==>Graph Trees==>Add==>Name(输入你要创建图行数的名称,如上海万兆网卡服务器)==>Sorting Type(选择自然排序Natural Ordering)==> Create


(8). 添加图形到图形树并测试

第一种:通过图形数直接添加,但是单机还好,批量就不适合了。

操作步骤:console==>Management==>Graph Trees==>点击要添加的图形树==>Add==>Tree Item Type选择Host==>Host为我们要添加的主机==>Graph Grouping Style选择Graph Template==>Round Robin Archive选择Daily (1 Minute Average)==>Create

blob.png

第二种:通过在Devies里面选择主机然后添加到对应的图形树里面去。

blob.png

好了,现在让我们进入graphs,看看我们创建的主机是否出图了呢?

blob.png

到此,我们cacti的第一部分,搭建以及出图已经记录完毕,第二部分进行一些比较全面的讲解。


注:

cacti日志狂刷问题:

如果你是Centos6.4或以前的系统,也许你会发现你的message日志里面狂刷一条日志:

Feb 15 19:23:02 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:24:01 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:25:01 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:26:02 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:27:02 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:28:01 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:29:01 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:30:02 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:31:01 localhost snmpd[6740]: truncating integer value > 32 bits

Feb 15 19:32:01 localhost snmpd[6740]: truncating integer value > 32 bits

解决办法:

这是一个bug,旧版本的net-snmp版本存在的问题。不过更新后的小版本就已经将这个问题解决了。

现在是时候将你的net-snmp升级一下了。将yum源指向官网的源,#yum install net-snmp更新一下便可。最好再将snmpd服务重启一下。

作者:忙碌的柴少 分类:cacti 浏览:7978 评论:0
留言列表
发表评论
来宾的头像