一、nagios简介
       nagios是一款用于系统和网络监控的应用程序,它可以在你的设定的条件下对主机和服务进行监控,在状态变差和变好的时候可以给管理员出告警信息。
       nagios所需要的运行条件是机器必须可以运行linux(或是unix变种)并且有c语言编译器。你必须正确地配置tcp/ip协议栈以使大多数的服务检测可以通过网络得以进行。如果需要正确地配置nagios里的cgis程序,必须安装以下这些软件:
web服务(最好是apache)
thomas boutell制作的gd库版本应是1.6.3或更高(在cgis程序模块statusmap和trends这两个模块里需要这个库)
还有一个就是ssl这一个工具,在安装nrpe这一个包时需要,因为在监控其他主机的时候是通过ssl连接来接收数据的;
网络环境:
主机                     IP                          OS                                  角色
nagios                  192.168.0.10               rhel5.1                           监控服务器
win2003                192.168.0.100             windows server 2003         被监控主机
linux                   192.168.0.102            rhel5.1                            被监控主机
准备软件:
apache2.2.14   //下载地址http://httpd.apache.org/download.cgi
nagios3.2.0
nagios plugins1.4.14
nrpe2.12
上面三个都可以在这个网站上找到http://www.nagios.org/download
nsclient++-0.3.6-win32.msi    //如果要监控windows的主机,还要下载nsclient这一个客户端工具,下载地址:
http://sourceforge.net/projects/nscplus/
确认邮件是否能正常发送,我用的是sendmail,确认服务已经启动,下面发一封测试邮件到指定邮箱:
#mail –s “this is test mail” kyhack@vimp.qq.com
this is nagios test mail
ok
按ctrl + d 结束输入。
检查一下自己的邮箱,看到邮件之后就可以继续以下的环节了。
把所有的工具都下载到src目录下面:
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
wget http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz
二、开始安装
1、安装apache
tar  xvf  httpd-2.2.14.tar.gz -C /usr/src
cd  /usr/src/httpd-2.2.14
./configure  --prefix=/usr/local/apache2
make
make install
/usr/local/apache/bin/apachectl start     //由于是没有改动的配置文件,可以直接启动
netstat –an |grep 80      //检查80端口是否已经开启了
或者是在别的机子上输入服务器的ip地址,当看到“it works!”时表明apache已经安装成功了
2、安装nagios
先添加一个nagios的账号
useradd nagios –s /sbin/nologin   //有的文章说要启用账号,其实不用也可以,因为这个账号不需要登录
tar  xvf  nagios-3.2.0.tar.gz -C /usr/src
cd  /usr/src/nagios-3.2.0
./condfigure  —prefix=/usr/local/nagios  —with-nagios-user=nagios —with-nagios-group=nagios —with-gd-lib=/usr/lib —with-gd-inc=/usr/include  注:在这之前请先安装GD
make all
make install
make install‐init   //在/etc/rc.d/init.d安装启动脚本
make install‐config  //安装示例配置文件,安装的路径是/usr/local/nagios/etc
make install‐commandmode   //配置目录权限
安装完成nagios后就可以在/usr/local/nagios下面看到这几个目录:
bin                 存放nagios执行程序,nagios文件为主程序
etc                 配置文件存放目录
libexec           存放一些脚本程序
sbin               cgi文件所在目录,也就是执行外部命令所需文件所在的目录
share              网页文件存放位置
var                 日志文件、spid 等文件所在的目录
3、安装nagios插件
tar xvf  nagios-plugins-1.4.14.tar.gz -C /usr/src
cd /usr/src/nagios-plugins-1.4.14
./configure  --prefix=/usr/local/nagios    //注意了,是放在/usr/local/nagios 里,别搞错了
make
make install
chown –R nagios:nagios /usr/local/nagios    //改一下文件的属组
#这样的话那些插件都会扔到nagios/libexec下面去
三、修改配置文件
1、修改apache的配置文件,我只把改的地方贴出来
vim  /usr/local/apache2/conf/httpd.conf
User nagios        //把apache运行用户改成 nagios
Group nagios                //把apache运行组改成 naios
#把下面的内容增加到文件的最后:
Scriptalias /nagios/cgi-bin /usr/local/nagios/sbin
        <directory "/usr/local/nagios/sbin">
        Authtype basic
        Options execcgi
        Allowoverride none
        Order allow,deny
        Allow from all
        Authname "nagios access"
        Authuserfile /usr/local/nagios/etc/htpasswd  //用于此目录访问身份验证的文件
        Require valid-user
        </directory>
    Alias /nagios /usr/local/nagios/share
        <directory "/usr/local/nagios/share">
        Authtype basic
        Options none
        Allowoverride none
        Order allow,deny
        Allow from all
        Authname "nagios access"
        Authuserfile /usr/local/nagios/etc/htpasswd   //用于此目录访问身份验证的文件
        Require valid-user
        </directory>
最后启动apache服务器配置生效。
2、修改cgi脚本控制文件cgi.cfg
vim  /usr/local/nagios/etc/cgi.cfg
use_authentication=1     //打开验证
default_user_name=test
authorized_for_system_information=nagiosadmin,test
authorized_for_configuration_information=nagiosadmin,test
authorized_for_system_commands=nagiosadmin,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
//这里添加的用户”test”可以通过浏览器对nagios服务的关闭、重启等操作,在这里为了安全也可以把nagiosadmin这一个用户给删掉,如果有多个用户用逗号隔开,如:nagiosadmin,test
/usr/local/apache2/bin/htpasswd ‐c /usr/local/nagios/etc/htpasswd test
new password: 输入你的密码
re‐type new password: 再次确认
adding password for user test     //这里给前面添加的用户设置密码
测试一下,输入你的http://你的服务器IP/nagios之后会弹出以下界面:
 在这里输入你刚刚设置的用户名密码,就可以登录你的监控平台了,如下:
 由于我们目前没有监控任何的主机,所以还看不到什么有用的东西,接下来继续配置其它的配置文件;
3、配置nagios主配置文件
在这里定义后面的配置文件的保存路径,下面只贴修改部分
vim /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
#cfg_file=/usr/local/nagios/etc/objects/contacts.cfg    //这一行注释掉,为了方便管理,我们重新写一个联系人的配置文件
cfg_file=/usr/local/nagios/etc/contacts.cfg      //指定联系人配置文件路径
cfg_file=/usr/local/nagios/etc/contactgroups.cfg   //指定联系人组配置文件路径
#cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg   //注释掉,用自己写的监视时段配置文件
cfg_file=/usr/local/nagios/etc/timeperiods.cfg         //指定监视时段配置文件路径
cfg_file=/usr/local/nagios/etc/objects/templates.cfg     //指定临时配置文件路径
cfg_file=/usr/local/nagios/etc/services.cfg           //服务配置文件路径
#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg   //注释掉,
cfg_file=/usr/local/nagios/etc/hosts.cfg               //主机配置文件路径
cfg_file=/usr/local/nagios/etc/hostgroups.cfg              //主机组配置文件路径
check_external_commands=1  //在web界面下重启nagios,停止主机/服务检查操作,默认关闭;
command_check_interval=10s      //定义这个命令检查时间间隔,默认是1秒;
4、配置timeperiods.cfg文件
这是个服务器监控时间段的配置文件,一般都是全天24小时,名称是24x7;
vim /usr/local/nagios/etc/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
        }
在这里要注意时间段名称那里的后面不能有空格出现,
5、创建联系人配置文件,contacts.cfg
vim /usr/local/nagios/etc/contacts.cfg
 define contact {
     contact_name         kytest
     alias                system administrator
     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-service-by-email
     host_notification_commands     notify-host-by-email
     email                          kyhack@vimp.qq.com
    # pager                         13800138000
     }
创建一个名为kytest的联系人,下面列出其中几个重要选项的说明
#服务出了状况通知的时间段,这个时间段是前面timeperiods.cfg里面定义的。
service_notification_period    24x7
#主机出现状况时通知的时间段,这个时间段是前面timeperiods.cfg里面定义的。
host_notification_period       24x7
       #当服务出现w—报警(warning),u—未知(unkown),c—严重(critical),r—从异常恢复到正常,在这四种情况下通知联系人
service_notification_options   w,u,c,r
#当主机出现d-当机(down),u—返回不可达(unreachable),r—从异常情况恢复正常,在这3种情况下通知联系人
host_notification_options       d,u,r
     #服务出问题通知采用的命令notify-service-by-email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件. 在nagios2.x的版本上可以不一样,可以自己到commands.cfg里看一下;在这里也可以设置发送短信的方式通知联系人,前提是你要配置有发送知道的脚本,还要到commands.cfg里面添加发送脚本所用到的命令;
service_notification_commands  notify-service-by-email
 #同上,主机出问题时采用的也是发邮件的方式通知联系人
host_notification_commands     notify-host-by-email
#指定联系的人email地址
email         kyhack@vimp.qq.com
#联系人的手机,前提是要支持短信通知,这里没有启用通过手机短信的方式发送警报
pager        13549238972
如果有多个联系人的话,可以通过复制来创建多个联系人;
6、创建联系人组配置文件,contactgroups.cfg ,把多个联系人加到一个组里面;
vim  /usr/local/nagios/etc/contactgroups.cfg
define contactgroup{
        contactgroup_name       sagroup
        alias                   system administrator group
        members                 kytest
        }
注意:members选项里面的联系人在contacts.cfg里面要有定义,多个联系人之间用逗号隔开;
7、创建hosts.cfg主机配置文件
vim  /usr/local/nagios/etc/hostgroups.cfg
define host{
host_name               nagios-server          //被监控主机的名称,后面不能带空格
        alias                   nagios server      //别名
        address                 192.168.0.10      //被监控主机的ip地址,这里是监控本机
        contact_groups          sagroup     //联系人组,是在前面contactgroups.cfgj里面定义的组       
check_command        check-host-alive    //检查主机是否存活,命令来自commadns.cfg文件
        max_check_attempts      5                   //检查失败后重试次数
        notification_interval   10                //提醒的间隔,每隔10秒提醒一次
        notification_period     24x7      //提醒的周期,24x7这个时间段来自timeperiods.cfg里的定义
        notification_options    d,u,r        //在什么时候提醒,详见contacts.cfg部分的介绍
        }
define host{
        host_name            windows    //此名称定义你要监控的那台机的主机名最好
        alias                   web server
        address                 192.168.0.100        //这是我的windows 2003的服务器,
        contact_groups          sagroup
        check_command           check-host-alive
        max_check_attempts      5
        notification_interval   10
        notification_period     24x7
        notification_options    d,u,r
        }
define host{
        host_name             linux
        alias                   web server
        address                 192.168.0.102                //被监控的linux服务器IP地址
        contact_groups          sagroup
        check_command           check-host-alive
        max_check_attempts      5
        notification_interval   10
        notification_period     24x7
        notification_options    d,u,r
        }
       在这里我定义了三台主机,只是作一个例子;如果你有更多的主机可以通过复制来添加主机,再修改一下相应的位置就可以了;
8、创建hostgroups.cfg文件
vim  /usr/local/nagios/etc/hostgroups.cfg
define hostgroup{
        hostgroup_name  sa-servers
        alias           sa servers
        members         nagios-server,win2003,linux
        }
这个跟联系人组配置差不多,要是有多台主机可以用逗号隔开;members里的主机成员必须也是要在hosts.cfg里面定义的,其实这个文件也可以不要;
ok,到这里就差可以说是完成了最基础的一部分了,下面将定义服务部分,前面已经定义好了联系人、被监控主机,但是还没有定义好要监控主机上的服务;在下面这部分就可以对主机上的各种信息进行监控,nagios监控的信息主要有:本地资源,对外的服务等;本地资源主要包括cpu,硬盘,swap,内存等;对外服务有web,fpt,smtp,pop3等;
9、定义监控的项目,也叫服务,创建services.cfg
vim  /usr/local/nagios/etc/services.cfg
#监控主机是否存活
define service{
        host_name               nagios-server
        service_description     check-host-alive
        check_command           check-host-alive
        max_check_attempts      5
        normal_check_interval   5
        retry_check_interval    2
        check_period            24x7
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        contact_groups          sagroup
        }
#监控主机的web服务
define service{
        host_name               nagios-server
        service_description     check_tcp 80
        check_period            24x7
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        contact_groups          sagroup
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command           check_tcp!80
        }
#监控主机的cpu负载情况
define service{
        host_name               nagios-server
        service_description     cpu load
        check_command           check_nrpe!check_load
        check_period            24x7
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        contact_groups          sagroup
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        }
#监控主机的进程数
define service{
        host_name               nagios-server
        service_description     total-procs
        check_command           check_nrpe!check_total_procs
        check_period            24x7
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        contact_groups          sagroup
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        }
说明:
host_name:必须是主机配置文件hosts.cfg中定义的主机。
check_command:在commands.cfg文件中定义或在nrpe.cfg里面定义的命令;
max_check_attempts: 最大重试次数,一般设置为4次左右;
normal_check_interval 和retry_check_interval检查间隔的单位是分钟。
notification_interval  通知间隔指探测到故障后,每隔多长时间发送一次报警信息,单位是分钟。
notification_options:通知选项跟联系人配置文件相同。
contact_groups:配置文件contactgroup.cfg定义的组名称。
注意:check_command选项后面跟的命令一定要在commands.cfg里有定义;
如果要监控其他的主机的信息,可以通过复制并修改想应的选项来进行添加;
通过复制添加下面这两台服务器的监控项目:
win2003和linux
四、安装nrpe
tar  xvf  nrpe-2.12.tar.gz -C /usr/src
cd  /usr/src/nrpe-2.12.
./configure  --prefix=/usr/local/nrpe
make
make install
#复制文件,因为在nrpe安装目录/usr/local/nrpe/libexec里只有cneck_nrpe这一个文件,而在nagios/libexec里却没有,还有一个就是nrpe.cfg文件里面默认定义的那几个命令后面的路径是放在/usr/local/nrpe/libexec的目录里面,也要把那几个文件复制过来,如果不复制过来的话必须要修改nrpe.cfg里面定义的命令的路径,免得在services.cfg里面定义check_command时提示找不到命令;现在把下面的文件复制过来:(如果在安装的时候,安装路径为/usr/local/nagios,则不用操作此步)。
   cp /usr/local/nrpe/libexec/check_nrpe  /usr/local/nagios/libexec
   cp /usr/local/nagios/libexec/check_disk  /usr/local/nrpe/libexec
   cp /usr/local/nagios/libexec/check_load  /usr/local/nrpe/libexec
   cp /usr/local/nagios/libexec/check_ping  /usr/local/nrpe/libexec
   cp /usr/local/nagios/libexec/check_procs  /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_users  /usr/local/nrpe/libexec
#修改nrpe配置文件,只把改过的地方写出来
vim  /usr/local/nrpe/etc/nrpe.cfg
server_address=192.168.0.10      //以单独的守护进程运行
allowed_hosts=127.0.0.1,192.168.0.10  //设置允许nagios监控服务器可以访问
command[check_users]=/usr/local/nrpe/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nrpe/libexec/check_load -w 15,10,5 -c 30,25,20
#command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 -p /dev/hda1   //注释掉
command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10              //添加这一行,监控整个磁盘利用率
command[check_zombie_procs]=/usr/local/nrpe/libexec/check_procs -w 5 -c 10 -s z
command[check_total_procs]=/usr/local/nrpe/libexec/check_procs -w 150 -c 200
command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000     //监控ip连接数
说明:
command[check_users]=/usr/local/nrpe/libexec/check_users –w 5 –c 10在默认情况下check_users的插件是放在/usr/local/nrpe/libexec/目录里面,而目录里面在默认情况下是没有这一个文件的,所以说要从/usr/local/nagios/libexec/目录下拷贝一个过来;或者说的它后面的它改成:  command[check_users]=/usr/local/nagios/libexec/check_users –w 5 –c 10 这样的话就可以了,要不然在引用check_users的时候会提示没有那命令;
ps:我这里为了方便,就是从/usr/local/nagios/libexec下把那几个文件拷贝过来;
在上面的nrpe.cfg配置文件里面,在中括号 “ [ ] “里面部分是命令名,也就是check_nrep –c 后面可以接的内容,等号=后面的就是实际执行的插件程序的路径;从上往下分别是检测登录用户数,cpu使用率,磁盘的容量,僵尸进程,总进程,连接数;
要是还要添加其它监控项目,不要忘记了在这里定义相应的命令;例:如果要监控主机的swap分区使用情况,当空闲空间小于20%时为警告状态,当空闲空间小于10%时为严重状态。需要在nrpe.cnf里面添加下面的命令:/usr/local/nagios/libexec/check_swap -w 20% -c 10% 如还有其它的,添加相就应的就可以了;关于命令用法可以通过:
/usr/local/nagios/libexec/check_swap –h这样的命令来查询;
command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000 ip连接数,ip_conn.sh脚本需要自己写,下面给出脚本的内容:
#!/bin/sh
#if [ $#-ne 2 ]
#then
# echo "usage:$0 -w num1 -c num2"
#exit 3
#fi
ip_conns=`netstat -an |grep tcp |grep est |wc -l`
         if [ $ip_conns -lt $1 ]
        then
        echo "ok -connectcounts is $ip_conns"
        exit 0
        fi
 
        if [ $ip_conns -gt $1 -a $ip_conns -lt $2 ]
        then
        echo "warning -connectcounts is $ip_conns"
        exit 1
        fi
 
        if [ $ip_conns -gt $2 ]
        then
        echo "critical -connectcounts is $ip_conns"
        exit 2
        fi
我在nrpe配置文件nrpe.cfg把脚本所需的两个参数写上了,因此这个脚本就不需判断两个参数输入值的情况。只要当前ip连接数大于8000,系统就发warning报警,超过10000,则发“critical”报警信息。把这个脚本放在目录/usr/local/nrpe/libexec下,并给于执行权限;
注:脚本来自田逸的《开源监控利器nagios》
修改/usr/local/nagios/etc/objects/commands.cfg,在最后添加以下内容:
########################################################################
# 'check_nrpe ' command definition
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }
添加check_nrpe的命令支持,要不是加的话,在”check_cmmmands   check_nrpe!check_nrpe”这样的情况下的时候,会提示没有check_nrpe这一个命令。
-------------------------------------------------------------------------------
五、     被监控主机设置
可参看此地址:http://yahoon.blog.51cto.com/13184/41893
nrpe的工作原理图:
        nrpe总共由两部分组成:
– check_nrpe 插件,位于在监控主机上
– nrpe daemon,运行在远程的linux主机上(通常就是被监控机)
按照上图,整个的监控过程如下:
当nagios需要监控某个远程linux主机的服务或者资源情况时
1.nagios会运行check_nrpe这个插件,告诉它要检查什么.
2.check_nrpe插件会连接到远程的nrpe daemon,所用的方式是ssl
3.nrpe daemon会运行相应的nagios插件来执行检查
4.nrpe daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:nrpe daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控.
1、linux 主机
       1)添加用户
       #  useradd  nagios  -s /sbin/nologin
       2) 安装nagios插件
tar xvf  nagios-plugins-1.4.14.tar.gz
cd nagios-plugins-1.4.14
./configure  --prefix=/usr/local/nagios
make
make install
修改目录权限:
chown –R  nagios:nagios  /usr/local/nagios
chown –R  nagios:nagios  /usr/local/nagios/libexec
2) 安装nrpe
tar  xvf  nrpe-2.12.tar.gz
cd  nrpe nrpe-2.12.
./configure  —prefix=/usr/local/nagios  或者
./configure --enable-ssl --with-ssl-lib=/usr/lib/(当然前提要有openssl) //也把它放到nagios这一个目录
make  all
make  install-plugin            //安装check_nrpe这个插件
make install-daemon             //安装deamon
make install-daemon-config    //安装配置文件
注意:安装nrpe时,要先安装SSL这一个工具,因为监控服务器与被监控主机之间通讯时是通过SSL的方式来进行的。
3)修改nrpe.cfg配置文件
allowed_hosts=127.0.0.1,192.168.0.10    //允许监控服务器访问,中间用逗号隔开;
server_address=192.168.0.10                  //以单独的守护进程运行
# 修改NRPE的监控命令,添加相应的命令;
# The following examples use hardcoded command arguments...
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
#command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_df]=/usr/local/nagios/libexec/check_disk -w 20 -c 10
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
command[check_tcp]=/usr/local/nagios/libexec/check_tcp -p 80
4)启动nrpe服务
# /usr/local/nagios/bin/nrpe –c /usr/local/nagios/etc/nrpe.cfg -d
5) 在本机测试一下nrpe.cfg里面定义的命令有没有错误
/usr/local/nagios/libexec/check_nrpe -H localhost
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_users
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_load
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_df
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_zombie_procs
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_total_procs
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_swap
/usr/local/nagios/libexec/check_nrpe -H localhost  –c  check_tcp
6)在监控服务器上修改/usr/local/nagios/etc/services.cfg文件,添加相对应的监控项目;
2、windows主机[客户端]
       如果被监控主机是windows系统的话,需要安装nsclient++-0.3.6-win32.msi   这一个客户端工具;下载地址:http://sourceforge.net/projects/nscplus/
       它的工作原理图如下: 
 可以看到它是通过监控服务器上的check_nt这一个插件来检查WINDOWS机器的服务,当监控服务器将监控请求发给NSClient后,通过NSClient客户端检查监控项目,所有的监控都是由NSClient来完成;
      双击安装,完成后进到安装目录,我的是安装在F:\Program Files\NSClient++,用记事本打开NSC.ini文件,修改如下:
在 [modules]部分的所在模块前面的注释“;”去掉,只保留CheckWMI.dll和RemoteConfiguration.dll这两个不用去掉注释;
在 [Settings] 部分找到”allowed_hosts”选项,将前面的 “;”注释去掉,并在后面加上监控服务器的IP,这里也可以写成一个子网,如:192.168.0.0/24的形式,表示所有来自这个子网的机器都可以访问。
修改后如下:allowed_hosts=127.0.0.1/32,192.168.0.10 ;在多个IP之间用逗号相隔。
在 [NSClient] 部分找到“port=12489”这一行,并把前面的注释去掉;这是NSClinet的默认监听端口。
打开CMD ,进入到NSClient的安装目录,如下:
F:\Program Files\NSClient++> dir
2009-10-10  20:54    <DIR>          .
2009-10-10  20:54    <DIR>          ..
2009-06-14  13:20           442,368 nsclient++.exe
2009-06-14  13:24           278,528 nstray.exe
2009-10-10  23:08            13,087 NSC.ini
2009-06-14  13:13            43,129 changelog.txt
2008-06-15  18:20             8,804 counters.defs
2008-06-15  18:20            18,351 license.txt
2009-10-10  20:54    <DIR>          modules
2009-10-10  20:54    <DIR>          scripts
2009-10-14  20:00            26,592 nsclient.log
               7 个文件        830,859 字节
               4 个目录  3,589,242,880 可用字节
//依次执行下面的命令:
F:\Program Files\NSClient++> nsclient++.exe  /install
e NSClient++.cpp(212) service installation failed: service already installed!
F:\Program Files\NSClient++> nsclient++.exe  /install SysTray   //注意大小写;
service SysTray installed...
l NSClient++.cpp(224) service installed!
F:\Program Files\NSClient++>nsclient++.exe /start    //启动服务
接下来在运行里面输入:services.msc 打开服务管理;
看到下图时就表明已经安装上了:
在NSClinet++上面点右键属性,打开服务,如下图:
 服务已经启动了
点登录,在登录登录身份下面勾选允许服务与桌面交互,如下图:
 到这里就已经在WINDOWS主机上安装好了,如果你有防火墙的话请打开TCP的12489端口,否则nagios检查此服务的时候会报socket 超时错误。
这样被监控的主机就搞定了,现在回到nagios-server 监控服务器上做下面三个步骤:
1)安装监控windows的插件(已经默认安装了check_nt)
2)定义命令
#'check_nt' command definition
define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
        }
//这一部分在3.20里面默认就已经有了,不用再添加;
3)定义要监控的项目
修改/usr/local/nagios/etc/services.cfg文件,增加windows 被监控主机的监控项目,
如下的配置示例:
define service {
  host_name windows
  service_description uptime
  check_command check_nt!UPTIME!-w 10 -c 20
  check_period 24x7
  max_check_attempts 4
  normal_check_interval 3
  retry_check_interval 2
  contact_groups sagroup
  notification_interval 10
  notification_period 24x7
  notification_options w,u,c,r
}
define service {
  host_name windows
  service_description cpuload
  check_command check_nt!CPULOAD!-l 5,20,50
  check_period 24x7
  max_check_attempts 4
  normal_check_interval 3
  retry_check_interval 2
  contact_groups sagroup
  notification_interval 10
 notification_period 24x7
  notification_options w,u,c,r
}
define service {
  host_name windows
  service_description memused
  check_command check_nt!MEMUSE!-w 80 -c 90
  check_period 24x7
  max_check_attempts 4
  normal_check_interval 3
  retry_check_interval 2
 contact_groups sagroup
  notification_interval 10
  notification_period 24x7
  notification_options w,u,c,r
}
关于check_nt的用法可以使用下面命令查看帮助:
# /usr/local/nagios/libexec/check_nt  -h
下面给出一些常用的参数:
1)监控windows服务器运行的时间
check_command           check_nt!UPTIME
2)监控Windows服务器的CPU负载,如果5分钟超过80%则是warning,如果5分钟超过90%则是critical
check_command           check_nt!CPULOAD!-l 5,80,90
3)监控Windows服务器的内存使用情况,如果超过了80%则是warning,如果超过90%则是critical.
check_command           check_nt!MEMUSE!-w 80 -c 90
4)监控Windows服务器C:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical
check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90
注:-l后面接的参数用来指定盘符
5)监控Windows服务器D:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical
check_command           check_nt!USEDDISKSPACE!-l d -w 80 -c 90
6)监控Windows服务器的W3SVC服务的状态,如果服务停止了,则是critical
check_command           check_nt!serviceSTATE!-d SHOWALL -l W3SVC
7)监控Windows服务器的Explorer.exe进程的状态,如果进程停止了,则是critical
check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
具体更多的配置直接使用check_nt -h进行查看。
六、启动nrpe服务并检查其配置
1、以独立守护进程启动nrpe服务
 /usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg –d
2、查看系统日志,如果正常启动可以看到以下输出:
[root@rhel nrpe]# tail /var/log/messages
oct 15 18:01:16 rhel nrpe[11791]: starting up daemon
oct 15 18:01:16 rhel nrpe[11791]: listening for connections on port 5666
oct 15 18:01:16 rhel nrpe[11791]: allowing connections from: 127.0.0.1,192.168.0.10
查看端口:
[root@rhel nrpe]# netstat -an |grep 5666
tcp        0      0 0.0.0.0:5666        0.0.0.0:*            listen
查看进程:
[root@rhel nrpe]# ps aux |grep nrpe |grep -v grep
nagios   11791  0.0  0.1   4868   928 ?   ss   18:01   0:00 nrpe -c /usr/local/nrpe/etc/nrpe.cfg –d
3、检查插件功能
1)检查nrpe的服务版本
 [root@rhel nrpe]# /usr/local/nrpe/libexec/check_nrpe -h 192.168.0.10
nrpe v2.12
2)检查nrpe.cnf里面定义的命令有没有错误,也就是检查主机资源:
[root@rhel nrpe]# /usr/local/nrpe/libexec/check_nrpe -h 192.168.0.10 -c check_df
disk ok - free space: / 5245 mb (60% inode=95%); /home 13329 mb (80% inode=99%); /var 843 mb (9% inode=99%); /boot 82 mb (88% inode=99%); /dev/shm 235 mb (100% inode=99%);| /=3495mb;9197;9207;0;9217 /home=3215mb;17426;17436;0;17446 /var=7897mb;9197;9207;0;9217 /boot=10mb;78;88;0;98 /dev/shm=0mb;215;225;0;235
[root@rhel nrpe]# /usr/local/nrpe/libexec/check_nrpe -h 192.168.0.10 -c check_load
ok - load average: 0.00, 0.00, 0.00|load1=0.000;15.000;30.000;0; load5=0.000;10.000;25.000;0; load15=0.000;5.000;20.000;0;
[root@rhel nrpe]# /usr/local/nrpe/libexec/check_nrpe -h 192.168.0.10 -c check_ips
ok -connectcounts is 4
在nrpe.cnf里面的其它的一些命令也可以测试一下;
七、启动nagios
首先检查一下配置文件有没有错误
[root@rhel nrpe]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
 nagios core 3.2.0
reading configuration data...
   read main config file okay...
……………略………………
   read object config files okay...
checking misc settings...
 
total warnings: 0
total errors:   0   此处错误为0,才可以正常启动,否则启动不了服务。
 
things look okay - no serious problems were detected during the pre-flight check
如果要错误的话可以根据提示把错误全部改正,像上面输出total warnings: 0 total errors: 0 都为0时,说明配置文件没有问题,下面就可以启动nagios了;
[root@rhel nrpe]#/usr/local/nagios/bin/nagios –d /usr/local/nagios/etc/nagios.cfg
正学启动之后,就可以通过浏览器输入:http://192.168.1.10/nagios  ,再输入前面设置的密码,登录进去后,点击左边current status下面的services就可以看到监控服务器所监控的主机项目了,如图下:
 到这里就是大功告成了!
总结几点:
1、在创建各种配置文件时,注意定义的名称那里不要留有空格;
2、关于插件的用法,可以通过去 –h 来查看,如: check_load –h ;
3、关于系统防火墙设置,我的一开始就是因为防火墙的原因而收不到邮件以及在监控windows主机时会超时的;在这里所用到的端口有UDP 137:138 、TCP的25、80、53、5666、12489,还有一个就是ICMP,这些都要用到;注意是双向,不要搞到给他从本机出去之后回不来(我的刚开始就是这样)。
服务器监控的一些策略
前段时间有人问我怎么用nagios监控linux内存使用情况,以及怎么设置报警阈值?linux运行时,是最大可能的利用内存,监控这个对象没有现实意义,明显属于无效的监控策略.另有一人说:“晚上没完没了的收到监控系统的发送的报警短信,受不了…”。不言而喻,这也是一个不好的监控策略,实际上监控已经失去了它的意义。所以要让监控平台更有效的发挥作用,好的策略是必须的。那么怎么才能算是好的策略,这里我结合我的实际情况,谈谈我的一些看法,希望对大家有所帮助。
策略一:监控对象选择
在一个规模较大的网络中,监控的对象可能包括服务器、防火墙、交换机、路由器等设备,以及运行在各对象上的服务。但是,我们没必要把所有的对象都放到这个监控系统中来。比如把某些测试系统放到监控中,就会产生如上那位老兄整个晚上收到报警短信的麻烦。因此,选择正确的监控对象是实施有效监控的前提,个人建议,只有那些重要级别高的,不能随便停止服务的对象――如在线交易系统、金融、证券以及提供关键业务的对象才是值得监控的对象。当然,服务器的使用者总希望你把它监控上,哪怕它不是那么重要。
策略二:故障报警方式选择
作为运维工程师,不可能一天24小时都坐在电脑旁边。对监控系统而言,一定要有合适的故障告警机制。nagios目前常用的告警机制有邮件、短信、msn、web页面显示等几种手段,这几种手段中,短信报警最佳。因为工作人员下班后,不在电脑旁没办法随时收邮件,这时短信却能告知服务器状态,通知我们发生故障了,而且在老板和用户发现这个故障以前。对于没有通道的机构来说,租用ISP提供的服务是比较稳妥的方式,其他如用移动飞信等方式都不怎么考谱,不适合关键性业务运营。另外让监控平台每天发一条提示短信给管理人员也是不错的选择,不管有没有故障都发,以便让我们知道短信接口是否正常。
策略三:故障报警时效和间隔的选择
由于网络通信等不可控因素,因此可能存在故障误报的情况。如果把报警发送设置成一次探测不成功就发送报警信息就不是个好策略。经验表明:探测3-4次都失败再发送信息,并不耽误我们去处理故障。假如探测一次失败就报警,即可以很快把手机短信空间塞满,又会让你睡不好觉。
故障报警开始发送以后,一般会没完没了的发送,直到故障排除恢复正常,才会发一条类似“*** is ok!”的短信。报警发送间隔设置,也是需要费一番心思,设短了,不停的消耗你的短信费用,设长了,恐怕不足以唤醒沉睡的人;如果没有人去处理故障,也没有人去停止这个通知,报警信息就会一直发送下去。
那怎么样是一个合适的范围呢?我的做法是:探测4次失败开始报警,报警间隔10分钟,总共发送8次,然后停止发送,假如第3次没有人去处理,我会电话通知,没回应则取消该对象的监控,并记录该次事件。
策略四:监控平台地点的选择
对于一个规模比较大的网络,为了解决南北互联问题而采取多个地点建立数据中心的办法。这时需要对不同地理位置的服务器进行监控,也会遇到访问慢的问题。解决这个问题有几种方式:1、选择一个到各个位置访问都顺畅的数据机房;2、采取分布式监控平台,各节点自己收集监控信息,然后到一处汇总;3、各数据中心单独 建监控平台。各人可以根据自己的实际情况自行选择。
策略五:流量控制和安全
有不少商业解决方案采取snmp和客户端软件来监控各个对象,这会引起额外的流量和带来安全问题。因此尽量不要使用snmp这样比较占资源的协议(具称snmp v3似乎有所改进)。开源解决方案Nagios在这方面做得比较完美,值得推荐一下。它可以以插件方式先收集到各监控对象的信息,然后再传送到监控服务器上,大大节省网络带宽。

注意点:nrpe所使用的端口号为5666