============监控端安装配置Nagios
1、Nagios简介
Nagios是一款遵循GPLv2的开源网络监控软件,可用来监控指定的多种系统的主机、服务,并可在它们的工作状态发生变化时通知管理员。它的特性包括:
1)监控网络服务(HTTP、POP3、SMTP、PING、MySQL等)
2)监控主机资源(磁盘空间利用率、内存利用率、CPU负载等)
3)简洁的插件设计接口,使得用户可以轻松开发所需的检测脚本
4)并行服务模式
5)轻松描述网络结构,并且能够区辨“宕机”和“主机不可达”
6)通过邮件或用户自定义的方式将主机或服务的工作状态变化情况通知给管理员
7)自动日志滚动
8)支持以冗余方式进行主机监控
9)可以通过web方式直观的查看当前网络状态、通知和问题历史、日志文件等等,此组件为可选
Nagios通常由一个主程序(Nagios)、一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE、NSCA、NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务器端工作所必须的组件。而四个ADDON中,NRPE用来在监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控;NSCA用来让被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(这在冗余监控模式中特别要用到);NSClient++是用来监控Windows主机时安装在Windows主机上的组件;而NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。这四个ADDON(附件)中,NRPE和NSClient++工作于客户端,NDOUtils工作于服务器端,而NSCA则需要同时安装在服务器端和客户端。
下图是笔者根据自己的理解给出的Nagios各组件的关系图,希望能帮助读者理解。如果您对此构图中的关系持有异议,欢迎通过各种方式跟笔者交流。

 
目前,Nagios只能安装在Linux系统主机上,其编译需要用到gcc。同时,如果打算使用web界面的管理工具的话,还需要有apache服务器和GD图形库的支持。
2、安装前的准备工作
(1)解决安装Nagios的依赖关系:
Nagios基本组件的运行依赖于httpd、gcc和gd。可以通过以下命令来检查nagios所依赖的rpm包是否已经完全安装:
# yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-server
对于缺少的rpm包,您可以挂载光盘直接使用rpm命令进行安装。如果不想总是被rpm的依赖关系所困扰,您可以通过yum结合本地源来实现rpm包的管理。对于本地源的建立,可以参考笔者的另外一篇关于yum的文章。

此外,要想完整的安装关运行本文中所描述的环境,您得准备一个功能完备的LAMP运行环境。
说明:以上软件包您也可以通过编译源代码的方式安装,只是后面许多要用到的相关文件的路径等需要按照您的源代码安装时的配置逐一修改。此外,您还得按需启动必要的服务,如httpd,mysqld等。
(2)添加nagios运行所需要的用户和组:
# groupadd nagcmd
# useradd -m nagios
# usermod -a -G nagcmd nagios
把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:
# usermod -a -G nagcmd apache
3、编译安装nagios:
# tar zxf nagios-3.1.2.tar.gz 
# cd nagios-3.1.2
# ./configure --prefix=/usr/local/nagios --with-command-group=nagcmd --enable-event-broker
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
为email指定您想用来接收nagios警告信息的邮件地址,默认是本机的nagios用户:
# vi /usr/local/nagios/etc/objects/contacts.cfg 
email        nagios@localhost       #这个是默认设置
在httpd的配置文件目录(conf.d)中生成创建Nagios的Web程序配置文件:
# cd nagios-3.1.2
# make install-webconf
创建一个登录认证nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:
# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
提示输入密码:ipanel
#编辑httpd.conf配置文件,创建虚拟目录。
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
#  SSLRequireSSL
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
以上过程配置结束以后需要重新启动httpd:
# service httpd restart
=========编译、安装nagios-plugins
nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。
# tar zxf nagios-plugins-1.4.13.tar.gz 
# cd nagios-plugins-1.4.13
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install
5、配置并启动Nagios
(1)把nagios添加为系统服务并将之加入到自动启动服务队列:
# chkconfig --add nagios
# chkconfig nagios on
(2)检查其主配置文件的语法是否正确:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:
# service nagios start
(4)配置selinux
如果您的系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。您可以通过下面的命令来检查您的系统是否开启了selinux:
#getenforce
如果上面命令的结果显示开启了selinux服务,您可以通过下面的命令暂时性的将其关闭:
#setenforce 0
如果您想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。
当然,您也可以通过以下方式将nagios的CGI程序运行于SELinux/targeted模式而不用关闭selinux:
# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin
# chcon -R -t httpd_sys_content_t /usr/local/nagios/share
(5)通过web界面查看nagios:
http://your_nagios_IP/nagios
登录时需要指定前面设定的web认证帐号和密码。
注意:为了nagios系统的安全,建议您使用信息摘要强认证模式(如MD5),强制使用web的TSL/SSL安全通讯模式,并且通过访问控制列表设定能访问nagios的web界面的客户端地址。
==========Nagios的插件简介
Nagios本身并不包含任何监控机制,其所有的监控工作都是通过插件(plugin)来实现的。这些插件通常是通过命令行方式监控主机或服务工作状态的Perl脚本或Shell脚本(通常于/usr/local/nagios/libexec目录),由Nagios进行按需调用,并把执行结果返回给Nagios。Nagios正是根据这些返回值来判断是否“采取某种行动”(如运行事件句柄(event handlers),发送通知等)。下图展示了插件相对于Nagios进程和被监控对象间的关系。
官方提供了一些用来监控系统基本资源(如CPU负载、磁盘利用率、Ping速率等)的插件。如果需要监控其它形式资源(如CPU电压、CPU风扇转速、网络流量等)的状态,您可以利用官方提供的其它插件或第三方提供的插件,当然,您也可以自己编写所需要的插件。
以下是常用来获得插件的地址:
Nagios插件项目: http://nagiosplug.sourceforge.net/
Nagios下载页面: http://www.nagios.org/download/
NagiosExchange.org: http://www.nagiosexchange.org/
官方提供的插件通常都会提供简单的使用帮助,可以在每个脚本后使用“-h”或“--help”来获得这些帮助信息。如要想了解插件脚本check_nt的帮助信息,可以使用如下命令:
# ./check_nt  --help
==========Nagios配置文件概览
Main Config File:主配置文件,通常为nagios.cfg,包含许多指示Nagios守护进程工作属性的指令。此配置文件会被Nagios Daemon和CGIs使用。
Resource  File(s):资源文件,常用来存储用户自定义的“宏(macro)”,如可用来存储“密码”等敏感性的信息,使之可以避免直接暴露在CGIs源文件中。
Object Definition Files:对象定义文件,常用来定义要监控对象以及如何监控这些对象,如主机、服务、主机组、服务组、联系人、联系人组、命令等。这些对象定义文件可以通过cfg_file指令包含于主配置文件中;如果对象定义文件有很多,则可以将它们存放于某一目录中,而后使用cfg_dir指令一次性地由主配置文件读取。这些文件通常位于/usr/local/nagios/etc/objects目录中。
CGI Configure File:CGI配置文件,包含许多决定CGIs工作属性的指令,以及一个指向主配置文件的引用。

Nagios常见对象概览

对象(Objects)是Nagios“监控”和“通知”机制的基本逻辑组件,其主要包括:
· Service
· Service Groups
· Hosts
· Host Groups
· Contacts
· Contact Groups
· Commands
· Time Periods
· Notification Escalations
Notification and Excution Dependenicies
主机和主机组:主机通常是网络中的物理设备,至少有某个种类的访问地址(主机名、IP地址或MAC地址);每个主机通常都提供一个到多个服务(service);主机彼此间可以形成父/子(parent/child)关系,用来描述主机间的“从属”或“包含”关系(“网络可达性”关系)。主机组通常指一到多个主机的组合。
服务和服务组(Service/Service groups):“服务”是Nagios监控逻辑的核心,通常从属于某个主机,可以是主机的属性(如CPU负载、磁盘空间、交换空间使用率等),也可以是由主机提供的某个“服务”(如POP3、HTTP、SSH等),甚至也可以是DNS资源记录这样的主机资源。服务组通常指一至多个服务定义的组合。
联系人和联系人组(Contacts/Contack Groups):“联系人”是指“通知(notification)”的接受对象。联系人通常有一个或多个“通知”方式(如移动电话、Email、即时通讯帐户等),以接收其职责范围内的主机或服务发来的通知。“联系人组”通常指一个或多个联系人的集合。
时段(Timeperiods):“时段”通常定义用来控制“主机和服务何时被监控”以及“联系人何时可以接收通知”的有效时间段。

命令(Commands):用来定义Nagios可以调用的程序、脚本等,还包括了这些程序或脚本的调用格式。
===========NDOUtils的安装与设定:
1、NDOUtils简介
NDOUTILS ADDON主要用来将Nagios的配置信息和event产生的数据存入数据库(目前的beta版支持mysql和pgsql,稳定版只支持mysql),以方便实现数据的快速检索和处理,并且为其它通过web接口程序来管理这些数据提供了保障。
在一个大型应用中,可能存在多个独立的或分布式布置的Nagios服务器,这种环境中的每个Nagios服务器通常被称为一个Nagios实例。在多Nagios实例的环境中,既可以把所有实例的数据存入到一个数据库,也可以将各实例的数据分别存储。
在只有一个Nagios实例环境中,其实例名称通常为“default”;而在多实例的环境中,则需要为此些Nagios实例各自命名。
NDO Utils主要由以下四个部分组成:
1)NDOMOD Event Broker Module(NDOMOD.O):用来输出Nagios进程产生的数据(data和logic),其前提是Nagios在编译时开启了Event broker的功能。同时,NDOMOD模块还可以导出Nagios配置有关的信息(包括Nagios监控进程运行时环境产生的动态数据)至文件、Unix域套接字或者TCP套接字。NDO2DB将通过前面的这三种方式获得Nagios的有关数据。
2)NDO2DB:用来接收由NDOMOD和LOG2NDO组件输出的信息并将之存储在数据库中。启动时,NDO2DB进程将创建一个TCP套接字或Unix域套接字以监听客户端(输出端)的连接请求。目前仅支持MySQL数据库。
多个客户端可以同时向一个NDO2DB守护进程输出数据,此时的NDO2DB将为每一个连接进来的客户端(Nagios实例)建立一个连接进程,以实现每个客户端数据的独立存储、检索和处理。 
3)LOG2NDO:用来将Nagios的历史日志通过NDO2DB进程输出至数据库。LOG2NDO与NDO2DB进程通信的方法依然是标准文件、Unix域套接字或者TCP套接字三种。
4)FILE2SOCK:从标准文件或标准输入读入数据,并将之输出至Unix域套接字或TCP套接字。当NDOMOD或LOG2NDO将数据输出至标准文件时,此工具则可用来将这些标准文件中数据读出并发送给NDO2DB进程监听的TCP套接字或Unix域套接字。
2、安装NDOUtils
# tar zxf ndoutils-1.4b8.tar.gz
# cd ndoutils-1.4b8
# ./configure --enable-mysql --with-mysql-lib=/usr/lib/mysql --with-mysql-inc=/usr/include/mysql  --disable-pgsql
# make
# cp -v src/{ndomod-3x.o,ndo2db-3x,file2sock,log2ndo}  /usr/local/nagios/bin
以上复制的文件中前两项是版本相关的,即如果您的nagios主版本号是2系列,则需要拷贝名为ndomod-2x.o和ndo2db-2x的两个文件。后两项是通用文件,无论哪个版本都需要复制。
3、为NDOUtils创建数据库
# mysql -uroot -p
mysql> create database ndodb;
mysql> GRANT ALL PRIVILEGES ON ndodb.* TO ndouser@localhost IDENTIFIED BY '123456';
mysql> flush privileges;
下面两条命令用来生成ndoutils所需要的数据库表等,这些表默认以“nagios_”为前缀;install脚本命令必须在db子目录内执行:
# cd db
# ./installdb -u ndouser -p 123456 -h localhost -d ndodb
其中各选项的意义如下:
-u用来指定导入时所用的mysql用户帐号
-p表示前面mysql用户的密码
-h表示mysql服务器地址,如果是localhost,则可以省略
-d表示目标数据库
说明:如果与cacti整合的话,npc插件会在cacti的数据库自动生成ndoutils所需要表,这些表均以“npc_”为前缀。后面讲到整合的文章中会继续对些做出说明。
4、复制、编辑配置文件
# cd ..
# cp -v config/{ndo2db.cfg,ndomod.cfg} /usr/local/nagios/etc
# chmod 644 /usr/local/nagios/etc/ndo*

注:以上config目录中的ndo2db.cfg和ndomod.cfg在ndoutils-1.49b中是以ndo2db.cfg-sample和ndomod.cfg-sample命名的,如果您使用的是这个版本的ndoutils,请在复制时做出相应的修改;
# vi /usr/local/nagios/etc/nagios.cfg
在文件中添加:
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg
此外,请确保您的/usr/local/nagios/etc/nagios.cfg中有如下行出现,否则,请自行添加:
event_broker_options=-1                //为Nagios开启event broker
5、编辑ndo2db守护进程和ndomod的配置文件
# vi /usr/local/nagios/etc/ndo2db.cfg
socket_type=tcp
db_servertype=mysql
db_host=localhost
db_port=3306
db_name=ndodb
db_prefix=nagios_
db_user=ndouser
db_pass=123456
说明:
i) 以上"db_"开头的选项用来指定连接数据库的属性;
ii)其默认用来接收数据的方式为Unix域套接字,这里修改成了TCP套接字;同时,ndomod.cfg配置文件中指定的输出方式也应该做相应的修改;
接下来我们去编辑ndomod的配置文件,为其指定数据的输出方式和输出目标主机:
# vi /usr/local/nagios/etc/ndomod.cfg
output_type=tcpsocket
output=127.0.0.1
6、启动ndo2db守护进程
# /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
建议此时查看系统日志(/var/log/messages)中是否有错误出现。
如果此时Nagios进程已启动,则需要停止并重新启动nagios:
# killall -SIGHUP nagios
# rm -f /usr/local/nagios/var/nagios.lock
# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
说明:
i)此处停止Nagios必须通过向Nagios发送SIGHUP信号的方式进行;
ii)建议此时查看nagios日志文件中是否表明ndomod的模块加载是否正常,以及其是否能正常连接到data sink;查看日志,可以使用如下命令实现:# tail -30 /usr/local/nagios/var/nagios.log
排错信息:
i)  如果ndomod模块没能正常加载的话,建议重新检查nagios的配置文件中是否添加了所需的broker module条目;
ii) 同时,如果ndomod没有正常连接到data sin,建议查看ndo2db.cfg文件中关于mysql连接项目的指定是否正确;
iii)确认一下在编译NDOUtils时是否指定了关于mysql库文件位置的选项;
========安装nrpe 插件
#对远程一台linux主机进行监控
#监控服务器上安装设置
cd /opt
wget  [url]http://www.mirrors.wiretapped.net/security/network-monitoring/nagios/nrpe-2.8.1.tar.gz[/url]
#监控主机上安装方法
tar -zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure  #默认自动添加了openssl 
#因为传送过程要加密,如果后面make报错,configure加如下参数
./configure --enable-ssl --with-ssl-lib=/lib/(当然前提要有openssl)
make all
make install 
make install-plugin    ---监控机需要安装check_nrpe这个插件,被监控机并不需要
########################################################################被监控主机上安装方法
cd /opt
useradd nagios -d /usr/local/nagios
chown nagios.nagios /usr/local/nagios/
tar -zxvf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure --enable-perl-modules --with-ping-command=ping
make
make install
cd /opt
tar -zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure
make all
make install
make install-plugin
make install-daemon
make install-daemon-config

vi /usr/local/nagios/etc/nrpe.conf
allowed_hosts=192.168.8.150
#为了监控swap在nrpe.cfg中添加
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda1
#sdb1可根椐实际情况更改,我这里的硬盘类型是scsi
vi /etc/services 
#增加nrpe
nrpe            5666/tcp                        # nrpe
#启动nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
netstat -at|grep nrpe
netstat -an|grep 5666
########################################################################再对监控服务器进行设置
#添加nrpe的定义
vi /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$
        }
vi /usr/local/nagios/etc/cgi.cfg
把use_authentication=1修改为use_authentication=0如果出现页面无法显示之类的
authorized_for_system_commands=nagiosadmin,kerry    --kerry为http访问授权用户
authorized_for_all_services=nagiosadmin,kerry
authorized_for_all_hosts=nagiosadmin,kerry
authorized_for_all_service_commands=nagiosadmin,kerry
authorized_for_all_host_commands=nagiosadmin,kerry
#测试NRPE是否则正常工作
/usr/local/nagios/libexec/check_nrpe -H localhost
killall nagios
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d"  >> /etc/rc.local
echo "/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg" >>/etc/rc.local
#问题:notifications for this service have been disabled
#解决办法:enable notifications for this service
#问题:Status Map页面无法显示
#解决方法:ln -s /usr/local/lib/libgd.so.2 /usr/lib/libgd.so.2
vi /usr/local/nagios/etc/nagios.cfg
#添加
cfg_file=/usr/local/nagios/etc/objects/emos-mailserver.cfg
#emos-mailserver.cfg这个文件名可以自定义
#对刚定义的emos-mailserver.cfg文件进行配置
vi /usr/local/nagios/etc/objects/emos-mailserver.cfg
define host{
           use          linux-server
          host_name     emos-mailserver
          alias         emos-mailserver
          address       192.168.8.151
        }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     HTTP
        check_command     check_http
       }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     SSH
        check_command   check_ssh
       }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     SMTP
        check_command   check_smtp
       }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     POP3
        check_command   check_pop
       }
#define service{
#        use             generic-service
#        host_name       emos-mailserver
#        service_description     mysql
#        check_command   check_mysql
#       }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     check-swap
        check_command           check_nrpe!check_swap
        }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     check-load
        check_command           check_nrpe!check_load
        }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     check-disk
        check_command           check_nrpe!check_sda1
 }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     zombie_procs
        check_command           check_nrpe!check_zombie_procs
        }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     check-users
        check_command           check_nrpe!check_users
        }
define service{
        use             generic-service
        host_name       emos-mailserver
        service_description     total_procs
        check_command           check_nrpe!check_total_procs
#配置完后,重启nagios
killall nagios
service nagios start
pstree |grep nagios
 

 
=========安装  pnp==============
cd /opt
tar zxvf pnp-0.4.12.tar.gz 
cd pnp-0.4.12
./configure --with-nagios-user=nagios \ 
--with-nagios-group-nagios \ 
--with-rrdtool=/usr/local/rrdtool/bin/rrdtool \ 
--with-perfdata-dir=/usr/local/nagios/share/perfdata 
make 
make all 
make install 
make install-config 
make install-init
#错误提示:RRDs Perl Modules:                *** NOT FOUND ***
#解决方法:ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib/perl5/5.8.8/i386-linux-thread-multi/
#要产生图形数据还需在commands.cfg中重定义命令: 
define command{ 
command_name process-service-perfdata 
command_line /usr/local/nagios/libexec/process_perfdata.pl 
#产生图形数据还要设定nagios.cfg文件: 
process_performance_data=1 
service_perfdata_command=process-service-perfdata 
 
 
=========监控远程windows主机=====
#监控windows服务器
wget  [url]http://nchc.dl.sourceforge.net/sourceforge/nscplus/NSClient++-Win32-0.3.5.zip[/url]
解压nsclient++0.3.3.zip到c盘根目录
解压为C:\NSClient++
 
#在nagios监控服务器上
vi /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/windows.cfg 去掉这句话的注释
 
#到win服务器上,打开命令窗口,cd到刚才解压的目录
#在命令行界面执行 nsclient++ /install
#然后 nsclient++  SysTray 如果出错不用管!
#此时在“服务”里面已经有了nsclient的服务
双击打开,点"登录"标签,在"允许服务与桌面交互"前打勾
#编辑NES.ini,在 [modules] 选项里,去掉所有的注释符号; 除了 
CheckWMI.dll和RemoteConfiguration.dll
#the [Settings] 选项里
修改allowd_host=192.168.8.150(nagios服务器的ip) 
#[NSClient] 里面,去掉port=12489的注释!他靠端口12489侦听,所以防火墙要打开这个端口!
[NSClient]有allowed_hosts的同 样设置,不要设置错了),最后不要忘记去掉前面的注释符(;) 
在[Settings]部分设置'password'选项来设置密码,作用是在nagios连接过来时要求提供密码.这一步是可选的,我这里方便起见跳过它,不要密码.
#然后启动nsclient
nsclient++ /start
#接下来我们开始配置nagios服务器里面的内容
vi /usr/local/nagios/etc/objects/windows.cfg
#修改hostname和address,很重要!!
#定义要被监控的windows主机名与主机的IP地址
define host{
use             windows-server  
host_name       XXXX(自定义)
 
alias           My Windows Server
address         192.168.2.100     --windows服务器的IP地址 
}

#定义一个主机名组(可以不用管它默认)
define hostgroup{
hostgroup_name  windows-servers
alias           Windows Servers
}

#检查windows主机是否已经安装了NSClient++,及它的版本号
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     NSClient++ Version
check_command           check_nt!CLIENTVERSION
}

#监控 windows 主机的开机运作时间
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     Uptime
check_command           check_nt!UPTIME
}

#监控 windows 主机的 CPU 负载
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     CPU Load
check_command           check_nt!CPULOAD!-l 5,80,90    #CPU如果到达80%则报警,到达90%则警笛
}

#监控 windows 主机的内存使用状况 
define service{
use                     generic-service
host_name               XXXX(自定义)
service_description     Memory Usage
check_command           check_nt!MEMUSE!-w 80 -c 90  #内存使用到达80%则warn,到达90%则Critical
}

#监控 windows 主机的 C:\ 的空间使用量 
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     C:\ Drive Space
check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}

#监控 windows主机的W3SVC设置的动作状况
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     W3SVC
check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}

#监控 windows 主机的 Explorer.exe 执行程序的运作状况,如程序终止了,则会发 CRITICA
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     Explorer
check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
}

#监控 windows 主机的 MSSQLSERVER 服务的运作状况,如服务终止了,则会发 CRITICAL 
define service{
use                     generic-service
host_name               XXXX(自定义)

service_description     MSSQL
check_command           check_nt!SERVICESTATE!-d SHOWALL -l MSSQLSERVER 
}

说明:如果有多台的windows xp客户端要监控,那么就以上述这样写多个就可以了 
3、检查nagios.cfg文件有没有错误
#nagios -c  nagios.cfg
4、重新启动一下nagios服务
#/etc/init.d/nagios restart
5、访问页面进行查看
   
如果启动报错:Starting nagios:CONFIG ERROR! Start aborted. Check your Nagios configuration
解决方法:
追踪/etc/init.d/nagios启动脚本内容
根据nagios启动时的报错信息“CONFIG ERROR!  Start aborted.  Check your Nagios configuration.”,说明在nagios执行过程中,/usr/bin/nagios -v /etc/nagios/nagios.cfg是错误的,去掉> /dev/null 2>&1,重新启动nagios     详细详细见博客 http://2358205.blog.51cto.com/2348205/811566 
=======安装  sendEmail ============
#使用sendEmail发送报警邮件
cd /opt
wget  [url]http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.55.tar.gz[/url]
tar -zxvf sendEmail-v1.55.tar.gz
cd sendEmail-v1.55
cp sendEmail /usr/local/bin
chmod +x /usr/local/bin/sendEmail
#sendEmail使用方法
/usr/local/bin/sendEmail –f  kerry.hu@3aaa.com –t  kerry.hu@3aaa.com –s mail.3aaa.com –u “from nagios” –xu kerry.hu@3aaa.com –xp 11111 –m happy
#解释:-f 表示发送者的邮箱
     -t 表示接收者的邮箱
     -s 表示SMTP服务器的域名或者ip
     -u 表示邮件的主题
     -xu 表示SMTP验证的用户名
     -xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
     -m 表示邮件的内容如果你不带-m参数的话,就会提示你自行输入
#编辑配置文件,nagios使用sendEmail来发警告邮件
vi /usr/local/nagios/etc/objects/commands.cfg
# 'notify-host-by-email' command definition
define command{
 command_name notify-host-by-email
 command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/sendEmail –f  kerry.hu@3aaa.com –t $CONTACTEMAIL$ –s mail.3aaa.com –u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" –xu kerry.hu@3aaa.com –xp 11111
 }
# 'notify-service-by-email' command definition
define command{
 command_name notify-service-by-email
 command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail –f  kerry.hu@3aaa.com –t $CONTACTEMAIL$ –s mail.3aaa.com –u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" –xu kerry.hu@3aaa.com –xp 111111
 }
#注:在使用sendEmail的过程中无法发送报警邮件,不知是什么原因,只好改用系统自带的sendmail发邮件!!
============Nagios监控linux服务器
平台及所用组件,
    监控服务器:RHEL5(192.168.0.20)+nagios-3.0.5+ nagios-plugins-1.4.11+ nrpe_2.8.1
    被监控端RHEL5 (192.168.0.21)+ nagios-plugins-1.4.11+ nrpe_2.8.1
内容简介
    本文档介绍nagios监控linux服务器, 因为监控都是依靠插件去完成的,而监控linux主要使用NRPE插件,本文首先简单介绍一下NRPE监控基础,及监控过程,然后一步步的配置一个实例实现监控linux服务器
1.NRPE监控插件基础
NRPE总共由两部分组成:
    check_nrpe插件,运行在监控主机上。
    NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
整个的监控过程:(如下图)
    当Nagios需要监控某个远程linux主机的服务或者资源情况时:
    1).nagios运行check_nrpe插件,我们要在nagios配置文件中告诉它要检查什么.
    2).check_nrpe插件会通过SSL连接到远程的NRPE daemon.
    3).NRPE daemon会运行相应的nagios插件来执行检查本地资源或服务.
    4).NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:NRPE daemon需要nagios插件安装在远程被监控linux主机上,否则,daemon不能做任何的监控. 别外因为它们间的通信是加密的SSL,所以在编译安装时都要加上选项, ./configure --enable-ssl --with-ssl-lib=/lib/,否则也会出错. 
2.配置监控端
1.安装nagiosrpm -qa |grep gd
rpm -ql gd-devel-2.0.28-5.4E.el4_6.1
cd nagios-3.0.5
./configure --prefix=/usr/local/nagios --with-command-group=nagcmd --with-gd-lib=/usr/lib --with-gd-inc=/usr/include
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf        #可以自动配置httpd.conf
2.安装nagios-pluginscd nagios-plugins-1.4.11
./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround
make
make install
3.安装NRPEcd nagios-nrpe_2.8.1
./configure   #默认自动添加了openssl
#因为传送过程要加密,如果后面make报错,加如下参数
rpm -qa| grep ssl 
openssl-devel-0.9.7a-43.17.el4_6.1
rpm -ql openssl-devel-0.9.7a-43.17.el4_6.1 | more
./configure --enable-ssl --with-ssl-lib=/lib/(当然前提要有openssl)
make all
make install-plugin
4.commands.cfg定义外部构件nrpevi /usr/local/nagios/etc/objects/commands.cfg
#添加
#check nrpe
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }
5.配置要监控的linux主机vi /usr/local/nagios/etc/nagios.cfg
#中间添加
cfg_file=/usr/local/nagios/etc/objects/mylinux.cfg
6.新建mylinux.cfg 设置监控内容vi /usr/local/nagios/etc/objects/mylinux.cfg
define host{
           use             linux-server
          host_name     mylinux
          alias            mylinux
          address        192.168.0.21(客户端IP既被监控的IP)
        }
define service{
        use                      generic-service
        host_name             mylinux
        service_description     check-swap
        check_command        check_nrpe!check_swap
               }
define service{
        use                      generic-service
        host_name             mylinux
        service_description     check-load
       check_command         check_nrpe!check_load
               }
define service{
        use                      generic-service
        host_name             mylinux
       service_description     check-disk
       check_command        check_nrpe!check_had1
       }
define service{
        use                      generic-service
        host_name             mylinux
       service_description     check-users
       check_command        check_nrpe!check_users
               }
define service{
        use                    generic-service
        host_name           mylinux
        service_description  otal_procs
        check_command     check_nrpe!check_total_procs
}
6.其它设置chkconfig --add nagios    #配置机器启动时自动启动Nagios
chkconfig nagios on
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #检查Nagios配置文件
vi /etc/selinux/config      #关闭SELinux
SELINUX=disabled
service iptables stop  #关闭SELinux,或打开80,5666端口
service nagios start
3.配置被监控端
1.安装nagios-pluginuseradd nagios
passwd nagios
tar -zxvf nagios-plugins-1.4.12.tar.gz
cd nagios-plugins-1.4.12
./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround
Make
make install
2.改变主目录权限chown –R  nagios.nagios /usr/local/nagios
[root@client nagios]# ll
drwxr-xr-x  2 nagios nagios 4096 Jun  1 00:07 libexec
drwxr-xr-x  3 nagios nagios 4096 Jun  1 00:07 share
3.安装客户端的nrpetar -zxvf nagios-nrpe_2.8.1.orig.tar.gz
cd nagios-nrpe_2.8.1
./configure  (会自动加载SSL)
#如果后面make报错,加如下参数
./configure --enable-ssl --with-ssl-lib=/usr/lib/(当然前提要有openssl)
make all
make install-plugin
make install-daemon
make install-daemon-config
4.配置nrpe信息vi /usr/local/nagios/etc/nrpe.cfg
allowed_hosts=192.168.0.20,127.0.0.1,192.168.0.99
5.启动nrpe/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d
#或
vi /etc/rc.d/rc.local
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d
6.验证nrpenetstat -an | grep 5666
tcp      0    0 0.0.0.0:5666             0.0.0.0:*         LISTEN 
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
NRPE v2.8.1
#服务端测试
/usr/local/nagios/libexec/check_nrpe -H l92.168.0.21
NRPE v2.8.1
#常见错误
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
CHECK_NRPE: Error - Could not complete SSL handshake.
配置allowed_hosts=192.168.0.20,127.0.0.1,192.168.0.99,然后kill进程再重启就OK了
2./usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
Connection refused by host
Nrpe进程没有启动
7.配置监控对像(关键)
    由监控原理可知被监控端做监控然后传给监控服务器绘总,设置监控详细参数主要是设置被监控端的nrpe.cfg文件
    可以看到里面监控对象vi /usr/local/nagios/etc/nrpe.cfg
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_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%
    这一步是关键,如果nagios服务器想要监控客户机swap分区,但客户机nrpe.cfg文件没有swap监控对像,这时监控服务器就是报错(NRPE command ‘check_swap’no defined).如下图:其实平时自己写脚本,也是主要配这个地方
    到此,就可以监控linux客户机的Disk,swap,users,memory了.