cacti监控
一、概述
0.8.8a 之前模块的手动添加,之后的自带
docs.cacti.net 在该网站cacti监控的官方文档
cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。
Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。
snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。
二、具体实现
操作的环境是rhel6.5
[root@server4 cacti]# vim /etc/sysconfig/selinux
--------------------
SELINUX=disabled
-------------------
作监控测试前先关掉selinux
1.安装php,数据库,snmp,rrdtool
因cacti是php语言实现的软件,所以得安装php,同时用到数据库,cacti的前端需要apache,需要snmpd搜集数据
[root@server4 ~]# yum install -y httpd mysql php php-mysql php-xml mysql-server
[root@server4 ~]# yum install php-snmp-5.3.3-26.el6.x86_64.rpm -y
[root@server4 ~]# yum install rrdtool -y
-----------------------------------------------------------------------------------------------
#RRDtool 代表 “Round Robin Database tool” , 所谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。而MRTG监测网络流量很方便(缺点:
使用文本式的数据库,数据不能重复使用;只能按日、周、月、年来查看数据;由于MRTG本来只是用来监测网络的流量,所以只能存储两个DS(Data Source),即存储流量的输入和输出;每取一次数据即需要绘图一次,浪费系统资源;图像比较模糊;无用户、图像管理功能;没有详细日志系统;无法详细了解各流量的构成;只能用于TCP/IP网络,对于SAN网络流量无能为力;不能在命令行下工作。 )
rrdtool的优点:
使用RRD(Round Robin Database)存储格式,数据等于放在数据库中,可以方便地调用。比如,将一个RRD文件中的数据与另一个RRD文件中的数据相加。
可以定义任意时间段画图,可以用半年数据画一张图,也可以用半小时内的数据画一张图。
能画任意个DS,多种图形显示方式。
数据存储与绘图分开,减轻系统负载。
能任意处理RRD文件中的数据,比如,在浏览监测中我们需要将数据由Bytes转化为bits,可以将原始数据乘8。
rrdtool的缺点:
RRDTool的作用只是存储数据和画图,它没有MRTG中集成的数据采集功能。
在命令行下的使用非常复杂,参数极多。
无用户、图像管理功能。
----------------------------------------------------------------------------------------------
[root@server4 ~]# yum search snmp #Net-SNMP是一个免费的、开放源码的SNMP实现,简单网络管理协议(SNMP),该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况,属于应用缯协议。
[root@server4 ~]# yum install -y net-snmp-utils.x86_64
[root@server4 ~]# rpm -qa |grep php #安装的跟php有关
php-common-5.3.3-26.el6.x86_64
php-mysql-5.3.3-26.el6.x86_64
php-snmp-5.3.3-26.el6.x86_64
php-cli-5.3.3-26.el6.x86_64
php-xml-5.3.3-26.el6.x86_64
php-pdo-5.3.3-26.el6.x86_64
php-5.3.3-26.el6.x86_64
2.安装cacti
[root@server4 ~]# tar zxf cacti-0.8.8c.tar.gz
[root@server4 ~]# mv cacti-0.8.8c /var/www/html/(前提是安装了Apache)
[root@server4 html]# mv cacti-0.8.8c/ cacti #重命名,根据自己的习惯可以忽略此项
[root@server4 cacti]# pwd
/var/www/html/cacti #在此位置下可以查看cacti目录下文件的所属用户为1000,说明1000这个用户并不存在于系统中,这时我们需要创建此用户
[root@server4 cacti]# useradd -u 1000 -d /var/www/html/cacti/ -M cacti #添加用户
[root@server4 cacti]# /etc/init.d/mysqld start #开启mysql
[root@server4 cacti]# mysql_secure_installation #初始化数据库,初始化的前提时数据库启动
[root@server4 cacti]# mysql -predhat #创建数据库并授权
mysql> create database cacti;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on cacti.* to cacti@localhost identified by 'westos';
Query OK, 0 rows affected (0.00 sec) #这里的cacti用户与系统中创建的cacti用户无关,两者的身份、权限不同
mysql> flush privileges; #刷新数据库
Query OK, 0 rows affected (0.00 sec)
[root@server4 cacti]# mysql -ucacti -pwestos cacti < cacti.sql #将cacti的表结构及数据导入cacti数据库中
[root@server4 include]# pwd
/var/www/html/cacti/include
[root@server4 include]# vim config.php #根据自己创建的数据库及用户配置
-----------------------------------------
26 $database_type = "mysql";
27 $database_default = "cacti";
28 $database_hostname = "localhost"; #数据库的位置
29 $database_username = "cacti"; #管理cacti数据库的用户
30 $database_password = "westos"; #管理cacti数据库的用户的密码
31 $database_port = "3306";
32 $database_ssl = false;
39 $url_path = "/cacti/";
42 $cacti_session_name = "Cacti";
-----------------------------------------
[root@server4 cacti]# /etc/init.d/httpd start #开启apache
3.完成cacti的安装
然后安装cacti前端界面,在浏览器上输入http://172.25.254.4/cacti/install,依次按下一步完成安装,初次登录时用户与密码都是admin,会强制要求设置密码(更改密码),由此完成cacti的安装
4.配置计划任务
[root@server4 ~]# su - cacti #切换到uid位1000的cacti用户下,让此用户每五分钟采集依次数据
-bash-4.1$ crontab -e #交给php处理
----------------------------------------------------------------
*/5 * * * * php /var/www/html/cacti/poller.php > /dev/null 2>&1
----------------------------------------------------------------
配置完成后可以查看cacti的日志,可以看到是由php每五分钟采集依次数据
[root@server4 ~]# cd /var/www/html/cacti/log
[root@server4 log]# cat cacti.log #cacti 的日志
5.配置snmpd服务
[root@server4 rra]# /etc/init.d/snmpd start #启动snmpd服务
[root@server4 rra]# cd /etc/snmp/
[root@server4 snmp]# ls
snmpd.conf snmptrapd.conf
[root@server4 snmp]# vim snmpd.conf #配置
-------------------------------------------------------------------------
41 #com2sec notConfigUser default public
42 com2sec local localhost public
43 com2sec mynetwork 172.25.254.0/24 public
49 #group notConfigGroup v1 notConfigUser
50 #group notConfigGroup v2c notConfigUser
51 group MyRWGroup v1 local
52 group MyRWGroup v2c local
53 group MyRWGroup usm local
54 group MyROGroup v1 mynetwork
55 group MyROGroup v2c mynetwork
56 group MyROGroup usm mynetwork
62 view systemview included .1.3.6.1.2.1
63 view systemview included .1.3.6.1.2.1.25.1.1
64 view all included .1 80
70 #access notConfigGroup "" any noauth exact systemview none n one
71 access MyROGroup "" any noauth exact all none none
72 access MyRWGroup "" any noauth exact all all none
171 syslocation RHEL6.5
172 syscontact Root <root@localhost>
332 disk / 10000
-------------------------------------------------------------------------
[root@server4 snmp]# /etc/init.d/snmpd restart #配置完成后重启snmpd服务
[root@server4 snmp]# snmpwalk -v 1 -c public localhost IP-MIB::ipAdEntIfIndex
-----------------------------------------------------------------------------------------------
( -c SNMP读密码 -v 1或2(代表SNMP版本) OID(对象标示符)),snmpwalk是一个SNMP小程序,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。
(1) -v: 指定snmp的版本, 1或者2;
(2) -c: 指定连接设备SNMP读密码;
(3) IP: 指定要walk的设备的IP地址;
(4) Oid:代表要获取设备的指标oid;
-----------------------------------------------------------------------------------------------
IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.172.25.254.4 = INTEGER: 2
------------------------------------------------
[root@server4 rra]# vim /etc/php.ini #修改时区
-------------------------------
date.timezone = Asia/Shanghai
-------------------------------
6.被监控端的设置
对其他的主机进行监控
只需在被监控端安装snmp和php-snmp
[root@server3 ~]# yum install -y net-snmp-utils.x86_64
[root@server3 ~]# yum install -y php-snmp-5.3.3-26.el6.x86_64.rpm
[root@server3 ~]# vim /etc/snmp/snmpd.conf #配置同上
[root@server3 ~]# /etc/init.d/snmpd start #启动snmpd服务
7.添加监控主机
接下来的操作是在浏览器上登录cacti的前端界面,添加被监控主机
先在devices里添加要监控的主机,然后给该主机创建创建图形,实际上这里创建是看不到图形的,需要用图形树把图形链接出来,创建的图形树的目的是为了规划图形分类,让管理更清晰,然后在graph trees里添加主机
8.安装spine功能(安装spine替换cmd.php)Cacti默认轮询器cmd.php执行效率有点低,spine为C语言编写的组件,性能要好许多。
[root@server4 ~]# tar zxf cacti-spine-0.8.8c.tar.gz
[root@server4 ~]# cd cacti-spine-0.8.8c
[root@server4 cacti-spine-0.8.8c]# less INSTALL
[root@server4 cacti-spine-0.8.8c]# ./configure #根据报错解决依赖
[root@server4 cacti-spine-0.8.8c]# yum install -y gcc
[root@server4 cacti-spine-0.8.8c]# ./configure
[root@server4 cacti-spine-0.8.8c]# yum install mysql-devel -y #在源码编译的过程中需要的是开发包
[root@server4 cacti-spine-0.8.8c]# ./configure
[root@server4 cacti-spine-0.8.8c]# yum install -y net-snmp-devel
[root@server4 cacti-spine-0.8.8c]# ./configure
[root@server4 cacti-spine-0.8.8c]# make && make install #编译安装
[root@server4 cacti-spine-0.8.8c]# cd /usr/local/
[root@server4 spine]# cd etc/
[root@server4 etc]# ls
spine.conf.dist
[root@server4 etc]# cp spine.conf.dist spine.conf
[root@server4 etc]# cp spine.conf /etc/
[root@server4 etc]# vim /etc/spine.conf
-----------------------------
DB_Host localhost
DB_Database cacti #数据库的名称
DB_User cacti #具有登录到数据库权限的用户
DB_Pass westos #该用户的密码
DB_Port 3306
DB_PreG 0
------------------------------
[root@server4 etc]# su - cacti -c /usr/local/spine/bin/spine #测试spine是否配置成功
---------------------------------------------------
SPINE: Using spine config file [/etc/spine.conf]
SPINE: Version 0.8.8c starting
SPINE: Time: 0.0919 s, Threads: 5, Hosts: 3
---------------------------------------------------
9.在cacti前端中将cmd.php替换成spine
然后setting中进行设置,修改paths 下Spine Poller File Path 的路径写成 /usr/local/spine/bin/spine以及在poller选项中把cmd.php改成spine,由此完成功能替换,替换的目的是为实现更高效率的数据采集
10.cacti上安装monitor插件(monitor分类显示主机信息的图)monitor插件,提供更简略、直观的设备状态图示;
lftp 172.25.254.53:/pub/cacti> get monitor-v1.3-1.tgz #下载
[root@server3 ~]# tar zxf monitor-v1.3-1.tgz -C /var/www/html/cacti/plugins/ #/var/www/html/cacti/plugins/是放置cacti插件的位置(-C 指定路径)
11.完成monitor安装
(1)接下来直接在web浏览器上下载安装monitor,安装时会将数据导入到数据库中,在Plugin Management选项中先下载再安装。然后Settings中Misc中进行相应的设置。就完成了该插件的配置。
(2)在System Utilities中Log Administration可以查看所有的日志信息
11.然后修改cacti数据采集的时间为每分钟采集一次数据。cacti主要使用了rrdtool这个工具来绘图,Cacti是通过 snmpget来获取数据。
[root@server3 cli]# pwd
/var/www/html/cacti/cli
[root@server3 cli]# php -q rebuild_poller_cache.php # 重建rrd cache
[root@server3 rra]# pwd
/var/www/html/cacti/rra
[root@server3 rra]# rm -rf *
[root@server3 rra]# su - cacti
-bash-4.1$ crontab -e
---------------------------------------------------------------
* * * * * php /var/www/html/cacti/poller.php >/dev/null 2>&1
---------------------------------------------------------------
12.完成spine采集数据时间间隔的设置
然后在浏览器上Settings项目中对Poller选项进行设置,把Poller Interval和Cron Interval时间设置为every minute。
最后在浏览器上console项目中的System Utilities下的View Poller Cache中选择Host和Action,然后查找,任意点击一个,进入之后,单击edit data template对相应的主机不同模块的监控时间进行修改
以上操作就实现了cacti监控的安装,以及将cmd.php替换成spine,并将数据采集的时间间隔设置为一分钟,同时添加了monitor插件