nagios详细部署文档
 
一、安装nagios软件
所需软件如下所示:
nagios-3.2.3.tar.gz
nagios-plugins-1.4.15.tar.gz
nrpe-2.8.tar.gz
httpd-2.2.17.tar.gz
php-5.3.6.tar.gz
1.1 安装nagios主程序
useradd nagios
mkdir /opt/nagios
chown nagios.nagios /opt/nagios
 
解压缩
tar -zxvf nagios-3.2.3.tar.gz
cd nagios-3.2.3
编译,指定安装目录为/opt/nagios
./configure --prefix=/opt/nagios
make all
make install
make install-init
make install-commandmode
make install-config
 
 
1.2 安装nagios插件
解压缩
tar -zxvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
编译,指定路径为之前nagios的安装路径
./configure --prefix=/opt/nagios/
make
安装
make install
ls /opt/nagios/libexec/
会显示安装的插件文件,即所有的插件都安装在libexec这个目录下
 
1.3 安装apache
tar xzvf httpd-2.2.17.tar.gz
cd httpd-2.2.17
./configure –prefix=/opt/apache
make
make install
 
修改apache配置:
vim /opt/apache/conf/httpd.conf
将apache的运行用户设置为nagios
从httpd.conf中过滤出当前的apache运行用户

grep ^User /usr/local/apache2/conf/httpd.conf

User nagios
Group nagios
将apache的主页设置为index.php
<IfModule dir_module>

    DirectoryIndex index.php

</IfModule>
 
增加nagios的目录,并且访问此目录需要进行身份验证
在配置文件最后增加如下内容:
#setting for nagios
ScriptAlias /nagios/cgi-bin /opt/nagios/sbin
<Directory "/opt/nagios/sbin">

    Options ExecCGI

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthType Basic

AuthUserFile /opt/nagios/etc/htpasswd
//用于此目录访问身份验证的文件

    Require valid-user

</Directory>
 
Alias /nagios /opt/nagios/share
<Directory "/opt/nagios/share">

    Options None

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthType Basic

AuthUserFile /opt/nagios/etc/htpasswd
//用于此目录访问身份验证的文件

    Require valid-user

</Directory>
修改完毕后重启apache
apachectl restart
 
增加验证用户
也就是通过web访问nagios的时候,必须要用这个用户登陆.在这里我们增加用户test:密码为123456

/opt/apache/bin/htpasswd -mbc /opt/nagios/etc/htpasswd test 123456

查看认证文件的内容
less /opt/nagios/etc/htpasswd
test:OmWGEsBnoGpIc    前半部分是用户名test,后面是加密后的密码
 
 
1.4 安装php5并与apache整合
tar xzvf php-5.3.6.tar.gz
cd php-5.3.6
./configure –prefix=/opt/php --with-apxs2=/opt/apache/bin/apxs
 
安装问题:apxs:Error: Command failed with rc=65536
如出现上述问题请执行:cp /opt/apache/build/libtool /opt/tools/php-5.3.6/
该错误原因为php自带的libtool版本较低,make时有问题
make
make install
 
修改apache配置
LoadModule php5_module modules/libphp5.so \\这行在配置文件中如已存在,则不必添加
AddType application/x-httpd-php .php .php5      \\在配置文件最后添加
修改完毕后重启apache
apachectl restart
 
到这里nagios的安装也就基本完成了,你可以通过web来访问了.

[url]http://10.0.2.216/nagios[/url] 会弹出对话框要求输入用户名密码,输入test,密码12345,就可以进入nagios的主页面了。但是可以发现什么也点不开,因为nagios还没启动呢!下面的工作就是修改配置文件,增加要监控的主机和服务。

 
1.5 nagios典型配置
1.5.1 预备知识
Nagios自己定义了一套规则用于配置文件,其中最重要的概念就是”对象”----object.在Nagios里面定义了一些基本的对象,一般用到的有:
联系人
contact
出了问题像谁报告?一般当然是系统管理员了
监控时间段
timeperiod
7X24小时不间断还是周一至周五,或是自定义的其他时间段
被监控主机
host
所需要监控的服务器,当然可以是监控机自己
监控命令
command
nagios发出的哪个指令来执行某个监控,这也是自己定义的
被监控的服务
service
例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等
另外,多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组,多个服务还能定义成一个服务组
我们定义一个被监控的服务,当然就要指定被监控的主机,需要监控的时间段,要用哪个命令来完成这个监控操作,出了问题向哪个联系人报告
所有这些对象绝对多数都是需要我们手动定义的,这就是nagios的安装显得复杂的地方.其实了解了原理,做一遍之后余下的工作就是复制粘贴了.下面就开始动手.
 
1.5.2 修改nagios配置文件
修改nagios的主配置文件nagios.cfg
cd /opt/nagios/etc
vi nagios.cfg
注释行#cfg_file=/opt/nagios/etc/objects/localhost.cfg
然后把下面几行的配置文件加以修改: 

cfg_file=/usr/local/nagios/etc /objects /contactgroups.cfg //联系组配置文件路径

cfg_file=/usr/local/nagios/etc /objects /contacts.cfg       //联系人配置文件路径
cfg_file=/usr/local/nagios/etc /objects /hostgroups.cfg     //主机组配置文件路径
cfg_file=/usr/local/nagios/etc /objects /hosts.cfg          //主机配置文件路径
cfg_file=/usr/local/nagios/etc /objects /services.cfg       //服务配置文件路径
cfg_file=/usr/local/nagios/etc /objects /timeperiods.cfg    //监视时段配置文件路径
注:有些文件不存在,手动创建即可

将check_external_commands=0改为check_external_commands=1

\\这行的作用是允许在web界面下执行重启nagios、停止主机/服务检查等操作
将command_check_interval的值从默认的1改成command_check_interval=10s
\\根据自己的情况定这个命令检查时间间隔,不要太长也不要太短
 
修改CGI脚本控制文件cgi.cfg
第二个要修改的配置文件cgi.cfg,它的作用是控制相关cgi脚本。先确保use_authentication=1。曾看过不少的文章,都是建议把use_authentication的值设置成”0”来取消验证,这是一个十分糟糕的想法。接下来修改default_user_name=test ,再后面的修改在下表列出:

 authorized_for_system_information=nagiosadmin,test

authorized_for_configuration_information=nagiosadmin,test
authorized_for_system_commands=test //多个用户之间用逗号隔开
authorized_for_all_services=nagiosadmin,test
authorized_for_all_hosts=nagiosadmin,test
authorized_for_all_service_commands=nagiosadmin,test
authorized_for_all_host_commands=nagiosadmin,test

那么上述用户名打那里来的呢?是执行命令 /opt/apache/bin/htpasswd -mbc /opt/nagios/etc/htpasswd test 所生成的,这个要注意,不能随便加没有存在的验证用户,为了安全起见,不要添加过多的验证用户。

 
定义监控时间段,创建配置文件timeperiods.cfg
vi timeperiods.cfg

define timeperiod{

        timeperiod_name         24x7   //时间段的名称,这个地方不要有空格

        alias                   24 Hours A Day,7Days A Week

        sunday                  00:00-24:00
        monday                  00:00-24:00
        tuesday                 00:00-24:00
        wednesday               00:00-24:00
        thursday                00:00-24:00
        friday                  00:00-24:00
        saturday                00:00-24:00
        }
定义了一个监控时间段,它的名称是24x7,监控的时间是每天全天24小时
 
定义联系人,创建配置文件contacts.cfg
vi contacts.cfg
define contact{
        contact_name                    test  //联系人的名称,这个地方不要有空格
        alias                           sys admin
        service_notification_period        24x7
        host_notification_period          24x7
        service_notification_options       w,u,c,r
        host_notification_options         d,u,r
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                          yahoon@test.com
        pager                          1338757xxxx
        address1                       xxxxx.xyyy@icq.com
        address2                       555-555-5555
        }
创建了一个名为test的联系人,下面列出其中重要的几个选项做说明
service_notification_period     24x7
服务出了状况通知的时间段,这个时间段就是上面在timeperiods.cfg中定义的.
host_notification_period        24x7
主机出了状况通知的时间段, 这个时间段就是上面在timeperiods.cfg中定义的
service_notification_options    w,u,c,r
当服务出现w—报警(warning),u—未知(unkown),c—严重(critical),或者r—从异常情况恢复正常,在这四种情况下通知联系人.
host_notification_options       d,u,r
当主机出现d­­­­—当机(down),u—返回不可达(unreachable),r—从异常情况恢复正常,在这3种情况下通知联系人
service_notification_commands   notify-by-email
服务出问题通知采用的命令notify-by-email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件.至于commands.cfg之后将专门介绍
host_notification_commands      host-notify-by-email
同上,主机出问题时采用的也是发邮件的方式通知联系人
email                           yahoon@test.com
很明显,联系的人email地址
pager                           1338757xxxx
联系人的手机,如果支持短信的通知的话,这个就很有用了.
alias是联系人别名,address是地址 意义不大.
按照上面的方式简单的复制修改就可以创建多个联系人了.
 
下面就可以将多个联系人组成一个联系人组,创建文件contactgroups.cfg
vi contactgroups.cfg
define contactgroup{

        contactgroup_name               sagroup  

//联系人组的名称,同样不能空格

        alias                   System Administrators        //别名

        members                 test 

//组的成员,来自于上面定义的contacts.cfg,如果有多个联系人则以逗号相隔

        }

 
定义被监控主机,创建文件hosts.cfg
[root@localhost etc]# vi hosts.cfg
define host{

        host_name                       nagios-server

//被监控主机的名称,最好别带空格

        alias                           nagios server

        //别名

        address                         10.0.2.216

        //被监控主机的IP地址,我现在暂时先填本机的IP

        check_command                   check-host-alive

        //监控的命令check-host-alive,这个命令来自commands.cfg,用来监控主机是否存活

        max_check_attempts              5

        //检查失败后重试的次数

        check_period                    24x7

        //检查的时间段24x7,同样来自于我们之前在timeperiods.cfg中定义的

contact_groups                  sagroup

        //联系人组,上面在contactgroups.cfg中定义的sagroup

notification_interval           10

        //提醒的间隔,每隔10秒提醒一次

notification_period             24x7

        //提醒的周期, 24x7,同样来自于我们之前在timeperiods.cfg中定义的

notification_options            d,u,r
//指定什么情况下提醒,具体含义见之前contacts.cfg部分的介绍

        }

通过简单的复制修改就可以定义多个主机了
 
与联系人可以组成联系人组一样,多个主机也可以组成主机组.创建文件hostgrops.cfg
vi hostgroups.cfg
define hostgroup{

        hostgroup_name          sa-servers //主机组名称

        alias                   sa Servers //别名

        members                 nagios-server

//组的成员主机,多个主机以逗号相隔,必须是上面hosts.cfg中定义的

        }

 
下面是最关键的了,用nagios主要是监控一台主机的各种信息,包括本机资源,对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令.
例如我们现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人?
 
定义监控的项目,也叫服务,创建services.cfg
vi services.cfg

#service definition

define service{
        host_name               nagios-server
        //被监控的主机,hosts.cfg中定义的
        service_description     check-host-alive
        //这个监控项目的描述(也可以说是这个项目的名称),可以空格,我们这里定义的是监控这个主机是不是存活
        check_command           check-host-alive
        //所用的命令,是commands.cfg中定义的
        max_check_attempts      5
        normal_check_interval   3
        retry_check_interval    2
        check_period            24x7
        //监控的时间段,是timeperiods.cfg中定义的
        notification_interval   10
        notification_period     24x7

        //通知的时间段, ,是timeperiods.cfg中定义的

        notification_options    w,u,c,r
        //在监控的结果是wucr时通知联系人,具体含义看前文.
        contact_groups          sagroup
        //联系人组,是contactgroups.cfg中定义的
        }
可以看到基本上所有的成员都是已经定义的.同样的将上面的内容复制修改,就可以加上另外两个监控项目:分别监控yahoon和dbpi是否存活
这样整个的配置过程就结束了.虽然功能很简单,但是已经为以后扩展打下了良好的基础.可以放心的告诉大家,以后的工作基本都是复制粘贴啦!!!
 
在运行nagios之前首先做测试
/opt/nagios/bin/nagios -v /opt/nagios/etc/nagios.cfg
看到下面这些信息就说明没问题了
Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

如果有问题的话就可以按照输出信息来排查,该输出信息非常详细,如果出错请仔细查看该信息
 
启动nagios
service nagios start
 

登陆[url]http://10.0.2.216 /nagios/[/url]就可以查看上面配置的监控内容了:

点左边的Hosts
 
再点Services
 
二、监控远程被控机:

要实现资源和服务两个方面的监控,需要配置服务器端(nagios server)及被监控端(NRPE-nagios remote plugin executor).为了能顺利地、有条理的部署nagios 监控平台,一个好的工作风格是在nagios server 自身实现服务和资源的监控,然后再在其他监控端部署nrpe,从nagios server 端用check_nrpe 测试通过后,再在nagios server 配置文件中逐一增加监控项目。当然如果只是监控服务而不监控主机资源,则被监控端不做任何nrpe 的安装。为了方便初学者更容易上手和成功,我们就从简单的步骤开始。

 
2.1 在被监控机器安装nrpe

1)增加用户
useradd nagios
passwd nagios
2)
安装nagios 插件
tar zvxf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --prefix=/opt/nagios
make
make install
3
)修改目录权限
chown -R nagios:nagios /opt/nagios
4)
安装nrpe
tar zxvf nrpe-2.8.tar.gz
cd nrpe-2.8
./configure –prefix=/opt/nagios
make all
(1)
安装check_nrpe 这个插件
make install-plugin
(2)
安装deamon
make install-daemon
(3)
安装配置文件
make install-daemon-config
(4)
编辑nrpe配置文件
vim /opt/nagios/etc/nrpe.cfg
(更改如下)
allowed_hosts=127.0.0.1,192.168.10.8
默认为allowed_hosts=127.0.0.1
5)
启动nrpe
/opt/nagios/bin/nrpe -c /opt/nagios/etc/nrpe.cfg -d
6)
查看NRPE 是否已经启动
netstat -nltp |grep nrpe
tcp 0 0 0.0.0.0:5666 0.0.0.0:*
LISTEN 5163/nrpe
7)
测试NRPE 是否则正常工作
之前安装了check_nrpe 这个插件用于测试,现在就是用的时候.执行
/opt/nagios/libexec/check_nrpe -H localhost
NRPE v2.8
看到已经正确返回了NRPE 的版本信息,说明一切正常

 
2.2 监控机监控被监控机

之前已经将nagios 运行起来了,现在要做的事情是: 安装check_nrpe 插件
在commands.cfg 中创建check_nrpe 的命令定义,因为只有commands.cfg
中定义过的命令才能在services.cfg 中使用创建对被监控主机的监控项目
1)
安装check_nrpe 插件
# tar -zxvf nrpe-2.8.1.tar.gz
# cd nrpe-2.8.1
# ./configure
# make all
# make install-plugin
只运行这一步就行了,因为只需要check_nrpe 插件
2)
在apache 刚装好了nrpe,现在我们测试一下监控机使用
check_nrpe
与被监控机运行的nrpe daemon 之间的通信.
# /opt/nagios/libexec/check_nrpe -H 10.0.2.234
NRPE v2.8
看到已经正确返回了NRPE 的版本信息,说明一切正常.
3)
在commands.cfg 中增加对check_nrpe 的定义
# vim /opt/nagios/etc/objects/commands.cfg
在最后面增加如下内容
####################################################################
# 'check_nrpe ' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
意义如下
command_name check_nrpe
定义命令名称为check_nrpe,在services.cfg 中要使用这个名称.
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
这是定义实际运行的插件程序.这个命令行的书写要完全按照check_nrpe 这个命令的用法.不知道用法的就用check_nrpe –h 查看-c 后面带的$ARG1$参数是传给nrpe daemon 执行的检测命令,之前说过了它必须是被监控机nrpe.cfg中所定义的那5 条命令中的其中一条.在services.cfg 中使用check_nrpe 的时候要用!带上这个参数
查看被控机NRPE的监控命令

cd /opt/nagios/etc
vi nrpe.cfg
找到下面这段话

# The following examples use hardcoded command arguments...

command[check_users]=/opt/nagios/libexec/check_users -w 5 -c 10

command[check_load]=/opt/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

command[check_hda1]=/opt/nagios/libexec/check_disk -w 20 -c 10 -p /dev/hda1

command[check_zombie_procs]=/opt/nagios/libexec/check_procs -w 5 -c 10 -s Z

command[check_total_procs]=/opt/nagios/libexec/check_procs -w 150 -c 200

红色部分是命令名,也就是check_nrpe 的-c参数可以接的内容,等号=后面是实际执行的插件程序(这与commands.cfg中定义命令的形式十分相似,只不过是写在了一行).也就是说check_users就是等号后面/usr/local/nagios/libexec/check_users -w 5 -c 10的简称.

###########################################
举例:
下面就可以在services.cfg 中定义对apache 主机磁盘容量的监控
define service{
host_name apache
被监控的主机名,这里注意必须是linux 且运行着nrpe,而且必须是hosts.cfg 中定义的
service_description check-disk
监控项目的名称
check_command check_nrpe!check_disk
监控命令是check_nrpe,是在commands.cfg 中定义的,带的参数是check_disk,是
在nrpe.cfg 中定义的
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
像这样将其余几个监控项目加进来.