参考文章:http://foreveryan.blog.51cto.com/3508502/727866

http://freeze.blog.51cto.com/1846439/386828

因为我的cacti已经安装,数据库名为cactidb

ndoutils也已经安装,数据库为ndodb

整合

1:安装cacti-plugin-0.8.7h-PA-v3.0.tar.gz 因为我安装的cacti为0.8.8,

没有该版本的补丁,本来以为要降低版本,但是尝试了一下,使用cacti0.8.8也可以实现整合,不需要补丁。

   但是还是要实现cacti插件扩展的

     vim include/config.php 

  1.    # 修改(或新加入)为 
  2.     $url_path = "/cacti/"

 

从web进入cacti,启用cacti plugin扩展
   因为我已经安装cacti时在config.cfg和global.cfg文件都加入了扩展所以也不用修改

2:nagios plugin for cacti (npc)

  现在官网上npc已经没有了,直接在51.cto网站就有:

   http://down.51cto.com/data/327336

   

  1. tar zxvf npc-2.0.4.tar.gz 
  2. mv npc /usr/local/apache/htdocs/cacti/plugins/ 
  3. vim /usr/local/apache/htdocs/cacti/include/config.php 
  4.     # 加入: 
  5.      $plugins[] = 'npc';

3: 安装 npc支持:json

   要让npc获得json的动态链接库的支持,要慎重。

   因为我们在安装php的时候,或者安装其他插件时,可能要有json的支持。也许你已经安装好了json。我现在版本的php中,json已经在安装yum install php-common时就已经安装好了,你在安装之前可以先看看有没有json

   我的在/usr/lib/php/modules/目录下。如果有就不需要安装了。还需要声明一点我的php放在了/usr/local/php/bin

   如果是yum 安装php 可能在/usr/bin/php

   所以执行php -m 看看都加载了那些模块时要选对

  /usr/local/php/bin/php -m 或者 php -m

   如果你重新安装json 执行以上命令时可能要出现一下问题

   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

   这是因为你重写了json 所以出错了。

    我是这么解决的;先yum remove php-common 

    然后再重装删掉的包

    这样就好了。

 4.  打开php.ini文件添加对json的支持

  1. vim /etc/php.ini 
  2.    # 添加 
  3.     extension=json.so 
     

 

这一步因为我的php目录不同,所以应该在/usr/local/php/lib/php.ini

   但是我没加这个支持,也可以,不知为什么。

   php -m 或者 /usr/local/php/bin/php   ## 查看是否有json被加载

 

5 .修改配置文件以让npc读取到新的数据。

  1. vim /var/www/html/nagios/etc/ndo2db.cfg 
  2.      db_prefix=npc_ 

 

   这里我要说以下,本来我的ndoutils 安装的数据库为ndodb,表都是以nagios_开始的,cacti的数据库为cactidb。我还以为要重新安装ndoutils,统一数据库为cactidb。后来我发现不用,因为你安装npc插件后,会自动在cactidb中产生npc_开头的适合ndoutils的表。具体是安装cacti时就有的还是安装npc时有的,我也不确定。就是说只要修改ndo2db.cfg中db_prefix=npc就可以了,当然了也要把数据库 密码等等修改为caci的数据库cactidb
   从Web进入Cacti,确保正确使用npc选项。
 
6.2 修改mysql中的表结构:

  1. ./mysql -ucactier -p 111111 
  2. mysql> use cactidb;
  3. mysql> alter table npc_eventhandlers add long_output TEXT NOT NULL default '' after output; 
  4. mysql> alter table npc_hostchecks add long_output TEXT NOT NULL default '' after output; 
  5. mysql> alter table npc_hoststatus add long_output TEXT NOT NULL default '' after output; 
  6. mysql> alter table npc_notifications add long_output TEXT NOT NULL default '' after output; 
  7. mysql> alter table npc_servicechecks add long_output TEXT NOT NULL default '' after output; 
  8. mysql> alter table npc_servicestatus add long_output TEXT NOT NULL default '' after output; 
  9. mysql> alter table npc_statehistory add long_output TEXT NOT NULL default '' after output; 
  10. mysql> alter table npc_systemcommands add long_output TEXT NOT NULL default '' after output; 

 

7.重启ndo2db进程,重新加载配置文件重启nagios服务。
  1. service nagios restart 
  2. 重启ndo2db我的比较麻烦
  3. ps aux |grep ndo2db
  4. kill掉ndo2db进程
  5. /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
  6. 开启ndo2db
8.在Web上配置NPC以使之正常读取工作。
 

 

然后再
在Settings->npc中 ,勾上Remote Commands
Nagios Command File Path= /usr/local/nagios/var/rw/nagios.cmd
Nagios URL=你的地址(http://localhost/nagios/)
在configure 栏的setting下有plugin management 选项,找到后,点击后可以找到npc
然后要建立install 并enable
接下来可以重启一下nagios和ndo2db 然后
接下来刷新npc就可以看到数据啦:如下图

这样就可以了。
 
有几点注意:
1:cacti 有时不画图,可以重启一下snmp

 

2:安装npc可能出现一下错误:

  npc一点数据都没有,nagios的东西都不显示。

  我再没成功时,出现了一下错误。

  apache的error_log日志中为

 PHP Fatal error:  Uncaught exception 'Doctrine_Connection_Exception' with message 'Couldn't locate driver named mysql' 

in /usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Connection.php:483\nStack trace:\n#0 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Connection/Mysql.php(101): Doctrine_Connection->connect()\n#1 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Connection.php(1009): Doctrine_Connection_Mysql->connect()\n#2 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Connection.php(808): Doctrine_Connection->execute('SELECT COUNT(*)...', Array)\n#3 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Query.php(1894): Doctrine_Connection->fetchAll('SELECT COUNT(*)...', Array)\n#4 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Pager.php(108): Doctrine_Query->count(Array)\n#5 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Pager.php(570): Doctrine_Pager->_initialize(Array)\n#6 

/usr/local/apache/htdocs/cacti/plugins/npc/controllers/services.php(260): Doctrine_Pager->execute(Array, 3) in 

/usr/local/apache/htdocs/cacti/plugins/npc/lib/Doctrine/Connection.php on line 483, referer: 

http://localhost/cacti/plugins/npc/npc.php?module=layout&action=drawLayout

 这是因为php安装时,选项--with-pdo-mysql没有

 在phpinfo()的显示中要有如下内容pdo和pdo-mysql

 

  且pdo里要有mysql

 但是一定要安装上php-mysql和php-do

 3:我有时nagios显示off

 这是要启动ndo2db和nagios才行,如果还不行,就要重启着两个试试,

 如果还有错误,那就要具体问题具体分析了。

 4:有时ndo2db插入数据cactidb中时,对于表npc_servicechecks 类似的表插入不进,出现一下错误

 Error: mysql_query() failed for 'INSERT INTO npc_servicechecks SET instance_id='1', service_object_id='18', check_type='0', current_check_attempt='1'

 Apr 30 16:08:04 localhost ndo2db-3x: mysql_error: 'Unknown column 'long_output' in 'field list

 这是因为你没有

 alter table npc_eventhandlers add long_output TEXT NOT NULL default '' after output;

 或者你又重新设置了npc就会出现这个问题。

 对于数据库的改变不要忘记