Linux服务篇之九:构建Cacti监控平台

作为一名Linux SA,日常最重要的就是保证网站正常稳定的运行,我们需要实时监控网站、服务器的运行状态,这时需要借助开源软件(cactinagioszabbix等)监控来实现。

Cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据然后用rrdtool储存和更新数据当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmprrdtool是cacti的关键。

snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下,一般以rra为后缀名称)。简单原理图如下:

wKioL1WjUMmhl48qAACzKpRljt8816.jpg

1、Cacti服务器端安装

wget  http://www.cacti.net/downloads/cacti-0.8.8a.tar.gz

wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.8.tar.gz

2、安装LAMP系统环境

yum install  httpd  mysql   mysql-server    php   php-mysql  -y

3、安装rrdtool采集工具

3.1、安装rrdtool之前需要安装相应的lib库,如下安装:

yum install cairo-devel libxml2-devel pango pango-devel -y

3.2、解压并进入该目录:tar xzf rrdtool-1.4.8.tar.gz;cd rrdtool-1.4.8

3.3、新建一个目录用于存放rrdtool数据:mkdir  /data/app/rrdtool/ -p

3.4、提前安装一些准备工具:

yum install perl-devel -y

yum install ncurses-devel -y

yum install gcc-c++ -y

3.5、预编译:./configure --prefix=/data/app/rrdtool/

编译及安装:make &&make install

3.6、链接到bin目录下:

ln -s  /data/app/rrdtool/bin/*  /usr/local/bin/

4、安装SNMP服务

yum install net-snmp  net-snmp-utils  –y

5、安装cacti主程序

5.1、解压:tar zxf cacti-0.8.8a.tar.gz

5.2、移动cacti文件到httpd发布目录:mv cacti-0.8.8a /var/www/html/cacti/

6、创建cacti数据库

6.1、启动mysq服务:/etc/init.d/mysqld start

6.2、进入数据库并创建数据库、授权、刷新权限,

wKiom1Wjix_zHJUaAAD9XsdxLcQ270.jpg

7、mysql配置完成后,把cacti.sql数据导入cacti数据库

有两种方法导入:

7.1、在LAP上执行:

wKiom1WjjbnzIDtEAADt0joC6X0583.jpg

进入数据库并查看表,

wKioL1WjkC3DVPFSAAKuLj0ppIs624.jpg

7.2、在MYSQL上执行:

删除前面已有的数据库cacti,并新建一个cacti,

授权caici数据库用户cacti;

复制LAP上的cacti.sql到MYSQL目录,

两端都要安装:yum install openssh-clients -y,用于在两台虚拟机之间复制文件;

在LAP上执行:

wKioL1WoYO6xjEeIAAB-wXehmhQ821.jpg

在MSYQ上查看:

wKioL1WoYQywcqgxAAAoGFsXkUg421.jpg

把cacti.sql数据导入cacti数据库

wKiom1WoX6CQ6yNJAABF0CurkoM743.jpg

查看数据库中表的内容,

wKioL1WoYbmS_JnQAALfm-V20CQ946.jpg

7.3、授权目录:设置cacti  rra、log 目录的权限,这里设置为777:

chmod -R  777  /var/www/html/cacti/rra/

chmod -R  777  /var/www/html/cacti/log/

7.4、修改cacti全局配置文件:

vi /var/www/html/cacti/include/config.php为如下配置:

修改成这样:

wKiom1WoYLyDrpINAAQdKV668Uo531.jpg

8、添加rrdtool抓图任务计划

8.1、在crontab中添加,一个计划任务:

把内容写进这个里面:

crontab -e

*/1 * * * */usr/bin/php /var/www/html/cacti/poller.php >>/tmp/cacti_rrdtool.log

重启一下服务,并查看一下是否启动成功,

查看目录,配置文件写入了这个文件的位置:

查看一下这个文件的内容,每隔1分钟会运行一次这个脚本:

wKioL1Wj0dGjqe2LAAHi-mQi8sw820.jpg

9、通过http://ip/cacti/访问出现如下界面:

wKiom1WkdJnh8MDeAAQI2mtEv5Y370.jpg

进入下一步,

wKioL1WkdrKDaNzGAAInVzJlMlc940.jpg

没有出现错误,完成初始化操作!

wKioL1WkdymhMEadAAShn2J6vEs693.jpg

进入监控的主界面,默认的用户名和密码都是:admin。登录后,会让你修改密码;

wKioL1WkeAjSIQBdAAGiNe9qWsI801.jpg

进入cacti监控的主界面,

wKiom1WkdqLgpQtLAALhWchVtTg545.jpg

10、如何对服务器进行监控?

设备选项:Devices,找到一台默认的本地主机,

wKiom1Wkd3uhdd4BAAXm4JcTGsc614.jpg
其他的都不用修改了,保存配置;

wKioL1Wke7_yAtSSAARuHZLcL-c903.jpg

出现错误,

wKiom1WkevWDSC_6AAV1LfClISo722.jpg

查看一下snmp的服务是否启动了,需要启动该snmp服务,

wKiom1Wke2bTIS26AAEuQxHAzg0017.jpg
刷新一下页面,页面没有报错,成功!

wKiom1Wke6-wK7tdAAX5BMtUw90918.jpg

这里,就是需要监控的内容:

wKioL1WkffGCcZAfAAJRYaw870A564.jpg

11、下面开始创建主机拓扑图

wKiom1WkfGjjtfePAAYUgMgzp-I462.jpg

抓取一下本地磁盘信息,

wKioL1Wkf02xwmqNAAN6Vh8sH30771.jpg

进入树图,默认的树,可以看到,本地主机已经添加进去了,还可以再添加!

wKioL1Wkf8LSmNp9AAPJGB7Yt-4849.jpg

已经有图了!说明服务器已经被监控成功了!但是却出现了乱码现象:

wKioL1WkgHuj2a7TAAVksUHIiNY327.jpg

cacti图片乱码,请安装 yum -y groupinstall chinese-support中文字体即可,再次刷新页面,页面正常显示了!

wKioL1WkgizDJLssAASBytiN4lI214.jpg

如果这里没有图,可以执行下这个命令:/usr/bib/php  /var/www/html/cacti/poller.php
11、查看一下这个文件的内容,每隔1分钟会运行一次这个脚本:

/usr/bin/php /var/www/html/cacti/poller.php

看到这样的错误,大致是时钟的问题,需要设置一下,

wKioL1Wkg8GAVgReAAfqjrEPJGE236.jpg

编辑时区:vi /etc/php.ini

找一下:timezone,

wKiom1WkgsaTlVyqAAQvJp7Iqnw899.jpg

改成这样:

wKiom1WkgxqCgC5VAAQ0o3JLkuc959.jpg

重启一次apahce服务,

再次手工执行一下:/usr/bin/php /var/www/html/cacti/poller.php

终于没有报错了!

wKioL1WkhZbR-i9fAACyzV5k2Yg779.jpg

默认情况下是每隔1分钟绘制一幅图出来!

wKioL1WkhiiDouTvAAW4lwnxbAM016.jpg

wKioL1WkhimjC3XtAAUaLqwYnBE055.jpg

 

二、对客户端进行监控

1、安装snmp服务:yum install net-snmp  net-snmp-utils  -y

2、在客户端编辑snmp配置文件:

vi  /etc/snmp/snmpd.conf

更改:62行为:

access   notConfigGroup   ""    any   noauth    exact  all  none none

更改42行为:

com2sec notConfigUser  192.168.1.13    public

(其中11.168.130.74 ip 表示你允许那台服务器可以监控你。public 表示团体名)

更改:86行:把#号去掉:变成如下即可

view   all    included .1   80

3、重启snmpd服务 :

service snmpd restart

可能还有其他的方法,我用的是这种方法 请指教 呵呵(如果snmp配置错误的话,在做cacti监控添加设备时会出现snmp error 的信息!)

4、执行snmpwalk-v2c -c public 192.168.1.12 测试一下

[root@SNCommunityWebTest ~]# snmpwalk -v2c -c public 10.0.0.185
SNMPv2-MIB::sysDescr.0 = STRING: Linux Cacti 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (381129) 1:03:31.29
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: Cacti
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (2) 0:00:00.02

HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (875154) 2:25:51.54
HOST-RESOURCES-MIB::hrSystemUptime.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

5、添加客户端:

wKioL1YXy4iyateuAANhYOFuB6Q627.jpg

wKiom1YXy3DwjgLNAAJbmGvmHoU478.jpg

wKioL1YXy4nQPPxkAAE6DK0MQxM460.jpg

wKiom1YXy3HC_vGwAAGi3kCK-tw709.jpg

 

三、Cacti优化的配置Spine

在企业中,一般使用spine比较多,spine是一个基于C语言的,非常快速的轮询引擎。它是默认的cmd.php轮询的可选替代。当cacti监控的主机达到几十个的时候,这种采集数据延时情况就越发地显现出来。

安装:

yum install mysql-devel -y

yum install net-snmp-devel -y

./configure --prefix=/usr/local/spine ;make -j8 ;make -j8 install

配置:

vim /usr/local/spine/etc/spine.conf.dist

DB_Host         localhost
DB_Database     cacti
DB_User         cacti
DB_Pass         123
DB_Port         3306
DB_PreG         0

Spine验证:

/usr/local/spine/bin/spine 会出现相应版本及引用的配置文件。

如上配置完毕,然后设置cacti,选择spine轮询机制即可,需要在cacti监控页面后台设置settings。