一、Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知
1.nagios报警是通过对象实现监控工作的
对象:
    command监控命令,
 contact向谁报警(4种返回值,0(ok)1(notice注意)2(警报,如果0->2只有一次就不会报警,只有0->2,然后一直2的时候才会报警或者0->2->0->2反复时也应该注意)3(立即发出警告)),
 period监控的时间,
 host监控的主机,
 service监控的服务,
 dependicies依赖关系,如果一个挂了,那么依赖这个的也都挂了,只会警告父节点
2.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则需要同时安装在服务器端和客户端
所用到的主机
node1:172.16.133.11
rs2:172.16.133.22
windows主机:172.16.132.1
二、ngios的安装
node1:
1.所用到的软件包


2.解决依赖关系

  1. yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-devel mysql-server  


3.添加nagios运行所需要的用户和组:
 

  1. groupadd  nagcmd  
  2. useradd -G nagcmd nagios  
  3. passwd nagios   

把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:
 

  1. usermod -a -G nagcmd apache  

4.编译安装nagios:
 

  1. tar zxf nagios-3.3.1.tar.gz   
  2. cd nagios-3.3.1  
  3. ./configure --with-command-group=nagcmd --enable-event-broker   
  4. make all 
  5. make install  
  6. make install-init  
  7. make install-commandmode  
  8. make install-config  

为email指定您想用来接收nagios警告信息的邮件地址,默认是本机的nagios用户:
 

  1. vi /usr/local/nagios/etc/objects/contacts.cfg   
  2. email        nagios@localhost(默认)   

在httpd的配置文件目录(conf.d)中创建Nagios的Web程序配置文件:
 

  1. make install-webconf  

创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:
 

  1. htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin  

以上过程配置结束以后需要重新启动httpd:
service httpd restart
5.编译、安装nagios-plugins
nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。
 

  1. tar zxf nagios-plugins-1.4.15.tar.gz   
  2. cd nagios-plugins-1.4.15  
  3. ./configure --with-nagios-user=nagios --with-nagios-group=nagios  
  4. make  
  5. make install  
  6. setenforce 0  

6.配置并启动Nagios
(1).把nagios添加为系统服务并将之加入到自动启动服务队列:
 

  1. chkconfig --add nagios  
  2. chkconfig nagios on 

(2).检查其主配置文件的语法是否正确:
 

  1. /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg  

(3).如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:
service nagios start
(4).通过web界面查看nagios:
http://172.16.133.11/nagios


登录时需要指定前面设定的web认证帐号和密码。
注意:为了nagios系统的安全,建议您使用信息摘要强认证模式(如MD5),强制使用web的TSL/SSL安全通讯模式,并且通过访问控制列表设定能访问nagios的web界面的客户端地址。 
三、配置Nagios 
node1:
1.Nagios的主配置文件
Nagios的主配置文件为nagios.cfg,其语法非常简洁,通常#开头的行为注释行,而参数的设置格式为<parameter>=<value>;其中,有些参数是可以重复出现的。其中常用的参数说明如下:
      log_file: 设定Nagios的日志文件;
      cfg_file: Nagios对象定义的相关文件,此参数可重复使用多次以指定多个文件;
      cfg_dir:  设定Nagios对象定义的相关文件所在的目录,此目录中的所有文件都会被作为对象定义的文件;此参数可重复使用多次以指定多个目录;
      resource_file: 设定Nagios附加的宏定义的相关文件;
      status_file: 设定Nagios存储所有主机和服务当前状态信息的文件;
      status_update_interval: 设定status_file指定的文件中状态信息的更新频率;
      service_check_timeout: 设定服务检测的超时时间,默认为60秒;
      host_check_timeout: 设定主机检测的超时时间,默认为30秒;
      notification_timeout: 设定通知信息发送尝试的超时时间,默认为30秒;
   command_file:定义command执行权限,执行用户的
2.resource_file和宏定义
在主配置文件中,参数resource_file用于定义所有用户变量(即“宏”)的存储文件,它用于存储对象定义中的可以访问的额外信息,如访问某服务的密码等;因此,这些信息通常都是些敏感数据,一般不允许通过Web接口来访问。此文件中可以定义的宏可多达32个,它们分别为$USER1$,$USER2$...$USER32,这些宏一般在check命令中引用。通常情况下$USER1$用于引用Nagios插件所在目录这个路径信息,因此,一般不建议修改其值。
Nagios事先定义了许多宏,它们的值通常依赖于其上下文。如下:
      HOSTNAME: 用于引用host_name指定所定义的主机的主机名;每个主机的主机名都是唯一的;
      HOSTADDRESS: 用于引用host对象中的address指令的值,它通常可以为IP地址或主机名;
      HOSTDISPLAYNAME: 用于引用host对象中alias指令的值,用以描述当前主机,即主机的显示名称;
      HOSTSTATE:某主机的当前状态,为UP,DOWN,UNREACHABLE三者之一;
      HOSTGROUPNAMES: 用于引用某主机所属的所有主机组的简名,主机组名称之间以逗号分隔;
      LASTHOSTCHECK:用于引用某主机上次检测的时间和日期,Unix时间戳格式;
      LISTHOSTSTATE:用于引用某主机前一次检测时的状态,为UP,DOWN或UNREACHABLE三者之一;
      SERVICEDESC: 用于引用对应service对象中的desccription指令的值;
      SERVICESTATE: 用于引用某服务的当前状态,为OK,WARNING,UNKOWN或CRITICAL四者之一;
      SERVICEGROUPNAMES: 用于引用某服务所属的所有服务组的简名,服务组名称之间以逗号分隔;
      CONTACTNAME: 用于引用某contact对象中contact_name指令的值;
      CONTACTALIAS: 用于引用某contact对象中alias指令的值;
      CONTACTEMAIL: 用于引用某contact对象中email指令的值;
      CONTACTGROUPNAMES: 用于引用某contact所属的所有contact组的简名,contact组名称之间以逗号分隔;

Nagios 3还支持自定义宏,只是它的定义和使用方式比较独特。管理员可以在某类型对象的定义中使用额外的指令,并能够在命令中使用特别格式的宏来引用此指令的值。其引用方式根据对象类型的不同也有所不同,具体如下:
 $_HOST<variable>$ – 引用在主机对象中定义的指令的值;
 $_SERVICE<variable>$ – 引用在服务对象中定义的指令的值;
 $_CONTACT<variable>$ – 引用在联系人对象中定义的指令的值;
 $USER1$/check_ping引用nagios插件的路径
3.nagios对象等定义
(1).命令定义格式(/usr/local/nagios/etc/objects/command.cfg)例:
 

  1. define command{  
  2.         command_name    check-host-alive(command名,全局唯一的)  
  3.         command_line    $USER1$/check_ping -H $HOSTADDRESS$(主机地址) -w(警告预值) 3000.0(延迟),80%(丢包率) -c(critical预值) 5000.0,100% -p(一共检测几个数据包) 5  
  4.         }  

(2).contact联系人定义格式(/usr/local/nagios/etc/objects/contact.cfg)例:
 

  1. define contact  
  2.  {  
  3.   contact_name mageedu  
  4.   alias Mage Education  
  5.   email linuxedu@magedu.com  
  6.   host_notification_period  workinghours  
  7.   service_notification_period  workinghours  
  8.   host_notification_options  d,u,r  
  9.   service_notification_options  w,u,c,r  
  10.   host_notification_commands     host-notify-by-email  
  11.   service_notification_commands   notify-by-email  
  12.  }  

联系人也可划分为组,即联系人组。一个联系人组对象包含一个全局惟一的标识名称,一个描述名称和属于此联系人组的联系人成员(members)或其人联系人组成员(contactgroup_members)。例如:
 

  1. define contactgroup  
  2.  {  
  3.   contactgroup_name linux-admins  
  4.   alias Linux Administrators  
  5.   members magedu, mageedu  
  6.  }  

(3).时段定义格式(/usr/local/nagios/etc/objects/timeperiods.cfg)
 

  1. define timeperiod{  
  2.         timeperiod_name 24x7(全局唯一)  
  3.         alias           24 Hours A Day, 7 Days A Week  
  4.         sunday          00:00-24:00  
  5.         monday          00:00-24:00  
  6.         tuesday         00:00-24:00  
  7.         wednesday       00:00-24:00  
  8.         thursday        00:00-24:00  
  9.         friday          00:00-24:00  
  10.         saturday        00:00-24:00  
  11.         }  

 其中,时间的指定格式有许多方式:
 日历时间:格式为YYYY-MM-DD,如2012-04-21;
 日期:如 April 21;
 每月的某一天:如 day 21,指每月的21号;
 每月的第几个周几:如 saturday 1,指每月的第一个星期六;
 星期几:如monday, tuesday等;
(4).主机定义格式(/usr/local/nagios/etc/objects/localhost.cfg)例:
 

  1. define host  
  2. {  
  3.  host_name webserver1  
  4.  hostgroups webservers  
  5.  alias www.magedu.com  
  6.  address 172.16.100.11  
  7.  check_command check-host-alive  
  8.  check_interval 5  
  9.  retry_interval 1  
  10.  max_check_attempts 5  
  11.  check_period 24x7  
  12.  contact_groups linux-admins  
  13.  notification_interval 30  
  14.  notification_period 24x7  
  15.  notification_options d,u,r  
  16. }  

其中的notification_options用于指定当主机处于什么状态时应该发送通知。其各状态及其表示符如下:
  d —— DOWN
  u —— UNREACHABLE
  r —— UP(host recovery)
  f —— flapping
  s —— 调试宕机时间开始或结束 
    主机组:
 

  1. define hostgroup{  
  2.         hostgroup_name  linux-servers ; The name of the hostgroup  
  3.         alias           Linux Servers ; Long name of the group 
  4.         members         localhost     ; Comma separated list of hosts that belong to this group 
  5.         }  

(5).定义服务(/usr/local/nagios/etc/objects/localhost.cfg)例:
 

  1. define service  
  2.  {  
  3.   host_name webserver1  
  4.   service_description www  
  5.   check_command check_http  
  6.   check_interval 10  
  7.   check_period 24x7  
  8.   retry_interval 3  
  9.   max_check_attempts 3  
  10.   notification_interval 30  
  11.   notification_period 24x7  
  12.   notification_options w,c,u,r  
  13.   contact_groups linux-admins  
  14.  }  

其中的notification_options用于指定当服务处于什么状态时应该发送通知。其各状态及其表示符如下:
  w —— WARNING
  u —— UNKNOWN
  c —— CRITICAL
  r —— OK(recovery)
  f —— flapping
  s —— 调试宕机时间开始或结束
(6).模板及对象继承(/usr/local/nagios/etc/objects/templates.cfg)
Nagios通过功能强大的继承引擎来实现基于模板的对象继承。这就意味着可以定义将某类型的对象的通用属性组织起来定义为对象模板,并在定义其类型中的对象时直接从此模板继承其相关属性的定义。定义对象模板的方法很简单,通常只需要在定义某类型对象时使用register指令并将其值设定为0即可。对象模板的名称通常使用name指令定义,这与某特定类型对象使用的指令也有所不同。而定义此种类型的对象时,只需要使用use指令并将其值设定为对应模板的名称即可。例如:
 

  1. define host{  
  2.        name                            generic-host    ; The name of this host template  
  3.        notifications_enabled           1 (发送通知,默认发送)              ; Host notifications are enabled  
  4.        event_handler_enabled           1 (启动额外的处理器,默认启动)              ; Host event handler is enabled  
  5.        flap_detection_enabled          1 (状态来回转换)              ; Flap detection is enabled  
  6.        failure_prediction_enabled      1 (提前预检测prediction事务)              ; Failure prediction is enabled  
  7.        process_perf_data               1 (进程性能数据输出)              ; Process performance data  
  8.        retain_status_information       1 (报存状态信息)              ; Retain status information across program restarts  
  9.        retain_nonstatus_information    1 (保存非状态信息)              ; Retain non-status information across program restarts  
  10.        notification_period             24x7 (检测的时间)           ; Send host notifications at any time 
  11.        register                        0(可被继承模版标志)               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!  
  12.        }  

 

  1. define host{  
  2.         name                            linux-server    ; The name of this host template  
  3.         use                             generic-host    ; This template inherits other values from the generic-host template  
  4.         check_period                    24x7            ; By default, Linux hosts are checked round the clock  
  5.         check_interval                  5               ; Actively check the host every 5 minutes  
  6.         retry_interval                  1               ; Schedule host check retries at 1 minute intervals  
  7.         max_check_attempts              10              ; Check each Linux host 10 times (max)  
  8.         check_command(首先检查主机是否在线)                   check-host-alive ; Default command to check Linux hosts  
  9.         notification_period(何时发送通知)             workhours       ; Linux admins hate to be woken up, so we only notify during the day 
  10.                                                         ; Note that the notification_period variable is being overridden from 
  11.                                                         ; the value that is inherited from the generic-host template!  
  12.         notification_interval(每隔多久,重发一次,单位分钟)           120             ; Resend notifications every 2 hours  
  13.         notification_options (d:down;u:unknown;r:重启)           d,u,r           ; Only send notifications for specific host states  
  14.         contact_groups(联系人组)                  admins          ; Notifications get sent to the admins by default 
  15.         register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!  
  16.         }  

 

  1. define host  
  2.  {  
  3.   use generic-server  
  4.   name webserver1  
  5.   alias Web Server 01  
  6.   address 172.16.100.11  
  7.   contact_groups linux-admins  
  8.  }  

一个对象在定义时也以同时继承多个模板,此时只需要为use指令指定以逗号分隔的多个模板名称即可。同时,Nagios也支持模板的多级继承。
(7).依赖关系
为了描述Nagios对象间的依赖关系,这里要用到两个术语:master(被依赖的主机或服务)和dependent(依赖关系中的依赖于master的Nagios对象)。Nagios可以定义对象间的彼此依赖性,也可以为某对象定义其父对象,甚至也可以指定此依赖关系生效的时段。下面是一个关于依赖关系定义的例子:
 

  1. define hostdependency  
  2.  {  
  3.   dependent_host_name backuphost  
  4.   host_name ***server1  
  5.   dependency_period maintenancewindows  
  6.  }  

其中host_name用于定义master主机,dependent_host_name定义dependent主机。而在依赖关系的定义中,通常还会用到execution_failure_criteria定义master主机为何种状态时不再对依赖于此master的主机进行检测,notification_failure_criteria用于定义master处于何种状态时不会发送dependent相关的主机问题通知到联系人。
服务间依赖关系的定义类似于主机间的依赖关系,例如:
 

  1. define servicedependency  
  2.  {  
  3.   host_name mysqlserver  
  4.   service_description mysql  
  5.   dependent_hostgroup_name apacheservers  
  6.   dependent_service_description webservice  
  7.   execution_failure_criteria c,u  
  8.   notification_failure_criteria c,u,w  
  9.  }  

四、使用nagios监控
1.基于NSClient++监控本地主机windows(ip:172.16.132.1)
windows:
(1).安装NSClient++


允许哪个ip地址访问
node1:
(2)./usr/local/nagios/libexec/check_nt -h查看check_nt的帮助信息
Usage:
check_nt -H host -v variable [-p port] [-w warning] [-c critical]
[-l params] [-d SHOWALL] [-u] [-t timeout]
Options:
 -h, --help
    Print detailed help screen
 -V, --version
    Print version information
Options:
 -H, --hostname=HOST指定主机
   Name of the host to check
 -p, --port=INTEGER指定端口
   Optional port number (default: 1248)
 -s, --secret=<password>
   Password needed for the request指定密码,即前面NSClient设置的密码
 -w, --warning=INTEGER
   Threshold which will result in a warning status指定警告比例
 -c, --critical=INTEGER
   Threshold which will result in a critical status指定紧急比例
 -t, --timeout=INTEGER
   Seconds before connection attempt times out (default:  -l, --params=<parameters>
   Parameters passed to specified check (see below) -d, --display={SHOWALL}
   Display options (currently only SHOWALL works) -u, --unknown-timeout
   Return UNKNOWN on timeouts10)
 -h, --help
   Print this help screen
 -V, --version
   Print version information
 -v, --variable=STRING
   Variable to check
Valid variables are:
 CLIENTVERSION = Get the NSClient version
  If -l <version> is specified, will return warning if versions differ.
 CPULOAD =cpu信息
  Average CPU load on last x minutes.
  Request a -l parameter with the following syntax:
  -l <minutes range>,<warning threshold>,<critical threshold>.
  <minute range> should be less than 24*60.
  Thresholds are percentage and up to 10 requests can be done in one shot.
  ie: -l 60,90,95,120,90,95
 UPTIME =系统开机时间
  Get the uptime of the machine.
  No specific parameters. No warning or critical threshold
 USEDDISKSPACE =磁盘信息
  Size and percentage of disk use.
  Request a -l parameter containing the drive letter only.
  Warning and critical thresholds can be specified with -w and -c.
 MEMUSE =内存信息
  Memory use.
  Warning and critical thresholds can be specified with -w and -c.
 SERVICESTATE =服务信息
  Check the state of one or several services.
  Request a -l parameters with the following syntax:
  -l <service1>,<service2>,<service3>,...
  You can specify -d SHOWALL in case you want to see working services
  in the returned string.
 PROCSTATE =
  Check if one or several process are running.
  Same syntax as SERVICESTATE.
 COUNTER =
  Check any performance counter of Windows NT/2000.
 Request a -l parameters with the following syntax:
 -l "\\<performance object>\\counter","<description>
 The <description> parameter is optional and is given to a printf
  output command which requires a float parameter.
  If <description> does not include "%%", it is used as a label.
  Some examples:
  "Paging file usage is %%.2f %%%%"
  "%%.f %%%% paging file used."
 INSTANCES =
  Check any performance counter object of Windows NT/2000.
  Syntax: check_nt -H <hostname> -p <port> -v INSTANCES -l <counter object>
  <counter object> is a Windows Perfmon Counter object (eg. Process),
  if it is two words, it should be enclosed in quotes
  The returned results will be a comma-separated list of instances on
   the selected computer for that object.
  The purpose of this is to be run from command line to determine what instances
   are available for monitoring without having to log onto the Windows server
    to run Perfmon directly.
  It can also be used in scripts that automatically create Nagios service
   configuration files.
  Some examples:
  check_nt -H 192.168.1.1 -p 1248 -v INSTANCES -l Process  
(3).设置监控
检测系统运行时间
 

  1. ./check_nt -H 172.16.132.1 -p 12489 -v UPTIME -s redhat  

检测cpuload
 

  1. ./check_nt -H 172.16.132.1 -p 12489 -v CPULOAD -w(警告比例) 80 -c(紧急比例)(检测参数)5,80,90 -s redhat
     90 -l 

检测磁盘

  1. ./check_nt -H 172.16.132.1 -p 12489 -v USEDDISKSPACE -w 80 -c 90 -l C -s redhat  


(4).定义真正意义上的检测
①.定义命令
编辑/usr/local/nagios/etc/objects/command.cfg
添加或修改如下:
 

  1. define command{  
  2.  command_name check_nt  
  3.  command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s redhat -v $ARG1$ $ARG2$  
  4.  }  

②.定义主机
编辑/usr/local/nagios/etc/objects/windows.cfg
添加或修改为如下(主机名修改一致):
 

  1. define host{  
  2.         use             windows-server  
  3.         host_name       winhost   
  4.         alias           My Windows Host  
  5.         address         172.16.132.1  
  6.         }  
  7. .,$s/winserver/winhost/g  

启用windows配置文件
 

  1. vim /usr/local/nagios/etc/nagios.cfg  
  2.     cfg_file=/usr/local/nagios/etc/objects/windows.cfg  
  3. /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg   

登录网页http://172.16.133.11/nagios


2.基于NRPE监控linux主机
1、NRPE简介
Nagios监控远程主机的方法有多种,其方式包括SNMP、NRPE、SSH和NCSA等。这里介绍其通过NRPE监控远程Linux主机的方式。
NRPE(Nagios Remote Plugin Executor)是用于在远端服务器上运行检测命令的守护进程,它用于让Nagios监控端基于安装的方式触发远端主机上的检测命令,并将检测结果输出至监控端。而其执行的开销远低于基于SSH的检测方式,而且检测过程并不需要远程主机上的系统帐号等信息,其安全性也高于SSH的检测方式。
2、安装配置被监控端
rs2:
(1).先添加nagios用户
 

  1. useradd -s /sbin/nologin nagios  

(2).NRPE依赖于nagios-plugins,因此,需要先安装之
 

  1. tar zxf nagios-plugins-1.4.15.tar.gz   
  2. cd nagios-plugins-1.4.15  
  3. ./configure --with-nagios-user=nagios --with-nagios-group=nagios  
  4. make all 
  5. make install  

(3).安装NRPE
 

  1. tar -zxvf nrpe-2.12.tar.gz  
  2. cd nrpe-2.12.tar.gz  
  3. ./configure --with-nrpe-user=nagios \  
  4.      --with-nrpe-group=nagios \  
  5.      --with-nagios-user=nagios \  
  6.      --with-nagios-group=nagios \  
  7.      --enable-command-args \  
  8.      --enable-ssl  
  9. make all 
  10. make install-plugin  
  11. make install-daemon  
  12. make install-daemon-config  

(4).配置NRPE
添加或修改为如下:
 

  1. vim /usr/local/nagios/etc/nrpe.cfg  
  2.     log_facility=daemon  
  3.     pid_file=/var/run/nrpe.pid  
  4.     server_address=172.16.133.22  
  5.     server_port=5666  
  6.     nrpe_user=nagios  
  7.     nrpe_group=nagios  
  8.     allowed_hosts=172.16.133.11  
  9.     command_timeout=60  
  10.     connection_timeout=300  
  11.     debug=0  

上述配置指令可以做到见名知义,因此,配置过程中根据实际需要进行修改即可。其中,需要特定说明的是allowed_hosts指令用于定义本机所允许的监控端的IP地址。
(5).启动NRPE
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d
为了便于NRPE服务的启动,可以将如下内容定义为/etc/init.d/nrped脚本:
 

  1. #!/bin/bash  
  2. #  
  3. NRPE=/usr/local/nagios/bin/nrpe  
  4. NRPECONF=/usr/local/nagios/etc/nrpe.cfg  
  5. case "$1" in 
  6.  start)  
  7.   echo -n "Starting NRPE daemon..." 
  8.   $NRPE -c $NRPECONF -d  
  9.   echo " done." 
  10.   ;;  
  11.  stop)  
  12.   echo -n "Stopping NRPE daemon..." 
  13.   pkill -u nagios nrpe  
  14.   echo " done." 
  15.  ;;  
  16.  restart)  
  17.   $0 stop  
  18.   sleep 2  
  19.   $0 start  
  20.   ;;  
  21.  *)  
  22.   echo "Usage: $0 start|stop|restart" 
  23.   ;;  
  24.  esac  
  25. exit 0  

或者在/etc/xinetd.d目录中创建nrpe文件,使其成为一个基于非独立守护进程的服务,文件内容如下:
 

  1. service nrpe  
  2. {  
  3.  flags = REUSE  
  4.  socket_type = stream  
  5.  wait = no 
  6.  user = nagios  
  7.  group = nagios  
  8.  server = /opt/nagios/bin/nrpe  
  9.  server_args = -c /etc/nagios/nrpe.cfg -i  
  10.  log_on_failure += USERID  
  11.  disable = no 
  12. }  

此种情况下启动NRPE进程需要通过重启xinetd来实现.
(6).配置允许远程主机监控的对象
在被监控端,可以通过NRPE监控的服务或资源需要通过nrpe.conf文件使用命令进行定义,定义命令的语法格式为:command[<command_name>]=<command_to_execute>。比如:
 

  1. command[check_rootdisk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /  
  2. command[check_swap]=/usr/local/nagios/libexec/check_disk -w 40% -c 20%  
  3. command[check_sensors]=/usr/local/nagios/libexec/check_sensors  
  4. command[check_users]=/usr/local/nagios/libexec/check_users -w 10 -c 20  
  5. command[check_load]=/usr/local/nagios/libexec/check_load -w 10,8,5 -c 20,18,15  
  6. command[check_zombies]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z  
  7. command[check_all_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200  

3.配置监控端
(1).安装NRPE
 

  1. tar -zxvf nrpe-2.12.tar.gz  
  2. cd nrpe-2.12.tar.gz  
  3. ./configure --with-nrpe-user=nagios \  
  4.      --with-nrpe-group=nagios \  
  5.      --with-nagios-user=nagios \  
  6.      --with-nagios-group=nagios \  
  7.      --enable-command-args \  
  8.      --enable-ssl  
  9. make all 
  10. make install-plugin  

(2).定义如何监控远程主机及服务:
通过NRPE监控远程Linux主机要使用chech_nrpe插件进行,其语法格式如下:
check_nrpe -H <host> [-n] [-u] [-p <port>] [-t <timeout>] [-c <command>] [-a <arglist...>]
使用示例1:
定义监控远程Linux主机命令信息:
 

  1. define command{  
  2.         command_name check_nrpe  
  3.         command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$  
  4.         }  

定义监控远程linux主机信息
 

  1. define host{  
  2.           use             linux-server  
  3.           host_name       rs2        //需要修改工作站的主机名  
  4.           alias           rs2  
  5.           address         192.168.0.44      //工作站主机IP  
  6.                }  
  7. define service{  
  8.         use                      generic-service  
  9.         host_name                rs2  
  10.         service_description      check-swap         //对下面操作的描述  
  11.         check_command            check_nrpe!check_swap   //执行检测交换分区命令,监控swap  
  12.                }  
  13. define service{  
  14.         use                      generic-service  
  15.         host_name                rs2  
  16.         service_description      check-load 
  17.        check_command             check_nrpe!check_load    //监控负载  
  18.                }  
  19. define service{  
  20.         use                      generic-service  
  21.         host_name                rs2  
  22.        service_description       check-disk  
  23.        check_command             check_nrpe!check_disk    //监控硬盘  
  24.               }  
  25. define service{  
  26.         use                     generic-service  
  27.         host_name               rs2  
  28.        service_description      check-users  
  29.        check_command            check_nrpe!check_users          //监控用户(使用)情况  
  30.                }  
  31. define service{  
  32.         use                    generic-service  
  33.         host_name              rs2  
  34.         service_description    total_procs  
  35.         check_command          check_nrpe!check_total_procs        //监控进程  
  36.         } 

打开网页http://172.16.133.11/nagios,点击service,有的可能要等会刷新

 

附:

  1. # sed -i 's:for file in includes/rss/\*;:for file in includes/rss/\*.\*;:g' ./html/Makefile  
  2. # sed -i 's:for file in includes/rss/extlib/\*;:for file in includes/rss/extlib/\*.\*;:g' ./html/Makefile  
  3. 然后,执行以下命令,来完成安装。  
  4. # make fullinstall