10 nagios-Cacti服务器软件安装

Cacti软件准备

php-devel-5.1.6-27.el5.i386.rpm

php-json-ext-1.2.1.tar.bz2

php-mysql-5.1.6-40.el5_9.i386.rpm(如果不安装,则php连不上mysql)

php-pdo-5.1.6-40.el5_9.i386.rpm(可能是php-mysql的依赖包,在yum安装php-mysql时连带安装)

yum -y install php-devel php-mysql php-pdo

php-json-ext不能yum安装上,因此需要手工安装。参见下面的安装过程。

Cacti服务器软件安装

参考资料

http://viong.blog.51cto.com/844766/286701

http://viong.blog.51cto.com/844766/288278

http://www.cacti.net

http://www.aydnw.com/html/database/mysql/22526.html

http://peaceweb.blog.51cto.com/3226037/1065783

Json安装

#rpm -ivh php-devel-5.1.6-27.el5.i386.rpm

tar jxvf php-json-ext-1.2.1.tar.bz2

cd php-json-ext-1.2.1

phpize //如果执行不了,则可能没有安装php-devel

Configuring for:

PHP Api Version: 20041225

Zend Module Api No: 20050922

Zend Extension Api No: 220051025

./configure

make && make install

find / -name *json.so

/usr/lib/php/modules/json.so

/root/soft/php-json-ext-1.2.1/modules/json.so

/root/soft/php-json-ext-1.2.1/.libs/json.so

vi /etc/php.d/json.ini //添加以下内容

extension=json.so

保存退出

service httpd restart

测试PHP是否支持json扩展:

vi /var/www/html/test.php

添加以下内容

<?php
phpinfo();
phpinfo(INFO_GENERAL);
phpinfo(1);
?>

保存退出

在IE输入http://192.168.50.115/test.php 看到以下信息

clip_image002

clip_image004

测试PHP连接mysql

首先需要根据以下内容安装好mysql并启动,然后创建测试脚本:

vi /var/www/html/testdb.php

添加以下内容

<?php

$link=mysql_connect("localhost","root","111111");

if(!$link) echo "FAILD!";

else echo "OK!";

?>

保存退出

在IE输入http://192.168.50.115/testdb.php 看到以下信息:

clip_image006

如果没有安装php-mysql,则不会显示成功或者失败。密码不正确,权限不对当然也不能连接哦。

Rrdtool安装

http://pkgs.repoforge.org/rrdtool/

#yum install libdbi 或 # rpm -ivh libdbi-0.8.1-2.1.i386.rpm

# rpm -ivh lua-5.1.4-2.el5.rf.x86_64.rpm rpm -ivh lua-5.1.4-2.el5.rf.i386.rpm

以上两个为rrdtoo的依赖包。

rpm -ivh rrdtool-1.4.7-1.el5.rf.x86_64.rpm rrdtool-devel-1.4.7-1.el5.rf.x86_64.rpm perl-rrdtool-1.4.7-1.el5.rf.x86_64.rpm

以上三个包要一起安装否则会报一些错误,如找不到perl(RRDp) 什么的。

# rpm -ivh perl-rrdtool-1.4.7-1.el5.rf.i386.rpm rrdtool-devel-1.4.7-1.el5.rf.i386.rpm rrdtool-1.4.7-1.el5.rf.i386.rpm

Mysql安装

yum install mysql-server

yum install mysql-devel

yum install mysql

Cacti安装

1, 安装Cacti包

# tar -zxvf cacti-0.8.8a.tar.gz

mv cacti-0.8.8a /var/www/html/cacti/

chown -R root.root /var/www/html/cacti/

2, 配置mysql

mysql -u root -h 127.0.0.1 -p

Enter password:

mysql> create database nagios;

Query OK, 1 row affected (0.01 sec)

mysql> grant all on nagios.* to ndouser@localhost identified by '111111';

grant all on nagios.* to [email protected] identified by '111111';

grant all on nagios.* to [email protected] identified by '111111';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;

flush privileges;

quit;

到cacti根目录下把cacti.sql中的数据导入到数据库cacti中

#cd /var/www/html/cacti

mysql -uroot -p nagios<cacti.sql

3, 配置mysql连接参数

#cd /var/www/html/cacti

vi include/config.php //如果不想修改以下参数,则可以依此创建数据库和用户

$database_type = "mysql"; //以上数据库及用户就是这么创建的

$database_default = "nagios";

$database_hostname = "localhost";

$database_username = "ndouser";

$database_password = "ndopassword";

$database_port = "3306";

$database_ssl = false;

修改以下参数让其生效:

$url_path = "/cacti/"; //将其他的 $url_path = "/"; 将其注销掉

$plugins = array(); //这个参数如果是注销掉的话,则取消注销让其生效;

vi include/global.php //这里也一样

$database_type = "mysql";

$database_default = "nagios";

$database_hostname = "localhost";

$database_username = "ndouser";

$database_password = "ndopassword";

$database_port = "3306";

$database_ssl = false;

$url_path = "/cacti/"; //同时,也打开$url_path = "/cacti/";

这两个配置文件中的$url_path一定要配置对,否则进入cacti后的其他的页面的地址就不对了。

Cacti插件安装

# tar -zxvf cacti-plugin-0.8.7g-PA-v2.8.tar.gz

cd cacti-plugin-arch/

cp cacti-plugin-0.8.7g-PA-v2.8.diff /var/www/html/cacti/

cp pa.sql /var/www/html/cacti/

cd /var/www/html/cacti/

patch -p1 -N <cacti-plugin-0.8.7g-PA-v2.8.diff

mysql -uroot -p nagios < pa.sql //这里4,5张表可能会跟先前创建的表有重复,可将先前创建的有冲突的表删除。如果发现ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 12这样的错误,可将pa.sql文件中创建表语句的TYPE=MyISAM改成ENGINE=MyISAM 。

建立任务调度

# crontab -e

输入以下内容,代表每5分钟来执行后面PHP解析内容,把显示信息重定向到空的路径

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

[root@cacti-qmail cacti]# crontab -e

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

也可手工跑一次: /usr/bin/php /var/www/html/cacti/poller.php

手工跑的时候报错:

1)# php /var/www/html/cacti/poller.php

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/mysql.so' - /usr/lib/php/modules/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0

PHP Notice: Constant URL_PATH already defined in /var/www/html/cacti/include/global.php on line 121

网上搜了下说是MySQL-shared-community没安装,到以下网址下载对应的版本(先查mysql的版本:rpm -qa|grep mysql。我查到的版本是mysql-5.0.95-5.el5_9,因此下载MySQL-shared-community-5.0.95-1.rhel5.i386.rpm):

http://rpm.pbone.net/index.php3?stat=3&limit=2&srodzaj=3&dl=40&search=MySQL-shared-community

2)PHP Warning: strtotime(): It is not safe to rely on the system's timezone settings.

vi /etc/php.ini

date.timezone=PRC

安装后还有问题:

# php /var/www/html/cacti/poller.php

PHP Notice: Constant URL_PATH already defined in /var/www/html/cacti/include/global.php on line 121

FATAL: Cannot connect to MySQL server on 'localhost'. Please make sure you have specified a valid MySQL database name in 'include/config.php'

将include/config.php中的localhost,改成127.0.0.1也不行,然后执行:

然后执行了下:grant all on nagios.* to ndouser@localhost identified by 'ndopassword';

还是有错:

# php /var/www/html/cacti/poller.php

PHP Notice: Constant URL_PATH already defined in /var/www/html/cacti/include/global.php on line 121

PHP Notice: Constant OPER_MODE_NATIVE already defined in /var/www/html/cacti/include/global_constants.php on line 192

PHP Notice: Constant OPER_MODE_RESKIN already defined in /var/www/html/cacti/include/global_constants.php on line 193

PHP Notice: Constant OPER_MODE_IFRAME_NONAV already defined in /var/www/html/cacti/include/global_constants.php on line 194

sh: -q: command not found

sh: -: command not found

半天有憋出来两行:

07/10/2013 01:25:59 PM - POLLER: Poller[0] Maximum runtime of 298 seconds exceeded. Exiting.

07/10/2013 01:25:59 PM - SYSTEM STATS: Time:298.7934 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:0 RRDsProcessed:0

不过再次运行报一些警告信息,先不管他。

有时候执行 php -v ,报以下错误:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/json.so' - /usr/lib64/php/modules/json.so: undefined symbol: ZVAL_DELREF in Unknown on line 0

解决的办法也是需要安装MySQL-shared-community。

如果还是不行,则执行以下命令(http://stackoverflow.com/questions/7979864/php-5-3-8-json-centos-6):

# yumdownloader php-common

# rpm -Uvh --force php-common*.rpm

# service httpd reload

# rm php-common*.rpm

此后,执行php -v就正确了:

# php -v

PHP 5.3.3 (cli) (built: Jul 12 2013 20:35:47)

Copyright (c) 1997-2010 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

[root@nagios-test ~]#

配置cacti

http://127.0.0.1/cacti/install/

clip_image008

clip_image010

clip_image012

里面的所有的项全部变绿色就行了,否则安装相关的包,如net-snmp有关的包。

clip_image014

输入用户名和密码admin/admin,第一次需要强行修改密码。

Npc安装

NPC(Nagios Plugin for Cacti)是一个Cacti插件,安装后可以在Cacti界面里使用Nagios的功能。

# wget http://www.constructaegis.com/downloads/npc-2.0.4.tar.gz

# tar -zxvf npc-2.0.4.tar.gz

mv npc/ /var/www/html/cacti/plugins/

vi /var/www/html/cacti/include/global.php

添加以下参数

$plugins= array();

$plugins[] = 'npc';

如下图:

clip_image015

保存退出

修改ndo2db.cfg

vi /usr/local/nagios/etc/ndoutils/ndo2db.cfg

db_prefix=nagios_ 修改为db_prefix=npc_

查看日志
tail -100 /var/log/messages
tail -100 /usr/local/nagios/var/nagios.log
tail -100 /usr/local/nagios/var/ndo2db.debug
3、cacti插件npc提示no hosts
tail -100 /var/log/messages
localhost ndo2db-3x: mysql_error: 'Unknown column 'long_output' in 'field list''
添加缺失的对应字段(这里可能会报不能使用默认值,可将DEFAULT ''去除后重新执行)
ALTER TABLE npc_eventhandlers ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_hostchecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_hoststatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_notifications ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_servicechecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_servicestatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_statehistory ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_systemcommands ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
FLUSH PRIVILEGES;

重启ndo2db nagios 服务

Shell>service ndo2db restart

Shell>/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

NPC界面设置

点击(console)菜单栏 user management------->admin

clip_image017

在realm permission---plugin management(打勾)

clip_image019

返回(console)菜单栏,点击configuration--------plugin management―安装并激活npc插件

clip_image021

返回(console)菜单栏,点击configuration-------settings----NPC,修改一下三个参数。这里的url的ip需要根据自己安装的nagios的ip地址进行填写。

clip_image023

/usr/local/nagios/var/rw/nagios.cmd

http://192.168.0.51/nagios

返回(console)菜单栏,点击插件链接区-NPC

clip_image025


但是看npc里发现空白的,没有数据,是因为php没有PDO_MYSQL支持,所以安装PDO_MYSQL

1. # wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

2. # tar zxvf PDO_MYSQL-1.0.2.tgz

3. # cd PDO_MYSQL-1.0.2

4. # /usr/local/php/bin/phpize 如果php是yum安装的,则直接执行phpize

5. #./configure --with-php-config=/usr/bin/php-config 如果php是yum安装的就不需要 �C-with......

6. #make

7. #make install

8.

9. 修改php.ini,添加如下信息,之后重启httpd即可

10. extension = "pdo_mysql.so"

如果报错:

configure: error: mysql_query missing!?

则:

mkdir /usr/share/mysql/bin

ln -s /usr/bin/mysql /usr/share/mysql/bin/mysql

以上两句不一定有用

ln -s /usr/lib/mysql/* /usr/local/lib/

如果出现以下错误:

clip_image027

则,找一下mysql的头文件:

find / -name 'mysql.h'

找到在/usr/include/mysql/中,则:

ln -s /usr/include/mysql/* /usr/local/include/

./configure --with-php-config=/usr/bin/php-config --with-pdo-mysql=/usr/share/mysql

这样configure就可以了,然后在make && make install

http://192.168.0.51/test.php

clip_image029

之后再访问就可看到有数据了:

如果发现mysql数据库中只有nagios_开头的表,而没有npc_开头的表,请删除数据库后重新创建数据库。

重新创建数据库

mysql>drop database nagios;

Create database nagios;

grant all on nagios.* to ndouser@localhost identified by '111111';

grant all on nagios.* to [email protected] identified by '111111';

grant all on nagios.* to [email protected] identified by '111111';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;

flush privileges;

quit;

# cd ndoutils-1.5.2/db

mysql -uroot -p nagios<mysql.sql

到cacti根目录下把cacti.sql中的数据导入到数据库cacti中

#cd /var/www/html/cacti

mysql -uroot -p nagios<cacti.sql

mysql -uroot -p nagios < pa.sql

pa.sql脚本可能会存在问题,可将创建表的脚本TYPE=MyISAM' 改成ENGINE=MyISAM,另外在创建表之前增加drop table语句。

重启nagios服务:

#service nagios restart //此后nagios_hosts表就应该有数据了;

重新配置cacti,启动npc后,就应该生成了npc_前缀的表了。

此后应该在/var/log/message会报错。根据报错情况进行处理,这里,一般会报字段有问题,执行以下命令:

mysql>use nagios;

ALTER TABLE npc_eventhandlers ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_hostchecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_hoststatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_notifications ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_servicechecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_servicestatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_statehistory ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

ALTER TABLE npc_systemcommands ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;

FLUSH PRIVILEGES;

如果出现不能使用默认的字符,那么将以上语句中的DEFAULT '' 删除后重新执行。

cacti npc插件使用方法

http://blog.sina.com.cn/s/blog_61c07ac50101efgd.html

1、安装步骤就不在这里赘述了,网上一搜一大把。

2、今天主要的是讲怎么使用这个npc插件的问题

cacti绘图实例要引用绘图模版,绘图模版要引用数据模版,数据模版要引用数据输入方法。所以我们先从添加数据输入方法Data Input Method开始。
clip_image031

点services,可以看到nagios里定义的所有服务。在想要取数据绘图的服务上双击或点右键选Service Detail。
clip_image033

在上面右边有个Data Input Method标签,点一下,OK。这样就往cacti里引入了一条数据输入脚本。这里以一台名称为node7主机上的检查cpu负载服务为例。好了,npc标签要做的就没有了。下面转到console标签。
clip_image035

点下Data Input Methods,可以看到刚才添加的cacti数据输入方法“NPC - Perfdata - node7: Current Load”在列表里了。点一下”NPC - Perfdata - node7: Current Load“,可以看它的属性
clip_image037

可以看到它的Input Type为Script/Command,一般的cacti数据输入都是通过snmp的,这里则是通过执行脚本来读取的。下面显示是执行perfdata.php脚本文件,参数为 --type=service --id=14。npc插件把nagios的每个服务都编了号,我这个node7主机check_load服务被编到14号。下面Output Fields栏显示的是这个输入方法定义的输出字段名,待会儿要定义的数据模版就要引用这些字段。(这里npc 有个bug,点开load5和load15。“Field [Output]”的值" load5"或" load15"前面多了个空格,把空格去掉,不然后来取不到5分钟和15分钟的数据)好了,现在点击左侧菜单Data Templates,开始添加数据模版。
clip_image039

这里cacti自带的模版当然没有从npc取数据的。我们要添加一个,点右上方Add,也可以右下方Choose a action auplicate复制一个已有的来修改。我复制了一个Unix - Load Average,因为跟我的cpu负载检查服务比较接近,只要改一下输入方法Data Input Method就好了。
clip_image041

修改模版名,我改成了npc - Unix - Load Average。把Data Input Method从Unix - Get Load Average改成前面定义的NPC - Perfdata - node7:Current Load。
clip_image043

下面已经有了三个Data Source Item,load_1min;load_5min;load_15min。如果刚才模版不是复制的,而是添加的,就要手动建立三个。把这三个Data Source Item项,下面Output Field选成相应的先前数据输入方法里的字段。比如load_1min的Output Field要选成load1 - load1,不然绘出来的图数据不正确。好了,数据模版完成了,再左侧点开Graph Templates开始建立绘图模版。
clip_image045

跟刚才一样,绘图模版也可以自己新建或是复制一个已有的模版来修改。我复制了一个Unix - Load Average来修改。改模版名为npc - Unix - Load Average。
clip_image047

首先来看中间有三项Graph Item Inputs,1 Minute Data Source;5 Minute Data Source;15 Minute Data Source。这是绘图的三个输入数据项名称。每个数据项又是引用的上面Graph Item中的某项。点开1 Minute Data Source
clip_image049

可以看到是引用了刚才Graph Item栏中的哪几项,1 Minute Data Source是引用了Graph Item中Item # 1和Item # 2的数据。回到刚才的页面。
clip_image051

点开Graph Item栏中的Item # 1
clip_image053

把Data Source数据源改成先前在数据模版中定义Data Source Item项,因为Item # 1是被1 Minute Data Source引用,1 Minute Data Source很明示是绘图时显示1分钟内负载的数据,所以Item # 1就选npc - Unix - Load Average - (load 1min)。刚才Graph Item Inputs项1 Minute Data Source中也包括了Item # 2,所以Item # 2的Data Source Item也选npc - Unix - Load Average - (load 1min)
clip_image055

接下来就是cacti的常规操作了。添加设备,我添加了跟刚才服务一致的主机node7,建立绘图时选择刚才建立的npc - Unix - Load Average绘图模版。这时候还看不到图表的,我这张截图是后来截的。
clip_image057

把绘图添加到Graph Trees。数分钟后就可以看到图表了
如果没有,看看rra目录权限有没有问题。或者直接用npc的那个脚本看能不能获取数据。在Data Input Methods里点开自己定义的数据输入方法,可以查到npc里自己这个服务的编号。然后用php -q 路径/perfdata.php --type=service --id=服务编号,查看能不能获取到数据
clip_image059

你可能感兴趣的:(10 nagios-Cacti服务器软件安装)