一、实验准备
1.安装好lamp构架,如果不想用源代码编译安装,就直接配置一个本地的yum源进行安装,这样就简单多了。
2.安装好nagios、GD库,让其可以正常运行。本实验旨在能正常提供nagios的机上进行安装ndoutils
3.准备好DBD-mysql-4.014.tar.gz、DBI-1.609.tar.gz,可以在http://search.cpan.org
4.准备好nagios-plugins-1.4.14.tar.gz,可以到http://www.nagios.org上去下载
二、实验环境:
主机 | IP | 描述 |
Node2.example.com | 192.168.145.129 | Nagios+ndoutils |
Node3.example.com | 192.168.145.130 | Nagios+ndoutils+mysql |
三、实验目的:
两台机分别用nagios采集信息通过ndoutils存入192.168.145.130的mysql数据库
四、实验过程:
1.安装DBI
[root@node2 /]# tar xvf DBI-1.609.tar.gz -C /usr/src
[root@node2 /]# cd /usr/src/DBI-1.609/
[root@node2 DBI-1.609]# perl Makefile.PL
[root@node2 DBI-1.609]#make && make install
2.安装DBD-mysql
[root@node2 /]# tar xvf DBD-mysql-4.014.tar.gz -C /usr/src
[root@node2 src]# cd DBD-mysql-4.014/
[root@node2 DBD-mysql-4.014]# perl Makefile.PL –mysql_config=/usr/local/mysql/bin –with-mysql=/usr/local/mysql
[root@node2 DBD-mysql-4.014]# make && make install
3.Ndoutils安装:
1)关联mysql头文件和库
[root@node3 mysql]# ln -s /usr/local/mysql/include/* /usr/include/
[root@node3 mysql]# ln -s /usr/local/mysql/lib/* /usr/lib
2)安装NDOUtils
[root@node3 /]#cd /usr/src/ndoutils-1.4b9/
[root@node3 src]# ./configure –prefix=/usr/local/nagios –enable-mysql –disable-pgsql LDFLAGS=-L/usr/local/mysql/lib/mysql –with-mysql-lib=/usr/local/mysql/lib/mysql –with-mysql=/usr/local/mysql
[root@node3 src]#make
3)在编译没有出错后,复制相应的配置文件与相关的执行文件,他们的主要作用就是做相关的配置与让nagios可以正确的调用。
[root@node3 src]# cd /usr/src/ndoutils-1.4b9/src/
[root@node3 src]# cp ndo2db-3x ndo2db-2x file2sock log2ndo /usr/local/nagios/bin/
[root@node3 config]# cp ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
[root@node3 config]# cp ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
以上复制的文档中前两项是版本相关的,即假如您的nagios主版本号是2系列,则需要拷贝名为ndomod-2x.o和ndo2db-2x的两个文档。后两项是通用文档,随便复制过去就OK了。
4)为NDOUtils创建数据库
[root@node3 bin]# mysql5
mysql> create database ndodb;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on ndodb.* to ‘ndouser’@’localhost’ identified by ‘ndouser’;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on ndodb.* to ‘ndouser’@’%’ identified by ‘ndouser’;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
下面两条命令用来生成ndoutils所需要的数据库表等,这些表默认以“nagios_”为前缀;install脚本命 令必须在db子目录内执行:# cd db# ./installdb -u ndouser -p 123456 -h localhost -d ndodb其中各选项的意义如下:-u用来指定导入时所用的mysql用户帐号-p表示前面mysql用户的密码-h表示mysql服务器地址,假如是 localhost,则能够省略-d表示目标数据库
以下关键的一句就是创建数据库的表信息,-u为访问数据库的用户名
5)建立数据库表信息,注意一定要进行编译软件的目录下的db目录里执行以下命令。
[root@node3 ndoutils-1.4b9]# cd db
[root@node3 db]# ./installdb -u ndouser -p ndouser -h localhost -d ndodb
以上信息:
-u 访问ndodb数据库的用户名
-p 访问ndodb数据库的密码
-h 写入数据库的地址,因为现在我操作的是node3.example.com,因此,是在本地建立数据库localhost
-d 写入的数据库名称
4.配置ndo2db.cfg文件:
[root@node3 etc]# vim /usr/local/nagios/etc/ndo2db.cfg
lock_file=/usr/local/nagios/var/ndo2db.lock
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=tcp
socket_name=/usr/local/nagios/var/ndo.sock
tcp_port=5668
use_ssl=0
db_servertype=mysql
db_host=localhost
db_port=3306
db_name=ndodb
db_prefix=nagios_
db_user=ndouser
db_pass=ndouser
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
max_externalcommands_age=44640
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000
5.配置ndomod.cfg文件
[root@node3 etc]# vim /usr/local/nagios/etc/ndomod.cfg
instance_name=node3
output_type=tcpsocket
output=127.0.0.1
tcp_port=5668
use_ssl=0
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2
6.配置nagios的配置文件
[root@node3 etc]# vim /usr/local/nagios/etc/nagios.cfg
添加以下两句,第二句如果没有才加上去,默认是有的。
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg 大概在251行。
event_broker_options=-1 大概在224行
7. 启动ndo2db守护进程
[root@node3 etc]# /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
执行完以上这条命令,如果没有报错,就看看nagios.log的日志,如果出现以下提示:
nagios: ndomod: Could not open data sink! I’ll keep trying, but some output may get lost…
解决方法就是:
查看/usr/local/nagios/etc/ndo2db.cfg文件里的ndo2db_user=nagios ndo2db_group=nagios db_user=ndouser
db_pass=ndouser 这几项是否正确配置了,ndo2db_user就是你运行nagios的用户名;ndo2db_group是运行nagios的组,db_user表示的是你授权访问ndodb数据库的用户名,db_pass访问数据的密码。
如果在加载守护进程出现:
Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied : Permission denied
解决方法是:确认你在/usr/local/nagios/etc/ndo2db.cfg里ndo2db_user与ndo2db_group这两项的填写的用户是否对目录/usr/local/nagios/var/有写入的权限。
8.启动nagios
[root@node3 etc]# /etc/init.d/nagios start
以上全是在node3.example.com的电脑上做的操作,也就是我们将要将数据存入数据库所在的那台机。下面进行分布式的另一台电脑node2.example.com上操作,可以理解为nagios的客户端。
9.同样是安装DBI和DBD-mysql,由于前面已经安装过,可以照着上面一台电脑上安装就可以了。
10.关联mysql头文件和库
[root@node2 mysql]# ln -s /usr/local/mysql/include/* /usr/include/
[root@node2 mysql]# ln -s /usr/local/mysql/lib/* /usr/lib
11.安装NDOUtils
[root@node2 /]#cd /usr/src/ndoutils-1.4b9/
[root@node2 src]# ./configure –prefix=/usr/local/nagios –enable-mysql –disable-pgsql LDFLAGS=-L/usr/local/mysql/lib/mysql –with-mysql-lib=/usr/local/mysql/lib/mysql –with-mysql=/usr/local/mysql
[root@node2 src]#make
12.在编译没有出错后,复制相应的配置文件与相关的执行文件,他们的主要作用就是做相关的配置与让nagios可以正确的调用。
[root@node2 src]# cd /usr/src/ndoutils-1.4b9/src/
[root@node2 src]# cp ndo2db-3x ndo2db-2x file2sock log2ndo /usr/local/nagios/bin/
[root@node2 config]# cp ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
[root@node2 config]# cp ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
以上复制的文档中前两项是版本相关的,即假如您的nagios主版本号是2系列,则需要拷贝名为ndomod-2x.o和ndo2db-2x的两个文档。后两项是通用文档,随便复制过去就OK了。
13.配置node2.example.com上的ndo2db.cfg
[root@node2 etc]# vim /usr/local/nagios/etc/ndo2db.cfg
lock_file=/usr/local/nagios/var/ndo2db.lock
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=tcp
socket_name=/usr/local/nagios/var/ndo.sock
tcp_port=5668
use_ssl=0
db_servertype=mysql
db_host=192.168.145.130
db_port=3306
db_name=ndodb
db_prefix=nagios_
db_user=ndouser
db_pass=ndouser
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
max_externalcommands_age=44640
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000
14.配置/usr/local/nagios/etc/ndomod.cfg文件
[root@node2 etc]# vim /usr/local/nagios/etc/ndomod.cfg
instance_name=node2
output_type=tcpsocket
output=127.0.0.1
tcp_port=5668
use_ssl=0
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2
15.编辑nagios配置文件
[root@node2 etc]# vim /usr/local/nagios/etc/nagios.cfg
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg
event_broker_options=-1
16.启动守护进程,重启nagios。
[root@node2 etc]# /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
[root@node2 etc]#/etc/init.d/nagios restart
至此已经全部配置完成,下面确认我们已经安装成功,回到node3.example.com的机上,进入mysql看看我们创建的数据表里是否有两台机的数据。
[root@node3 etc]# mysql5
mysql> use ndodb;
mysql> select host_id,instance_id,display_name,address from nagios_hosts;
+———+————-+—————-+—————–+
| host_id | instance_id | display_name | address |
+———+————-+—————-+—————–+
| 10 | 1 | winserver | 192.168.1.2 |
| 9 | 1 | windows-server | 192.168.145.1 |
| 8 | 1 | localhost | 127.0.0.1 |
| 7 | 1 | linux-server2 | 192.168.145.128 |
| 6 | 1 | linux-server1 | 192.168.145.130 |
| 11 | 2 | linux-server1 | 192.168.145.130 |
| 12 | 2 | linux-server2 | 192.168.145.128 |
| 13 | 2 | localhost | 127.0.0.1 |
| 14 | 2 | windows-server | 192.168.145.1 |
| 15 | 2 | winserver | 192.168.1.2 |
+———+————-+—————-+—————–+
10 rows in set (0.00 sec)
从以上可以看到instance id列可以看到1和2,这说明我们两台机的信息已经被写到mysql数据库中,大功告成。
五、实验总结
通过以上的实验,我在实验过程中遇到很多问题,主要是安装ndoutils的时候,郁闷得很,一会儿配置过了,编译不,编译过了,配置不过,其根本原因就是我们的头文件关联,只要用关联头文件那一步做了就很少出问题,另外在配置的过程中,一定要加mysql的选项,我上面都写上了。
其次说明一点,我的系统是RedHat5.4,nagios是3.2版本,mysql是7.0.6的集群版,也可以用5.1的版本。其他的都写上的相应版本。
以上在我的配置中OK,如果有什么错误,请读者指出,多谢!