ndoutils 将nagios采集的信息存入mysql数据库中
参考文章http://mysql.nagiostutorial.com/19

1.NDOUtils安装需求
   nagios
   mysql        //我的是直接解压就可以用的
   cpan DBI #非必需
   cpan DBD::mysql #非必需
2.关联mysql头文件和库
   不做关联可能在config或make时出错
   ln -s /usr/local/mysql/include/* /usr/include/
   ln -s /usr/local/mysql/lib/* /usr/lib/
   echo ‘/usr/lib’ >> /etc/ld.so.conf
   ldconfig -v
3.安装ndoutils
   cd ndoutils
   ./configure --prefix=/usr/local/nagios 
--enable-mysql --disable-pgsql 
LDFLAGS=-L/usr/local/mysql/lib 
--with-mysql-inc=/usr/local/mysql/include 
--with-mysql-lib=/usr/local/mysql/lib
  出现错误:
   *** MySQL include file could not be located… **********************
   原因:我没有安装mysql-devel
   安装:yum install mysql-devel
   然后:
./configure --prefix=/usr/local/nagios 
--enable-mysql --disable-pgsql 
LDFLAGS=-L/usr/local/mysql/lib 
--with-mysql-inc=/usr/local/mysql/include 
--with-mysql-lib=/usr/local/mysql/lib
  没有错误
  make
  在src目录下看看是否有
   ndo2db-2x
   ndo2db-3x
   ndomod-2x.o
   ndomod-3x.o
有的话说明安装成功。
4.拷贝文件
# 我的Nagios是3系列,所以拷贝的是ndomod-3x.o、ndo2db-3x,如果你的是2.X.x请拷贝ndomod-2x.o、ndo2db-2x

cp ./src/ndomod-3x.o /usr/local/nagios/bin
cp ./src/ndo2db-3x /usr/local/nagios/bin
cp ./src/log2ndo /usr/local/nagios/bin
cp ./src/file2sock /usr/local/nagios/bin
chown nagios:nagios /usr/local/nagios/bin/*
5.拷贝配置文件
   cp /config/ndo2db.cfg  /usr/local/nagios/etc/ndo2db.cfg
   cp /config/ndomod.cfg  /usr/local/nagios/etc/ndomod.cfg
  以上config目录中的ndo2db.cfg和ndomod.cfg在ndoutils-1.49b中是以ndo2db.cfg-sample和ndomod.cfg-sample命名的,
  如果您使用的是这个版 本的ndoutils,请在复制时做出相应的修改;
   cp /config/ndo2db.cfg-sample  /usr/local/nagios/etc/ndo2db.cfg
   cp /config/ndomod.cfg -sample  /usr/local/nagios/etc/ndomod.cfg

   注意还要修改权限
  chown nagios:nagios /usr/local/nagios/etc/ndo2db.cfg
   chown nagios:nagios /usr/local/nagios/etc/ndomod.cfg

  如果不修改,最终在 tail -30 /var/log/messages
1 10:10:49 localhost nagios: ndomod: Still unable to connect to data sink.  3549 items lost, 5000 queued items to flush.
May  1 10:11:05 localhost nagios: ndomod: Still unable to connect to data sink.  3646 items lost, 5000 queued items to flush.
    会出现如下错误
6:为nagios创建数据库
mysql> create database ndodb;
Query OK, 1 row affected (0.08 sec)

mysql> grant all privileges on ndodb.* to ndouser@localhost identified by '111111'    //把数据库ndodb 让用户ndouser 使用,以后可以用
    -> ;                                                                                                                               ndouser登录数据库,使用ndodb数据库
Query OK, 0 rows affected (0.09 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.06 sec)

mysql> 
7:导入数据库结构
使用db/installdb脚本
需要以下支持

cpan DBI
cpan DBD::mysql

cd ./db/
./installdb -u root -p 111111 -h localhost -d ndodb
用命令导入(其实和用脚本是一回事,也可以用phpmyadmin来导入)

/usr/local/mysql/bin/mysql -u root -p -D ndodb -h localhost < ./db/mysql.sql           //注意仍然在ndoutils的安装文件目录下
输入密码                                                                                                                      //其目录下有db文件夹和src文件夹

成功导入59张表
进入数据库看看如下

 

8.修改配置文件
vi /usr/local/nagios/etc/ndo2db.cfg

db_user=nagiosndo
db_pass=password123
sock_type=tcp
vi /usr/local/nagios/etc/nagios.cfg

# 修改下面参数的值为-1(一般默认如此)。
event_broker_options=-1
# 复制下面内容粘贴到#broker_module=…下面。
# 注意broker_module= 和config_file是在一行上
# Uncomment the line below if you’re running Nagios 3.x
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg  必须在一行
vi /usr/local/nagios/etc/ndomod.cfg
  output_type=tcpsocket
output=127.0.0.1
9.启动ndo2db

/usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
echo ‘rm -f /usr/local/nagios/var/ndo.sock’ >> /etc/rc.local
echo ‘/usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg’ >> /etc/rc.local
#开机启动

查错:tail -20 /usr/local/nagios/var/nagios.log

[1227766166] ndomod: NDOMOD 1.4b7 (10-31-2007) Copyright (c) 2005-2007 Ethan Galstad (nagios@nagios.org)

[1227766166] ndomod: Successfully connected to data sink.  0 queued items to flush.

[1227766166] Event broker module ‘/usr/local/nagios/bin/ndomod-3x.o’ initialized successfully.

[1227766166] Finished daemonizing… (New PID=18848)

表示正常
   tail -30 /var/log/messages
  我出现如下错误
  Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
  原因是我用的是二进制解压包,mysql.sock 在/tmp 目录下 编译的mysql应该也在该目录下
  解决办法有两个,一是修改/etc/my.cnf文件中sock的位置,
                        二是创建一个软链接到/var/lib/mysql下面 
   重启ndo2db 
  ps aux |grep ndo2db 找到该进程
nagios   17539  0.0  0.0  10308   592 ?        Ss   15:52   0:00 /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
nagios   17585  0.6  0.2  19528  1560 ?        S    15:52   0:17 /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
nagios   17586  0.1  0.2  19528  1560 ?        S    15:52   0:05 /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
root     18436  0.0  0.1   4588   800 pts/3    S+   16:39   0:00 grep --color=auto ndo2db

  kill  pid 号   如17539  和17585
  
  然后重启ndo2db
此时tail -30 /var/log/messages
我出现了Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
但是我没有管。
10.重启动nagios

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
service nagios restart

这样就可以了。
最终我的结果如下
mysql> select host_id,address,display_name from nagios_hosts;
+---------+-----------+---------------+
| host_id | address   | display_name  |
+---------+-----------+---------------+
|       4 | 127.0.0.1 | Nagios-Server |
|       5 | 127.0.0.1 | localhost     |
|       6 | 127.0.0.1 | unixserver    |
+---------+-----------+---------------+
3 rows in set (0.01 sec)

总结:
   如果数据库中还是没有数据,则可以重启ndo2db 然后重启nagios 多尝试一下重启,如果还不行可能就是安装的有问题
  数据库得到数据花费的时间叫长,耐心等待。
  并且我也是很久才得到数据的,然后修改了nagios.cfg 文件后,有时ndoutils能感应到数据的变化,有时不行。
然后我又重启ndo2db 和nagios  ,我不知道是不是在objects目录下是否必须有hosts.cfg services.fg 和contactgroups.cfg 
我试验了一下, 这几个文件是非必须的,但是当我又修改nagios.cfg 文件时,数据库又监测不到了,不知道为什么
反正不是很好弄

经过几天的学习,对于
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
Apr  7 15:52:34 localhost ndo2db-3x: Error: queue send error.
有了新的认识,其实这是因为ndoutils1.5版本本身的问题,外文网站说是message queue队列满了。
改用低版本的ndoutils-1.4b9.tar.gz就可以了,安装步骤一样。
并且网上有一个关于异步数据库的ndoutils补丁网址如下
http://exchange.nagios.org/direc ... ils-2Dasync/details  
在ndoutils1.49b中我没有安装这个补丁,其实也不知道具体有什么用。只是介绍一下