运维监控利器Nagios


Nagios的概念、结构和功能


1、使用Nagios的必要性


大量的IT基础设施系统管理繁琐、复杂。

减少管理和维护成本

优化系统、合理利用服务资源


监控软件局限性:

没有任何工具可以监视你所需的一切内容。

要让工具完全适应你的需求需要做许多自定义工作。


2什么是Nagios

        Nagios—NagiosAin’t Gonna Insist on Sainthood

最初项目名字是NetSaint,程序主体由ANSI C编制.

        Nagios是一款开源的免费网络监视工具,其功能强大,灵活性强。能有效监控WindowsLinuxUnix的主机状态,交换机、路由器等网络设置,打印机等,在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

商业IT管理系统,如 IBM Tivoli, HPOpenView/Operations


官方站点:http://www.nagios.org/


3Nagios的结构

        Nagios可分为核心和插件两个部分。

        Nagios的核心部分只提供了很少的监控功能,因此要搭建一个完善的IT监控管理系统,用户还需要给Nagios安装相应的插件,插件可以从Nagios官方网站下载,也可以根据实际要求自己编写所需的插件。

        Nagios必须运行在linux/Unix平台下,需要gcc编译器支持,nagios还提供了一个web监控界面。


4  Nagios可实现的功能

      (1)监视本地或者远程主机资源 (内存、进程、磁盘等)

    2)监视网络服务资源 (HTTPPINGFTPSMTPPOP3)

    3)允许用户编写自己的插件来监控特定的服务。

    4)当被监控对象出现异常时,可以通过邮件、短信等方式通知管理人员。

    5)可以事先定义事件处理程序,当主机或者服务出现故障时自动调用指定的处理程序。

    6)可以通过web界面来监控各个主机或服务的运行状态。


5  Nagios监控实现原理

         Nagios软件需要安装在一台独立的服务器上运行,这台服务器称为监控中心,这个监控中心服务器可以采用Linux或者Unix操作系统。每一台需要监视的硬件主机或者服务都运行一个与监控中心服务器进行通信的Nagios软件后台程序。监控中心服务器根据读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。虽然nagios软件必须在Linux或者Unix操作系统上运行,但是,远程被监控的机器可以是任何能够与其进行通信的主机。根据远程主机返回的应答,Nagios将根据配置以合适的行动进行回应。接着,Nagios将通过本地的机器进行测试。如果检查返回的值不正确,Nagios将通过一种或者多种方式报警。这也是根据事先的配置而采取的行动。

配置:

系统需求:

系统环境——linuxgcc;网络;web服务-CGIphp);

[root@tx nagios]# yum install  -y httpd php glibc glibc-common gd gd-develgcc


构建基本环境:

[root@tx nagios]# useradd nagios

[root@tx nagios]# groupadd nagcmd

[root@tx nagios]# usermod -a -G nagcmd apache

[root@tx nagios]# usermod -a -G nagcmd nagios


开始安装:

1)安装核心程序:nagios-3.2.3.tar.gz

# tar zxf nagios-3.2.3.tar.gz-C /usr/local/src


[root@tx nagios-3.2.3]#pwd

/usr/local/src/nagios-3.2.3


[root@tx nagios-3.2.3]#./configure --prefix=/usr/local/nagios --with-command-group=nagcmd

#指定nagios的安装目录,这里指定nagios安装到/usr/local/nagios目录

General Options:

-------------------------

      Nagios executable:  nagios

      Nagios user/group:  nagios,nagios

     Command user/group:  nagios,nagcmd

          Embedded Perl:  no

           Event Broker:  yes

      Install ${prefix}: /usr/local/nagios

               Lock file:  ${prefix}/var/nagios.lock

 Check result directory: ${prefix}/var/spool/checkresults

         Init directory:  /etc/rc.d/init.d

Apache conf.d directory: /etc/httpd/conf.d

           Mail program:  /bin/mail

                 Host OS:  linux-gnu


[root@tx nagios-3.2.3]#make all

[root@tx nagios-3.2.3]#make install

# make install用来安装nagios的主程序,CGIHTML文件

[root@tx nagios-3.2.3]#make install-init

#通过make install-init命令可以在/etc/rc.d/init.d目录下创建nagios启动脚本

[root@tx nagios-3.2.3]#make install-config

#make install-cofig命令用来安装nagios示例配置文件,这里安装的路径

[root@tx nagios-3.2.3]#make install-commandmode

#通过make install-commandmode命令来配置目录权限

[root@tx nagios-3.2.3]#make install-webconf

安装nagiosweb接口


3Nagios目录介绍

Nagios安装完成后,各个目录结构以及功能说明如下表所示:


wKioL1MBpquC5jxmAAIucFvkhpo643.jpg


# cd /etc/httpd/conf.d

# vim nagios.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>

[root@tx nagios]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

New password:

Re-type new password:

Adding password for user nagiosadmin


3)启动服务:

[root@tx libexec]# /etc/init.d/httpd restart

Stopping httpd:                                           [  OK  ]

Starting httpd:                                           [  OK  ]

[root@tx libexec]# /etc/init.d/nagios start

Starting nagios:/etc/bashrc

done.


打开浏览器访问:

[root@tx libexec]# firefox http://192.168.8.4/nagios&

        nagiosadmin

        密码是自己设的

-------------------------------------------------------

1、介绍nagios的配置文件:

[root@tx etc]# pwd

/usr/local/nagios/etc

[root@tx etc]# cd objects/

wKioL1MBqZ_Q0HNNAASS_Z6Dq8E300.jpg


2、配置文件之间的关系

nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。

成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:

第一:定义监控哪些主机、主机组、服务和服务组

第二:定义这个监控要用什么命令实现,

第三:定义监控的时间段,

第四:定义主机或服务出现问题时要通知的联系人和联系人组。


3、开始配置nagios

为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义对象创建独立的配置文件:

即为:

创建hosts.cfg文件来定义主机和主机组,被监控的主机

创建services.cfg文件来定义服务,监控的服务

用默认的contacts.cfg文件来定义联系人和联系人组,出了问题向谁发信息

用默认的commands.cfg文件来定义命令,监控用的命令

用默认的timeperiods.cfg来定义监控时间段,7x24;  workhour

用默认的templates.cfg文件作为资源引用文件


1templates.cfg文件

define host{

       name                           linux-server    #主机名称

       use                             generic-host    #use表示引用,也就是将主机generic-host的所有属性引用到linux-server中来,在nagios配置中,很多情况下会用到引用。

       check_period                    24x7            #这里的check_period告诉nagios检查主机的时间段

       check_interval                  5                #nagios对主机的检查时间间隔,这里是5分钟。

       retry_interval                  1               #重试检查时间间隔,单位是分钟。

       max_check_attempts              10               #nagios对主机的最大检查次数,也就是nagios在检查发现某主机异常时,并不马上判断为异常状况,而是多试几次,因为有可能只是一时网络太拥挤,或是一些其他原因,让主机受到了一点影响,这里的10就是至少试10次的意思。

       check_command                   check-host-alive  #指定检查主机状态的命令,其中“check-host-alive”在commands.cfg文件中定义。

       notification_period             workhours      #主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义,下面会陆续讲到。


       notification_interval           120            #在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟。如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为0

       notification_options            d,u,r          #定义主机在什么状态下可以发送通知给使用者,ddown,表示宕机状态,uunreachable,表示不可到达状态,rrecovery,表示重新恢复状态。

       contact_groups                  admins         #指定联系人组,这个“admins”在contacts.cfg文件中定义。

       register                        0

       }


define service{

       name                           generic-service   #定义一个服务名称

       active_checks_enabled           1  

       passive_checks_enabled          1  

       parallelize_check                1    

       obsess_over_service             1  

       check_freshness                0

       notifications_enabled            1              

       event_handler_enabled           1                

       flap_detection_enabled           1                  

       failure_prediction_enabled        1                

       process_perf_data               1                

       retain_status_information       1                  

       retain_nonstatus_information    1                      

       is_volatile                     0

       check_period                    24x7      #这里的check_period告诉nagios检查服务的时间段。

       max_check_attempts              3         #nagios对服务的最大检查次数。

       normal_check_interval           10       #此选项是用来设置服务检查时间间隔,也就是说,nagios这一次检查和下一次检查之间所隔的时间,这里是10分钟。

       retry_check_interval            2        #重试检查时间间隔,单位是分钟。

       contact_groups                  admins   #指定联系人组,同上。

       notification_options            w,u,c,r  #这个定义的是“通知可以被发出的情况”。wwarn,表示警告状态,uunknown,表示不明状态,ccriticle,表示紧急状态,rrecover,表示恢复状态。也就是在服务出现警告状态、未知状态、紧急状态和重新恢复后都发送通知给使用者。

       notification_interval           60       #在服务出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟。如果你认为,所有的事件只需要一次通知就够了,可以把这里的选项设为0

       notification_period             24x7     #指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。

        register                        0                    

       }


2resource.cfg文件


      resource.cfgnagios的变量定义文件,文件内容只有一行:

$USER1$=/usr/local/nagios/libexec

其中,变量$USER1$指定了安装nagios插件的路径,如果把插件安装在了其它路径,只需在这里进行修改即可。需要注意的是,变量必须先定义,然后才能在其它配置文件中进行引用。


3)理解Nagios宏及其工作机制

Nagios配置非常灵活,继承和引用是一大特征,另一个重要特征就是可以在命令行的定义里使用宏,通过定义宏,nagios可以灵活的获取主机、服务和其它对象的信息。

Macro),香港台湾称为巨集,是一种批量批量处理的称谓。

计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。

宏的工作机制

在执行命令之前,nagios将对命令里的每个宏替换成它们应当取得的值。这种宏替换发生在Nagios执行各种类型的宏时候。例如主机和服务的检测、通知、事件处理等。

宏的分类

默认宏、按需而成的宏、用户自定制宏等。

默认宏

主机IP地址宏

当在命令定义中使用主机或服务宏时,宏将要执行所用的值指向主机或服务所带有值。看下面这个例子,假定在check_ping命令定义里使用了一个主机对象,例如这样:

define host{

                 host_name                        ixdba

                 address               192.168.12.246

                 check_command              check_ping

                 ...

                 }

define command{

                 command_name    check_ping

                 command_line    /usr/local/nagios/libexec/check_ping -H$HOSTADDRESS$ -w 100.0,90% -c 200.0,60%

                 }

那么执行这个主机检测命令时展开并最终执行的将是这样的:

        /usr/local/nagios/libexec/check_ping -H192.168.12.246 -w 100.0,90% -c 200.0,60%



命令参数宏

同样你可以向命令传递参数,这样可以保证命令定义更具通用性。参数指定在对象(象主机或服务)中定义,用一个“!”来分隔,例如这样:

define service{

                 host_name                   linuxbox

                 service_description      PING

                 check_command             check_ping!200.0,80%!400.0,40%

                 ...

                 }

在上例中,服务的检测命令中含有两个参数(请参考$ARGn$),而$ARG1$宏将是"200.0,80%",同时$ARG2$将是"400.0,40%"(都不带引号)。假定使用之前的主机定义并这样来定义你的check_ping命令:

define command{

                 command_name    check_ping

                 command_line    /usr/local/nagios/libexec/check_ping -H$HOSTADDRESS$ -w $ARG1$ -c $ARG2$

                 }

那么对于服务的检测命令最终将是这样子的:

/usr/local/nagios/libexec/check_ping-H 192.168.12.246 -w 200.0,80% -c 400.0,40%


Nagios可用的全部的宏

主机宏

$HOSTNAME$  主机简称("web"),取自于主机定义里的host_name

$HOSTADDRESS$  主机地址。取自于主机定义里的address

服务宏

$SERVICESTATE$ 服务状态描述,有wuc

$SERVICEDESC$   对当前服务的描述

联系人宏

$CONTACTNAME$   表示联系人,在联系人文件中定义

通知宏

$NOTIFICATIONTYPE$    返回下面信息:("PROBLEM", "RECOVERY","ACKNOWLEDGEMENT", "FLAPPINGSTART","FLAPPINGSTOP", "FLAPPINGDISABLED","DOWNTIMESTART", "DOWNTIMEEND", or"DOWNTIMECANCELLED").

日期/时间宏

$LONGDATETIME$  当前的日期/时间戳

文件宏

$LOGFILE$  日志文件的保存位置。

$MAINCONFIGFILE$  主配置文件的保存位置。

其他宏

$ADMINEMAIL$  全局的管理员EMail地址

$ARGn$  指向第n个命令传递参数(通知、事件处理、服务检测等)Nagios支持最多32个参数宏


4commands.cfg文件

此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。这里并未列出文件的所有内容,仅仅介绍了配置中用到的一些命令。


#下面是notify-host-by-email命令的定义

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" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert:$HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$    #命令具体的执行方式,“-H $HOSTADDRESS$是定义目标主机的地址,这个地址在hosts.cfg文件中定义了。

       }

#下面是notify-service-by-email命令的定义

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\nAdditionalInfo:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **"$CONTACTEMAIL$

       }


#下面是check-host-alive命令的定义

        define command{

       command_name    check-host-alive    #命令名称,用来检测主机状态。

      command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w3000.0,80% -c 5000.0,100% -p 5     #这里的变量$USER1$resource.cfg文件中进行定义,即$USER1$=/usr/local/nagios/libexec

,那么check_ping的完整路径为/usr/local/nagios/libexec/check_ping-w 3000.0,80%”中“-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。“-c 5000.0,100%”中“-c”说明后面的一对值对应的是“CRITICAL”,“100%”是其临界值。“-p 1说明每次探测发送一个包。

       }

#下面是check_ftp命令的定义

        define command{

       command_name    check_ftp

       command_line    $USER1$/check_ftp -H $HOSTADDRESS$$ARG1$        #$ARG1$是指在调用这个命令的时候,命令后面的第一个参数。

       }

#下面是check_http命令的定义

        define command{

       command_name    check_http

       command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$

       }

#下面是check_ssh命令的定义

        define command{

       command_name    check_ssh

       command_line    $USER1$/check_ssh $ARG1$ $HOSTADDRESS$

       }

。。。。。。

5 hosts.cfg文件

此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息,一个配置好的实例如下:


define host{

       use                     linux-server          #引用主机linux-server的属性信息,linux-server主机在templates.cfg文件中进行了定义。

       host_name               web                              #主机名

       alias                    ixdba-web            #主机别名

       address                 192.168.12.251               #被监控的主机地址,这个地址可以是ip,也可以是域名。

       }


        define host{

       use                     linux-server

       host_name              mysql

       alias                    ixdba-mysql

       address                 192.168.12.237

       }


        define hostgroup{                                                     #定义一个主机组

        hostgroup_name  sa-servers                    #主机组名称,可以随意指定。

        alias           sa servers                            #主机组别名

        members         web,mysql                       #主机组成员,其中“web”、“mysql”就是上面定义的两个主机。

        }


6 services.cfg文件

此文件默认也不存在,需要手动创建,services.cfg文件主要用于定义监控的服务和主机资源,例如监控http服务、ftp服务、主机磁盘空间、主机系统负载等等。

#################  ixdba  web  #####################

define service{

       use                             local-service  #引用local-service服务的属性值,local-servicetemplates.cfg文件中进行了定义。

       host_name                       web               #指定要监控哪个主机上的服务,“web”在hosts.cfg文件中进行了定义。

       service_description             PING           #对监控服务内容的描述,以供维护人员参考。

       check_command                  check_ping!100.0,20%!500.0,60%    #指定检查的命令,check_ping命令在commands.cfg中定义,后跟两个参数,命令与参数间用!分割。

       }


        define service{

       use                            local-service

       host_name                       web

       service_description              SSH

       check_command                  check_ssh              # check_ssh命令也在commands.cfg中定义。

       }


        define service{

       use                            local-service

       host_name                       web

       service_description              SSHD

       check_command                  check_tcp!22

       }


(7) contacts.cfg文件

   contacts.cfg是一个定义联系人和联系人组的配置文件,当监控的主机或者服务出现故障,nagios会通过指定的通知方式(邮件或者短信)将信息发给这里指定的联系人或者使用者。


define contact{

       contact_name                    sasystem                 #联系人名称

       use                             generic-contact       #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义

       alias                          sa-system                 #联系人别名

       email                          ixdba@126.com  #联系人的邮件地址

       }

define contactgroup{

     contactgroup_name    admins #联系人组名称

     alias                system administrator group      #联系人组描述

     members             sasystem             #联系人组成员,其中“sasystem”就是上面定义的联系人

}

8 timeperiods.cfg文件

此文件只要用于定义监控的时间段,下面是一个配置好的实例:

#下面是定义一个名为24x7的时间段,即监控所有时间段

define timeperiod{

       timeperiod_name 24x7  

       alias           24 Hours A Day, 7 Days 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

       }

#下面是定义一个名为workhours的时间段,即工作时间段。

define timeperiod{

       timeperiod_name workhours

       alias           Normal Work Hours

       monday          09:00-17:00

       tuesday         09:00-17:00

       wednesday       09:00-17:00

       thursday        09:00-17:00

       friday          09:00-17:00

       }


9 cgi.cfg文件

此文件用来控制相关cgi脚本,如果想在nagiosweb监控界面执行cgi脚本,例如重启nagios进程、关闭nagios通知、停止nagios主机检测等,这时就需要配置cgi.cfg文件了。

所以只需在cgi.cfg文件中添加此用户的执行权限就可以了,需要修改的配置信息如下:


authorized_for_system_information=nagiosadmin

authorized_for_configuration_information=nagiosadmin

authorized_for_system_commands=nagiosadmin

authorized_for_all_services=nagiosadmin

authorized_for_all_hosts=nagiosadmin

authorized_for_all_service_commands=nagiosadmin

authorized_for_all_host_commands=nagiosadmin

10 nagios.cfg文件

       Nagios.cfg默认的路径为/usr/local/nagios/etc/nagios.cfg,是nagios的核心配置文件,所有的对象配置文件都必须在这个文件中进行定义才能发挥其作用,这里只需将对象配置文件在Nagios.cfg文件中进行引用即可。


log_file=/usr/local/nagios/var/nagios.log

log_file”变量用来定义nagios日志文件的路径。

cfg_file=/usr/local/nagios/etc/hosts.cfg

cfg_file=/usr/local/nagios/etc/services.cfg

cfg_file=/usr/local/nagios/etc/commands.cfg

cfg_file=/usr/local/nagios/etc/contacts.cfg

cfg_file=/usr/local/nagios/etc/timeperiods.cfg

cfg_file=/usr/local/nagios/etc/templates.cfg

cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。

object_cache_file=/usr/local/nagios/var/objects.cache

该变量用于指定一个“所有对象配置文件”的副本文件,或者叫对象缓冲文件

resource_file=/usr/local/nagios/etc/resource.cfg

该变量用于指定nagios资源文件的路径,可以在Nagios.cfg中定义多个资源文件。

status_file=/usr/local/nagios/var/status.dat

该变量用于定义一个状态文件,此文件用于保存nagios的当前状态、注释和宕机信息等。

status_update_interval=10

该变量用于定义状态文件(即status.dat)的更新时间间隔,单位是秒,最小更新间隔是1秒。

nagios_user=nagios

该变量指定了Nagios进程使用哪个用户运行。

nagios_group=nagios

该变量用于指定Nagios使用哪个用户组运行。

check_external_commands=1

该变量用于设置是否允许nagiosweb监控界面运行cgi命令,也就是是否允许nagiosweb界面下执行重启nagios、停止主机/服务检查等操作。“1为运行,“0为不允许。

command_check_interval=2

该变量用于设置nagios对外部命令检测的时间间隔,如果指定了一个数字加一个"s"(10s),那么外部检测命令的间隔是这个数值以秒为单位的时间间隔。如果没有用"s",那么外部检测命令的间隔是以这个数值的“时间单位”的时间间隔。

interval_length=60

该变量指定了nagios的时间单位,默认值是60秒,也就是1分钟,即在nagios配置中所有的时间单位都是分钟


例子:

定义一个new contact

        #vim/usr/local/nagios/etc/objects/contacts.cfg

                 define contact{

      contact_name                   matrix

      alias                          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                          matrix@localhost

      }


#vim /usr/local/nagios/etc/objects/remotehost.cfg

define host{

host_name             apache

alias                 apache

address               192.168.8.6

max_check_attempts    5

check_period          24x7

normal_check_interval  5

retry_check_interval   1

contact_groups         admins

notification_period    24x7

notification_options   d,u,r

}


#vim/usr/local/nagios/etc/objects/services.cfg

define service{

use            local-service

host_name       apache

service_description  remotehost_boot

check_command        check_nrpe!check_sda1

}


define service{

use             local-service

host_name       apache

service_description  apache_alive

check_command        check_ping!100.0,20%!500.0,60%

}


define service{

host_name       apache

service_description  check_tcp 80

max_check_attempts    5

check_period          24x7

normal_check_interval  5

retry_check_interval   2

contact_groups         admins

notification_period    24x7

notification_options   w,u,c,r

check_command       check_tcp!80

}

修改主配置文件,加入你自己编写的remotehost.cfgservices.cfg

                 vim /usr/local/nagions/etc/nagios.cfg            


cfg_file=/usr/local/nagios/etc/objects/remotehost.cfg

cfg_file=/usr/local/nagios/etc/objects/services.cfg

检查主配置文件,确定是否书写正确

                 #/usr/local/nagios/bin/nagios -v  /usr/local/nagions/etc/nagios.cfg


重新启动nagios服务:

                 # /etc/init.d/nagios restart

                          Runningconfiguration check...done.

                          Stoppingnagios: .done.

                          Starting nagios: done.

=====================================================================


利用NRPE外部构件监控远程主机

1、nrpe实现监控远程主机原理

   NRPE是nagios的一个功能扩展,它可在远程Linux/Unix主机上执行插件程序,通过在远程服务器上安装nrpe构件以及nagios插件程序,来向nagios监控平台提供该服务器的一些本地的情况。例如,cpu负载、内存使用、硬盘使用等等。

wKiom1MBrqfjZHaIAAEwU0FhZBM174.jpg

在被监控端安装所需的软件:  192.168.8.6


# wget http://192.168.8.4/nagios-bj/nagios-plugins-1.4.15.tar.gz


# wgethttp://192.168.8.4/nagios-bj/nrpe-2.12.tar.gz


#useradd -s /sbin/nologin     -M nagios


# pwd

/usr/local/src/nagios-plugins-1.4.15


# ./configure --prefix=/usr/local/nagios

# make

# make install


安装NRPE

  nagios的远程插件执行程序,负责收集被监控端的信息,并传输到监控端。

在客户端安装nrpe插件过程要比在服务端安装复杂,因为nrpe在客户端是作为一个守护进程在运行的

# tar xvzf nrpe-2.12.tar.gz -C/usr/local/src


                 # pwd

                          /usr/local/src/nrpe-2.12

# cd nrpe-2.12


# ./configure --prefix=/usr/local/nagios/

checking for SSL headers... configure:error: Cannot find ssl headers


# yum search ssl

openssl.i386 : The OpenSSL toolkit

openssl.i686 : The OpenSSL toolkit

openssl-devel.i386 : Files for developmentof applications which will

                  : use OpenSSL


# yum install -y openssl openssl-devel


# ./configure--prefix=/usr/local/nagios/  再跑一遍

General Options:

-------------------------

NRPEport:    5666

NRPEuser:    nagios

NRPEgroup:   nagios

Nagios user: nagios

Nagios group: nagios


# make all

# make install-plugin

# make install-daemon

# make install-daemon-config

# make install-xinetd


配置nrpe,添加nrpe服务:

                 #vim /etc/services

                          418nrpe        5666/tcp            # nrpe


                 # vim /etc/xinetd.d/nrpe

                          only_from       = 192.168.8.4  127.0.0.1


# /etc/init.d/xinetd restart

Stopping xinetd:                                          [  OK  ]

Starting xinetd:                                          [  OK  ]

# netstat -antpul | grep nrpe

# netstat -antpul | grep 5666

tcp       0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      32502/xinetd    


# cd /usr/local/nagios/etc/


# vim 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_sda1]=/usr/local/nagios/libexec/check_disk-w 20% -c 10% -p /dev/sda1

command[check_sda2]=/usr/local/nagios/libexec/check_disk-w 20% -c 10% -p /dev/sda2

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


本地测试:

# /usr/local/nagios/libexec/check_nrpe -Hlocalhost -c check_sda1

DISK OK - free space: /boot 82 MB (88%inode=99%);| /boot=11MB;78;88;0;98


# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2             9.7G2.8G6.5G 31% /

/dev/sda1              99M12M83M 12% /boot

tmpfs                 252M     0  252M   0% /dev/shm

/dev/hdc              2.9G2.9G    0 100% /iso

# df -i

Filesystem            Inodes   IUsed  IFree IUse% Mounted on

/dev/sda2            2621440  105226 2516214    5% /

/dev/sda1              26104      34  26070    1% /boot

tmpfs                  64413       1  64412    1% /dev/shm

=================================================================

监控服务器配置监控端的nrpe

[root@tx nagios-bj]# tar zxfnrpe-2.12.tar.gz -C /usr/local/src/


[root@tx nagios-bj]# cd/usr/local/src/nrpe-2.12/


[root@tx nrpe-2.12]# yum install -y opensslopenssl-devel


[root@tx nrpe-2.12]# ./configure--prefix=/usr/local/nagios/


[root@tx nrpe-2.12]# make all


[root@tx nrpe-2.12]# make install-plugin


手动测试:

[root@tx nrpe-2.12]# cd/usr/local/nagios/libexec/


[root@tx libexec]#  /usr/local/nagios/libexec/check_nrpe -H  192.168.8.6 -c check_sda1

DISK OK - free space: /boot 82 MB (88%inode=99%);| /boot=11MB;78;88;0;98


[root@tx objects]# pwd

/usr/local/nagios/etc/objects


# vim/usr/local/nagios/etc/objects/commands.cfg

# "check_nrpe" command define

define command{

      command_name    check_nrpe

      command_line    /usr/local/nagios/libexec/check_nrpe-H $HOSTADDRESS$ -c $ARG1$

}


# vim/usr/local/nagios/etc/objects/remotehot.cfg

# 192.168.8.6 linux_host

define host{

      host_name       apache

      address         192.168.8.6

      check_period    24x7

      check_interval  5

      retry_interval  1

      max_check_attempts      10

      notification_period     24x7

      notification_options    d,u,r

# d - down

# u - unreachable

# r - 从异常恢复正常

      contact_groups          admins

}


#vim /usr/local/nagios/etc/objects/services.cfg

# define 192.168.8.6  "/boot"

define service{

      use             local-service

      host_name       apache

      service_description     bootpartition

      check_command          check_nrpe!check_sda1

}


# define 192.168.8.6  "login users"

define service{

      use             local-service

      host_name       apache

      service_description     loginusers

      check_command          check_nrpe!check_users

}

# define 192.168.8.6  "/"

define service{

      use             local-service

      host_name       apache

      service_description     rootpartition

      check_command          check_nrpe!check_sda2

}


写完之后注意这个文件的权限:


在主配置文件要声明监控主机使用的文件:


检查配置文件的正确性:***

[root@tx etc]# /usr/local/nagios/bin/nagios-v /usr/local/nagios/etc/nagios.cfg

Total Warnings: 0

Total Errors:   0


[root@tx etc]# /etc/init.d/nagios restart


监控被监控端的服务:

要求:被监控端的服务一定要开启!~

http   ssh    mysql  ftp


----------------------------------------------------------------------------------------------------------------------------

http://bbs.it-adv.net/viewthread.php?tid=1010&extra=page%3D1