用cacti可以监控本机、远程机器资源与机器的状态,包括cpu、内存、tcp等等信息,当被监控的机器超负载运行时会自动发邮件通知报警。

    将一台linux5.6机器作为cacti服务器,另外2台linux5.6模拟被监控的机器。要保证cacti服务器可以访问因特网。用到的软件包有cacti087e_linux_generic-20100519-yrg.zip(cacti的一个模板,号称通用模板)、cacti-0.8.7e-cn-utf8.tar.gz(cacti安装版,中文版)、cacti-plugin-0.8.7d-PA-v2.4-cn-utf8.diff.gz(cacti插件)、cacti-spine-0.8.7e.tar.gz(一个cacti轮询器—spine,cacti自带了一个叫cmd.php的轮询器,但性能不如spine的高)、epel-release-5-4.noarch.rpm(为了安装rrdtool需要预先配置yum源环境,该包的作用是配置yum源环境)、monitor-0.8.2.zip(cacti监控视图插件)、settings-0.5.zip(cacti要有报警功能,为了实现报警功能,cacti需要settings这个依赖包)、thold-0.4.1.tar.gz(cacti报警插件)

    配置过程:

    对cacti服务器的操作:

  [root@localhost ~]# yum install httpd mysql-server php php-mysql gd net-snmp php-snmp net-snmp-utils net-snmp-devel mysql-devel  openssl-devel fonts-chinese libtool gcc gcc-c++ -y    ///说明:配置yum源用yum安装所需软件,cacti要基于lamp环境运行,所以要安装Apache、mysql、php以及相关的软件包,cacti同时也要靠snmp协议工作,在linux中snmp协议的软件包是net-snmp,故也要把snmp装上。cacti装好之后打开浏览器查看,会发现图像说明文字是乱码,所以要安装中文字体,这里安装fonts-chinese,在接下来要安装的spine插件时,要预先安装libtool包,否则会报:configure: error: cannot run /bin/sh config/config.sub这个错误,这里用yum安装的fonts-chinese以及libtool软件包可以不在此处安装,等问题出现时再安装也不迟。

  [root@localhost ~]# service httpd start

  [root@localhost ~]# service snmpd start

  [root@localhost ~]# service mysqld start    ///分别启动Apache、snmp、mysql服务

  [root@localhost ~]# chkconfig mysqld on

  [root@localhost ~]# chkconfig httpd on

  [root@localhost ~]# chkconfig snmpd on      ///分别将mysql、Apache、snmp服务设置成开机自启动

    mysql> create database cacti default character set utf8;    ///进入mysql数据库,创建名为cacti的数据库,设置默认的字体为utf8

    mysql> grant all privileges on cacti.* to cacti@localhost identified by 'cacti' with grant option;   ///设置数据库cacti的用户名密码分别是cacti

    mysql> flush privileges;    ///将上面新建的数据库cacti生效

    [root@localhost ~]# mkdir software  //在root目录下新建software目录,把所需要的软件包下载或拷贝到这个目录下

    [root@localhost software]# tar zxf cacti-0.8.7e-cn-utf8.tar.gz   ///解压缩cacti安装包

    [root@localhost software]# mv cacti-0.8.7e-cn-utf8 /var/www/html   ///将解压缩后的cacti安装包拷贝到Apache文件目录下,这里用的是Apache的默认目录,也可以新建一个目录,比如:/data1/www,然后将该包拷贝到/data1/www/下

    [root@localhost html]# mv cacti-0.8.7e-cn-utf8 cacti

    [root@localhost html]# vi /var/www/html/cacti/include/config.php   ///修改配置cacti配置文件,将用户名密码改成在数据库里面建立的用户名密码,这里都是cacti

        /* make sure these values refect your actual database/host/user/password */

        $database_type = "mysql";

        $database_default = "cacti";

        $database_hostname = "localhost";

        $database_username = "cacti";

        $database_password = "cacti";

        $database_port = "3306";

    [root@localhost html]# vi /etc/httpd/conf/httpd.conf    ///修改配置Apache配置文件,这里是把cacti安装在默认的Apache目录下,如果是安装在其他目录下,还需要更改DocumentRoot目录以及更改目录

        DirectoryIndex index.php index.html index.html.var

        AddType application/x-httpd-php .php

    [root@localhost html]# vi /etc/httpd/conf.d/cacti.conf   ///创建cacti.conf文件,如果是将cacti安装在其他目录下,要将里面的目录重新指定

        Alias /cacti /var/www/html/cacti

        

           DirectoryIndex index.php

           AllowOverride all

           order deny,allow

           allow from all

           php_flag magic_quotes_gpc on

           php_flag track_vars on

        

    [root@localhost cacti]# mysql -uroot -p cacti < /var/www/html/cacti/cacti.sql   ///导入cacti库所需要的数据结构

    [root@localhost cacti]# crontab -e   ///编辑crontab,设置每隔5分钟刷新一次图

        */5 * * * * php /var/www/html/cacti/poller.php > /dev/null

    [root@localhost software]# rpm -ivh epel-release-5-4.noarch.rpm

    [root@localhost software]# yum install rrdtool -y   ///安装rrdtool,作为画图用

    [root@localhost cacti]# /etc/init.d/httpd restart

    [root@localhost cacti]# /etc/init.d/mysqld restart

    [root@localhost cacti]# /etc/init.d/snmpd restart     ///分别重启相关服务

    现在可以打开浏览器,在地址栏输入http://ip地址/cacti,开始在图形界面上对cacti操作,我的ip是10.10.16.29.

    将上面安装的fonts-chinese安装包路径地址填写到cacti的设置-->路径-->rrdtool默认字体路径下    

    [root@localhost software]# ls /usr/share/fonts/chinese/TrueType/ukai.ttf 

        /usr/share/fonts/chinese/TrueType/ukai.ttf

    linux下的cacti安装、监控远程主机及优化_第1张图片    可以在cacti服务器的终端商手动触发poller:

    [root@localhost software]# php /var/www/html/cacti/poller.php

    [root@localhost software]# php /var/www/html/cacti/poller.php --force  ///也可以手动强制触发poller

        01/23/2014 10:01:51 AM - SYSTEM STATS: Time:2.3562 Method:spine Processes:2 Threads:10 Hosts:4 HostsPerProcess:2 DataSources:77 RRDsProcessed:62

        OK u:0.00 s:0.00 r:2.05

        OK u:0.00 s:0.00 r:2.05

        OK u:0.00 s:0.00 r:2.05

        OK u:0.00 s:0.00 r:2.05  

    [root@localhost software]# tailf /var/www/html/cacti/log/cacti.log    ///每次手动触发,或者crontab自动触发,在cacti日志里面都能看到相关记录,若要报错信息也会在这里显示

        01/23/2014 09:45:04 AM - SYSTEM STATS: Time:2.3162 Method:spine Processes:2 Threads:10 Hosts:4 HostsPerProcess:2 DataSources:77 RRDsProcessed:62

        01/23/2014 09:45:06 AM - SYSTEM THOLD STATS: Time:2.6616 Tholds:1 Hosts:0

        01/23/2014 09:50:04 AM - SYSTEM STATS: Time:2.3266 Method:spine Processes:2 Threads:10 Hosts:4 HostsPerProcess:2 DataSources:77 RRDsProcessed:62

        01/23/2014 09:50:06 AM - SYSTEM THOLD STATS: Time:2.3926 Tholds:1 Hosts:0

        01/23/2014 09:55:04 AM - SYSTEM STATS: Time:2.3599 Method:spine Processes:2 Threads:10 Hosts:4 HostsPerProcess:2 DataSources:77 RRDsProcessed:62

        01/23/2014 09:55:07 AM - SYSTEM THOLD STATS: Time:2.8152 Tholds:1 Hosts:0

        01/23/2014 10:00:03 AM - SYSTEM STATS: Time:2.3356 Method:spine Processes:2 Threads:10 Hosts:4 HostsPerProcess:2 DataSources:77 RRDsProcessed:62

        01/23/2014 10:00:06 AM - SYSTEM THOLD STATS: Time:3.1911 Tholds:1 Hosts:0

        01/23/2014 10:01:51 AM - SYSTEM STATS: Time:2.3562 Method:spine Processes:2 Threads:10 Hosts:4 HostsPerProcess:2 DataSources:77 RRDsProcessed:62

        01/23/2014 10:01:54 AM - SYSTEM THOLD STATS: Time:2.7351 Tholds:1 Hosts:0

    到这里,cacti基本的安装已经完成,可以实现监控本地机器,下面安装cacti的相关插件:

    1.安装轮询器spine插件

    [root@localhost software]# tar zxf cacti-spine-0.8.7e.tar.gz

    [root@localhost software]# cd cacti-spine-0.8.7e

    [root@localhost cacti-spine-0.8.7e]# ./configure   ///如果到这里没有安装libtool依赖包,会报错:configure: error: cannot run /bin/sh config/config.sub

    [root@localhost cacti-spine-0.8.7e]# make &&make install

    [root@localhost ~]# vi /usr/local/spine/etc/spine.conf   ///修改spine轮询器连接数据库权限,更改配置文件里面的连接数据库的用户名密码

        DB_Host         localhost

        DB_Database     cacti

        DB_User         cacti

        DB_Pass         cacti

        DB_Port         3306

    [root@localhost ~]# ln -s /usr/local/spine/etc/spine.conf /etc/spine.conf   ///将spine配置文件做软连接

    [root@localhost ~]# echo "/usr/local/spine/bin/spine" >> /etc/rc.local    ///将spine设置为开机自启动

    2.安装cacti plugin插件

    [root@localhost software]# gzip -d cacti-plugin-0.8.7d-PA-v2.4-cn-utf8.diff.gz

    [root@localhost software]# mv cacti-plugin-0.8.7d-PA-v2.4-cn-utf8.diff /var/www/html/cacti/

    [root@localhost software]# cd /var/www/html/cacti/

    [root@localhost cacti]# patch -p1 -N < cacti-plugin-0.8.7d-PA-v2.4-cn-utf8.diff   ///将该插件(补丁)打进去

    [root@localhost cacti]# mysql -uroot -p cacti < pa.sql/var/www/html/cacti/pa.sql   ///导入cacti库所需要的cacti插件数据结构

    [root@localhost cacti]# vi /var/www/html/cacti/include/global.php   ////编辑cacti全局配置文件

        /* Default database settings*/

        $database_type = "mysql";

        $database_default = "cacti";

        $database_hostname = "localhost";

        $database_username = "cacti";      ///将用户名密码分别改成cacti

        $database_password = "cacti";

        $database_port = "3306";

        ......

        $config['url_path'] = '/cacti/';   ///将此处的路径由 / 改成 /cacti/,注意这里改成的是/cacti/,不是/cacti,否则cacti会找不到图片路径,之前我犯过数次错误,经过很长一段时间排错,发现错误的根源是少了“/”

    3.安装monitor插件

    [root@localhost software]# mkdir monitor

    [root@localhost software]# cp monitor-0.8.2.zip monitor/

    [root@localhost monitor]# unzip monitor-0.8.2.zip 

    [root@localhost software]# mv monitor /var/www/html/cacti/plugins/

    [root@localhost software]# mysql -uroot -p cacti < /var/www/html/cacti/plugins/monitor/monitor.sql   ///导入cacti库所需要的monitor数据结构

    [root@localhost software]# vi /var/www/html/cacti/include/global.php   ///再次编辑cacti全局配置文件,在$plugins = array();下面增加$plugins[] = 'monitor';

        $plugins = array();

        //$plugins[] = 'thold';

        $plugins[] = 'monitor';

    4.安装thold报警插件

    由于thold软件包依赖settings软件包,所以要先安装settings软件包:

    4.1安装settings软件包:

    [root@localhost software]# mkdir settings

    [root@localhost software]# cp settings-0.5.zip settings

    [root@localhost settings]# unzip settings-0.5.zip 

    [root@localhost software]# mv settings /var/www/html/cacti/plugins    ///只需要将settings配置文件拷贝到cacti的plugins目录下就可以了,不需要导入数据库

    4.2安装thold报警软件包

    [root@localhost software]# tar zxf thold-0.4.1.tar.gz 

    [root@localhost software]# mv thold /var/www/html/cacti/plugins  ///将thold包移到plugins下

    [root@localhost software]# mysql -uroot -p cacti < /var/www/html/cacti/plugins/thold/thold.sql   ///导入cacti库所需要的thold数据结构

    [root@localhost software]# vi /var/www/html/cacti/include/global.php    ///又一次编辑cacti全局配置文件,在$plugins = array(); 这行下面增加下面两行

        $plugins[] = 'settings';

        $plugins[] = 'thold';

    走到这里,cacti的需要的插件都安装好了,也可以选择其他货更多的插件安装,方法类似。下面用浏览器进入cacti图形界面进行一些设置

    linux下的cacti安装、监控远程主机及优化_第2张图片    进到cacti界面,先刷新一下,发现上面的工具栏会多出一个monitor的按钮,点击左边树状的工具栏中的用户管理,选择admin,勾上view Thresholds,选择保存如上图。然后会发现在左侧的工具栏中多了一个插件管理选项,点击插件管理,点安装Thresholds插件,点启用Thresholds插件,此时会发现上面的工具栏多出了thold选项,这说明这里的操作成功了,如下图:

linux下的cacti安装、监控远程主机及优化_第3张图片


    现在开始做添加远程主机、并监控远程主机的操作:

    首先要在被监控的远端机器上面启用snmp协议(linux和windows主机都要启用)

    1.在被监控的linux主机上安装net-snmp包,并修改snmp配置文件

    [root@localhost ~]# yum install net-snmp -y

    [root@localhost ~]# vi /etc/snmp/snmpd.conf   ///修改第62行、第85行即可

        62 access  notConfigGroup ""      any       noauth    exact  all   none none

        ....

        85 view all    included  .1                               80

    [root@localhost ~]# service snmpd start

    2.用浏览器登录cacti服务器的ip地址,http://ip/cacti/

    将cacti087e_linux_generic-20100519-yrg.zip这个模板解压缩,将压缩后得到的配置文件导入到cacti中,具体做法:进入cacti图形界面,选择左侧工具栏“导入/导出”里的“导入模板”,点选择文件,将刚刚解压后的模板文件导进去,以后监控其他主机就用这个模板,当然也可以用其他的模板,需要导入其他的模板。如下图:

linux下的cacti安装、监控远程主机及优化_第4张图片

    为了便于监控数以百计的服务器,接下来添加图像树,添加图像树的目的就是讲被监控的机器分门别类的放到一起,为的是便于监控,选择左侧工具栏的“图像树”,在新出现的页面的右上方选择“添加”在新出现的页面中填写图像树的名称(可以写的有意义一点),点击“创建”即可。

    接下来添加被监控的主机。选择图形界面上的左侧的“管理”中的“设备”按钮,在新弹出的界面中点击右上角的“添加”,接下来具体做法如下图,然选择创建

linux下的cacti安装、监控远程主机及优化_第5张图片点击完创建之后会进入另一个界面,在该界面的右上方点“为此设备生成图像”,接下来具体操作如下图,右侧划红线的部分可以随便选择监控与否,底下的“选择图像类型”,选择64位的,选择默认的话以后会出现问题:

linux下的cacti安装、监控远程主机及优化_第6张图片然后选择左侧工具栏中的“管理”里的“图像管理”选项,具体做法如下图,选择右侧复选框勾选需要监控的资源,在底下选择将这些药监控的东西放到一个指定的图像树里面,便于监控。

linux下的cacti安装、监控远程主机及优化_第7张图片到这里,监控其他机器运行状态的操作完成。


3.配置cacti,做报警信息:

选择左侧工具栏中的“配置”里的“设置”选项,再选择上方的“Alerting/Thold”,在相应位置填写报警信息要发给的邮箱地址,如下图:

linux下的cacti安装、监控远程主机及优化_第8张图片然后再选择上方工具栏中的“Mail/DNS”选项,如下图:

linux下的cacti安装、监控远程主机及优化_第9张图片然后选择左侧的“Templates”里的“Threshold”选项,在出现的界面的右上方,选择“添加”,在出现的界面中选择要监控的主机名,选择要监控的资源信息,选择数据资源,选择创建,如下图:

linux下的cacti安装、监控远程主机及优化_第10张图片

    

   在出现的界面中填写相应信息,这里的阀值(2和1)是我为了演示更明显才这么做的,完成后,cacti会每隔5分钟发一封邮件给我提示报警。如下图:

linux下的cacti安装、监控远程主机及优化_第11张图片 到这里,监控远程机器并发邮件给自己的邮箱报警的功能已经完成。


下面对cacti服务器进行优化:

1. 采用spine轮询器,即 设置-->轮询器-->轮询器类型spine

2. 设置spine 进程数和线程数,如下图:

linux下的cacti安装、监控远程主机及优化_第12张图片

3. 增大php.ini 内的memory_limit ,即编辑文件 : vi /etc/php.ini ,按实际需求调整数值

4. 增大mysql的最大连接数,即:

    mysql> use cacti

    mysql> show variables like "%max_connections";

        +-----------------+-------+

        | Variable_name   | Value |

        +-----------------+-------+

        | max_connections | 100   | 

        +-----------------+-------+

        1 row in set (0.00 sec)

    

    mysql> set global max_connections=5000;

        Query OK, 0 rows affected (0.00 sec)

    

    mysql> show variables like "%max_connections";

        +-----------------+-------+

        | Variable_name   | Value |

        +-----------------+-------+

        | max_connections | 5000  | 

        +-----------------+-------+

        1 row in set (0.00 sec)

5. 添加mysql table的index

CREATE INDEX `data_template_data_id` ON `data_input_data` (`data_template_data_id`);


CREATE INDEX `host_id_snmp_query_id_snmp_index` ON data_local (`host_id`,`snmp_query_id`,`snmp_index`);


CREATE INDEX `local_data_id_data_source_name` ON data_template_rrd (`local_data_id`,`data_source_name`);


CREATE INDEX `graph_template_id_local_graph_id` ON graph_templates_item (`graph_template_id`,`local_graph_id`);


CREATE INDEX `local_graph_template_item_id` ON graph_templates_item (`local_graph_template_item_id`);


CREATE INDEX `host_id_snmp_query_id_snmp_index` ON host_snmp_cache (`host_id`,`snmp_query_id`,`snmp_index`);


CREATE INDEX `local_data_id_rrd_path` ON poller_item (`local_data_id`,`rrd_path`);


CREATE INDEX `host_id_rrd_next_step` ON poller_item (`host_id`,`rrd_next_step`);


CREATE INDEX host_id_snmp_query_id ON host_snmp_cache (host_id,snmp_query_id);


CREATE INDEX host_id_snmp_port ON poller_item (host_id,snmp_port);


CREATE INDEX data_source_path ON data_template_data (data_source_path);


6. 加上RRA路径结构,即 设置-->路径-->勾选RRA路径结构

7. 定期清理poller_output表


ok,到这里cacti配置、监控、优化完成!