Nagios:企业级系统监控方案

 

在大多数状况下Cacti + RRDtool已经实现对系统各类参数的监测。但不少企业可能不知足于仅仅监测系统基本参数的需求,而是须要监测除基本参数以外的各类应用程序的运行情况。很显然在这种状况下对于一些系统或者是自定义的程序Cacti + RRDtool的局限性就显示出来了。而此时就轮到了另一种监测系统的登场。这就是咱们如今要介绍的Nagios。node

Nagios是一个功能很是强大的开源的系统网络监测程序,经过访问http://www.nagios.org能够了解其基本特性。Nagios不但可以实现对系统CPU,磁盘、网络等方面参数的基本系统监测,并且还可以监测包括SMTP,POP3,HTTP,NNTP等各类基本的服务类型。另外经过一些插件的安装和监测脚本自定义用户能够针对本身的应用程序实现监测,并针对大量的监测主机和多个对象部署层次化的监测架构。并且在监测信息统计方面,Nagios也可以和例如Cacti等程序结合来提供动态统计图表。除此以外Nagios拥有强大的日志管理系统,能够实现详细的日志记录以及回卷。针对架构的扩展和服务器数量的增长能够方便地实现监测区域扩展。最难能难得的是Nagios提供了优秀的事件报警功能,可以将一些突发的事件以电子邮件的形式通知管理员并可以针对出现的问题提供一些主动的解决建议和方案,并支持冗余监视。linux

相对于Mrtg以及RRDtool + Cacti而言Nagios最大的特色之一是其设计者将Nagios设计成监测的管理中心尽管其功能是监测服务和主机,可是他自身并不包括这部分功能的代码,全部的监测、监测功能都是由相关插件来完成的,包括报警功能。Nagios自身也没有报警部分的代码和插件,而是交给用户或者其余相关开源项目组去完成。对于Nagios这个监测中心来讲,细致的工做必然是交给其余的软件来实现。ios

下面咱们就开始实施Nagios的基本安装和配置。git

个人操做环境是:github

监测主机:IP:192.168.1.10 操做系统:RHEL 5u8 被监测主机:IP:192.168.1.220 操做系统:RHEL 5u8web

Nagios的全部软件包能够从其官方网站得到http://www.nagios.org/download/。这里不管是基本软件包仍是插件我都使用的最新版本。由于我使用的操做系统是Red Hat最新版本,原则上对于较新的操做系统版本一般咱们都选择配合最新版本的第三方软件以免兼容性问题。apache

首先在监测主机也就是192.168.1.10上安装Nagios的基本软件包,在安装Nagios以前首先须要保证系统中有下面这些软件包:Apache,gcc,gd,gd-devel,glibc,glibc-devel。能够用rpm –qa | grep的方式去逐一检查。浏览器

若是确认上面这些包都安装以后须要先创建Nagios的用户和nagcmd组:服务器

# useradd -m nagios                                [ Enter ]
# passwd nagios                                 [ Enter ]
并将nagios以及apache用户加入到nagcmd组中
# groupadd nagcmd                                   [ Enter ]
# usermod -G nagcmd nagios                          [ Enter ]
# usermod -G nagcmd apache                          [ Enter ]

完成以后将下载的nagios压缩包拷贝到/usr/local目录中,而且执行下面的步骤进行编译和安装:网络

# tar -zxf nagios-3.0.3.tar.gz                             [ Enter ]
# cd nagios-3.0.3                                   [ Enter ]

首先初始化和创建编译的环境

# ./configure --with-command-group=nagcmd          [ Enter ]

若是能看到下面的基本配置信息则说明初始的环境已经成功配置完成:

*** Configuration summary for nagios 3.0.3 06-25-2008 ***:
 
 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
 
 Web Interface Options:
 ------------------------
                 HTML URL:  http://localhost/nagios/
                  CGI URL:  http://localhost/nagios/cgi-bin/
 Traceroute (used by WAP):  /bin/traceroute
 
Review the options above for accuracy.  If they look okay,
type 'make all' to compile the main program and CGIs.

以后按照提示执行命令来进行编译:

# make all                                             [ Enter ]

若是编译过程顺利完成,则须要执行下面的命令:

# make install                                             [ Enter ]
# make install-init                                         [ Enter ]
# make install-config                                       [ Enter ]
# make install-commandmode                              [ Enter ]

分别用于安装二进制文件、初始化脚本、示例配置文件和设置目录权限。

# ls /usr/local/nagios                                     [ Enter ]

安装完成以后,在/usr/local/nagios目录下若是可以看到这些目录:bin etc sbin share var就表示Naigos安装成功了。

不过在完成以后还不能启动Nagios,由于还有一些操做须要执行。

Nagios的样例配置文件默认安装在/usr/local/nagios/etc目录下,这些样例文件能够配置Nagios使之正常运行,只须要作一个简单的修改。用你擅长的编辑器软件来编辑这个/usr/local/nagios/etc/objects/contacts.cfg配置文件,更改email部分,在nagiosadmin的联系人定义信息中的EMail信息为你的EMail信息以接收报警内容。

# vi /usr/local/nagios/etc/objects/contacts.cfg                    [ Enter ]

以后执行下面的命令来安装Nagios的WEB配置文件到Apache的conf.d目录下:

# make install-webconf                                     [ Enter ]

在Apache中使用基本认证的方式建立一个nagiosadmin的用户用于Nagios的WEB界面登陆。记下你所设置的登陆口令。该用户登陆口令和帐号信息会存储到/usr/local/nagios/etc/passwd.users文件中:

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin     [ Enter ]

在Nagios主程序安装以后会自动将相关apache配置文件放到/etc/http/conf.d目录下,文件名是nagios.conf。文件内容以下:

# cat /etc/httpd/conf.d/nagios.conf                            [ Enter ]
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
 
<Directory "/usr/local/nagios/sbin">
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
   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">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user

这就意味着只有经过认证用户才能够经过http访问/usr/loca/nagios/share以及/usr/local/nagios/sbin目录下内容。而这个可以经过认证的用户也就是nagiosadmin,以后能够重启apache来应用配置:

   # service httpd restart                                             [ Enter ]
# chkconfig --level 345 httpd on                                        [ Enter ]

刚才已经提到Nagios主程序只是一个控制中心,而可以起到服务监测和系统监测等功能的是众多Nagios的插件,没有插件的Nagios系统其实只是一个空壳。所以在安装了Nagios平台以后咱们还须要安装插件。

Nagios插件一样是在其官方网站下载,目前版本是1.4.12。我将下载的源码包放到/usr/local目录下,按照下面的步骤进行解压,编译和安装:

# tar -zxf nagios-plugins-1.4.12.tar.gz                                    [ Enter ]
# cd nagios-plugins-1.4.12                                          [ Enter ]
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios          [ Enter ]
# make                                                          [ Enter ]
# make install                                                      [ Enter ]

而后把Nagios加入到服务列表中以使之在系统启动时自动启动:

# chkconfig --add nagios                                               [ Enter ]
# chkconfig nagios on                                               [ Enter ]

执行下面的命令来验证Nagios的样例配置文件:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg             [ Enter ]

若是最后的结果相似下面而没有报错,能够启动Nagios服务:

Total Warnings: 0
Total Errors:   0
 
Things look okay - No serious problems were detected during the pre-flight check
# service nagios start

以后能够在浏览器上访问连接http://192.168.1.10/nagios,若是可以正常看到页面,证实主程序和插件都安装和配置成功(如图pic32.png所示)!点击“Service Detail”的连接来查看你本机的监视详情。此时可能须要给点时间让Nagios来检测你机器上所依赖的服务(如图pic33.png-pic34.png所示)。

实际上在装完Nagios以后此时网络监测工做只是刚刚开始而已,毫无疑问用户的需求不是只监测本地系统,而是大量的远程服务器上的系统情况以及服务运行情况。

有几种不一样方式来监测远程Linux/UNIX服务器的服务与属性。

其中之一是应用共享式SSH密钥,即运行check_by_ssh插件来执行对远程主机的检测。这种方法会致使安装有Nagios的监测服务器产生很高的系统负荷,尤为是要同时监测成百个主机中的上千个服务时,这是由于要创建大量的SSH链接的总开销会很高。

另外一种方法是使用NRPE外部构件监测远程主机。NRPE外部构件能够在远程的Linux/Unix主机上执行插件程序。若是是要象监测本地主机同样对远程主机的磁盘利用率、CPU负荷和内存占用率等状况下,NRPE外部构件将很是有用。

提到“外部构件”这个概念的时候须要说明一下,Nagios有许多"外部构件"软件包可供使用。外部构件能够扩展Nagios的应用并使之与其余软件集成,并且可以经过WEB接口来实现管理配置文件,监测远程主机(*NIX,Windows等),对远程主机的强制监测,减化并扩展告警逻辑等功能。

NRPE是一个可在远程Linux/Unix主机上执行的插件的外部构件包。若是你须要监测远程的主机上的本地资源或属性,如磁盘利用率、CPU负荷、内存利用率等时是颇有用的。最终效果和用check_by_ssh插件来实现的功能同样,可是他不须要占用更多的监测主机的CPU负荷,因此当你须要监测大量的主机时这个构件将起到很重要的做用(如图pic35.png所示)。

经过该图能够看出,咱们须要在被监测主机上部署NRPE,他至关于一个守护进程负责监听。而监测主机使用check_nrpe并经过SSL链接访问这个daemon,而后调用被监测方的check_disk,check_load等脚本获取信息并将结果传递到监测主机。同时这些脚本也有能力监测到其余主机的相关信息。

NRPE的使用环境有direct check和indirect check两种,direct check指的是NRPE运行在被监测主机的本地,而indirect check意味着运行NRPE的服务器只是一个中间人,他会继续经过刚才所说起的脚原本监测其余更多远程主机上的服务和系统信息。层次化的监测就是经过这种方式来实现。

为了简单说明问题,咱们将部署的是基于direct check的环境部署NRPE。因此下面的操做将会在被监测主机192.168.1.220上进行。

首先要创建Nagios帐号,这里我使用一样的密码:

# useradd nagios                                               [ Enter ]
# passwd nagios                                             [ Enter ]

以后按照和上面相同的步骤来编译和安装nagios-plugin软件:

# tar -zxf nagios-plugins-1.4.12.tar.gz                                [ Enter ]
# cd nagios-plugins-1.4.12                                      [ Enter ]
# ./configure                                                   [ Enter ]
# make                                                      [ Enter ]
# make install                                                  [ Enter ]

而后对相关的目录设置权限和所属用户组:

# chown nagios.nagios /usr/local/nagios                                [ Enter ]
# chown –R nagios.nagios /usr/local/nagios/libexec                    [ Enter ]

接着NRPE包放到/usr/local目录下,按照下面的步骤解压缩,而且编译和安装:

# tar -zxf nrpe-2.12.tar.gz                                        [ Enter ]
# cd nrpe-2.12                                                  [ Enter ]
# ./configure                                                   [ Enter ]
# make all                                                  [ Enter ]
# make install-plugin                                           [ Enter ]
# make install-daemon                                           [ Enter ]
# make install-daemon-config                                        [ Enter ]

同时安装NRPE的插件、进程以及进程范例配置文件。

接着执行命令将nrpe安装为依赖xinetd超级进程的非独立服务,那么前提是必须安装xinetd。不过通常系统都会自动安装该服务。 最后执行下面的命令将NRPE安装为xinetd超级进程所管理的进程之一。

# make install-xinetd                                          [ Enter ]

完成以后须要编辑/etc/xinetd.d目录下的nrpe文件,而且在最后添加容许实施监测的主机IP地址,这里是192.168.1.10,那么整个配置文件全文以下:

# cat /etc/xinetd.d/nrpe                                           [ Enter ]
service nrpe
{
        flags           = REUSE
        socket_type     = stream    
        port            = 5666    
        wait            = no
        user            = nagios
        group           = nagios
        server          = /usr/local/nagios/bin/nrpe
        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd
        log_on_failure  += USERID
        disable         = no
        only_from       = 192.168.1.10
}

而后修改/etc/services档,并添加下面的内容:

nrpe            5666/tcp                        # nrpe

重启服务:

# /etc/init.d/xinetd restart                                   [ Enter ]

此时检查nrpe服务启动情况以下:

# netstat -nl | grep 5666                                      [ Enter ]
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      
# lsof -i:5666
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
xinetd  9949 root    5u  IPv4  28764       TCP *:nrpe (LISTEN)

如今最关键的一步是确保安装的NRPE进程可以正常工做,因此要使用check_nrpe插件进行测试。在监测主机192.168.1.10上执行命令:

# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.220            [ Enter ]

若是可以出现以下的版本号显示,则证实在被监测主机上配置的NRPE已经正常工做,而且监测主机可以经过SSL与被监测主机上的NRPE正常通讯。 NRPE v2.12

可是若是出现一些error信息,则须要检查配置,检查的内容包括主要有下面几项:

  1. nrpe的版本号和nrpe-plugin的版本号是否一致。版本不一致极有可能形成该问题。
  2. SSL是否被关闭。确保NRPE以及check_nrpe插件在编译的时候都加入了SSL支持,同时在运行时都开启SSL。不过通常编译过程当中默认都会假如支持SSL选项。
  3. 确保NRPE的配置文件nrpe.cfg文件能够被nagios用户读取而且nagios用户能够执行nrpe二进制程序。
  4. 确认在/etc/xinetd.d/nrpe文件的“only_from=x.x.x.x”中x.x.x.x是访问NRPE的监测主机的IP地址。

NRPE的配置文件/usr/local/nagios/etc/nrpe.cfg中实际上已经包含了一些对系统进行监测的命令。因为NRPE安装在本地,这些命令能够直接协助NRPE从被监测主机获取系统和服务运行情况,并且都是在刚才经过nagios-plugin安装的。

若是从监测主机上运行这些命令进行监测,一切正确能够看到下面的效果。那么不难看出其中的奥妙,即实际上彻底能够利用在/usr/local/nagios/libexec/中的各类脚本并添加各项参数来定制本身的监测内容。(如图pic36.png所示)

那么到此为止咱们就完成了在远程被监测主机上安装和配置RNPE的任务。如今须要在监测主机,也便是192.168.1.10上面安装和配置check_nrpe插件。

步骤大概分为:

第一,安装check_nrpe插件; 第二,为使用check_nrpe插件创建Nagios命令定义;   第三,创建Nagios host以及服务定义

因为咱们刚才已经在安装Nagios以后安装了nrpe,因此实际上第一个步骤已经完成。

如今开始执行第二步骤——创建命令定义:

这里须要花点时间特别说明一下Nagios利用命令定义进行监测的原理:

在安装nagios成功以后能够看到在/usr/local/nagios/libexec目录下有不少可执行监测程序或者脚本,其名称相似check_icmp这样的格式。Nagios并无提供针对这些监测程序的脚本的说明文档,想了解这些脚本如何工做,须要经过–h参数,显示其使用方法和参数,并会给出一些实际的例子。例如:./check-disk –h。

那么咱们能够尝试按照其中一个例子执行该脚本,执行和显示的结果以下:

# ./check_disk -w 10% -c 5% -p /tmp -p /var -C -w 100000 -c 50000 -p /dev/sda3          [ Enter ]
DISK OK - free space: / 2124 MB (41% inode=90%);| /=2955MB;4820;5088;0;5356

能够看到状态值“OK”,以及一些详细的数据信息。

上述操做说明这些插件都是能够独立使用。Nagios有不少个cfg配置文件用来定义各式各样的信息,其中template.cfg是用来定义主机和服务信息的模板文件,在目录/usr/local/nagios/etc/objects下。咱们将按照这些模板来创建新的配置文件,例如一样目录下的server.cfg来定义监测内容,那么这些插件就会从server.cfg中调用。例如要定义一个须要监测的SSH服务,名称为TestSSH:

按照其格式:

define service { 
host_name x.x.x.x
service_description check_ssh 
    ……
check_command check_ssh 
}

host_name项说明该服务所在的主机名,service_description项为服务的说明信息,这项内容会显示在nagios页面中。check_command项说明要使用的命令,这个例子中的命令check_ssh就是一个插件了。这个服务定义明确了nagios在须要监测的内容和监测的手段,即便用check_ssh插件来监测主机x.x.x.x上的ssh服务状况。

除了直接使用插件来作check_command项的参数之外,还可使用本身定义的命令来作check_command参数。例如,定义一个须要监测的主机,名字是localhost.localdomain:

define host { 
host_name localhost.localdomain
alias remotehost01
address 192.168.0.1 
……
check_command check-host-alive 
    ……
}

在此例中,check_command项的参数“check-host-alive”并不是一个插件,而是在commands.cfg档中定义的一个命令。那么在相同目录的command.cfg中对该命令又被定义为:

# 'check-host-alive' command definition 
define command{ 
command_name check-host-alive 
command_line $USER1$/check_ping -H 192.168.1.220 -w 300.0,80% -c 500.0,100% -p 1 
}

首先,$USER1$这个参数在resource.cfg中定义,这个值会指向插件的目录(如:/usr/local/nagios/libexec)。“-H 192.168.1.220”定义目标主机的地址,-w说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。“-c 500.0,100%” 其中“-c”说明后面的一对值对应的是" CRITICAL",“100%”是其临界值。“-p 1”说明每次探测发送一个包。

因此归根结底就是说经过ping这种方式来证实某台主机处于alive状态。

而至于如何监听非默认端口的服务。下面我也举例说明一下这个问题:

例如:现需检查的一个运行在8080埠上的http服务。那么咱们能够对commands.cfg档中对关于check_http的声明作以下修改。

# 'check_http' command definition 
define command{ 
command_name check_http 
command_line $USER1$/check_http -H 192.168.1.220 -p $ARG1$ 
}

其中$ARG1$是指在调用这个命令的时候,命令后面的第一个参数。

再把services.cfg中,对应服务的检测命令后面加一个参数:

define service { 
host_name ...
...
check_command check_http!8080
}

这样就能够对8080埠的http服务进行监测了。若是要添加多个参数的时候,也能够相似操做。 综上所述,插件的安装和调用方法也就举例介绍完毕了,你们在使用中也可使用本身写的检测脚原本完成比较特殊的检测功能。

因此按照上面所叙述的原理,咱们开始第二步和第三步的配置,为使用check_nrpe插件创建Nagios命令定义以及服务定义:

修改配置文件/usr/local/nagios/etc/objects/command.cfg并增长下面的内容:

define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

而后针对要监测的目标主机创建主机定义,主机定义的项目和内容有不少,因此定义的项目以下:

host_name host_name        # 简短的主机名
alias alias                 # 别名,能够更详细的说明主机
address address         # ip地址,固然若是DNS服务可用也能够写名称。若是你不定义该值,nagios
将会用host_name去寻找主机。
parents host_names          # 上一节点的名称,也就是指从nagios服务器到被监测主机之间通过的节点,
        能够是路由器、交换机、主机等等。这个节点也要定义而且要被nagios监测。
hostgroups              # 简短的主机组名称
check_command           # 检查命令的简短名称,若是此项留空,nagios将不会去判断该主机是否alive。 
max_check_attempts      # 当检查命令的返回值不是“OK”时,重试的次数
check_interval          # 循环检查的间隔时间。
active_checks_enabled      # 是否启用“active_checks”
passive_checks_enabled  # 是否启用“passive_checks”,及“被动检查”
check_period                # 检测时间段简短名称,此处只是名称,具体的时间段要写在其余的配置文件
obsess_over_host            # 是否启用主机操做系统探测。
check_freshness             # 是否启用freshness测试。freshness测试是对于启用被动测试模式的主机而言
的,其做用是按期检查该主机报告的状态信息,若是该状态信息已通过期,
freshness将会强制做主机检查。
freshness_threshold        # fressness的临界值,单位为秒。 若是定义为0,则为自动定义。
event_handler           # 当主机发生状态改变时,采用的处理命令的简短的名字
(能够在commands.cfg中对其定义) 
event_handler_enabled     # 是否启用event_handler
low_flap_threshold          # 抖动的下限值。所谓抖动,主要定义了这样一种现象:在一段时间内,主机
        (或服务)的状态值频繁发生变化,相似一个问题风暴或者一个网络问题。 
high_flap_threshold         # 抖动的上限值
flap_detection_enabled     # 是否启用抖动检测
process_perf_data           # 是否启用processing of performance data
retain_status_information   # 程序重启时,是否保持主机状态相关的信息
retain_nonstatus_information # 程序重启时,是否保持主机状态无关的信息
contact_groups          # 联系人组(这个组会在contactgroup.cfg文件中定义),在此组中的联系人都
                        会受到该主机的告警提醒信息。
notification_interval       # 告警临界值。达到这次数以后,才会发送该机的报警提醒信息。 
notification_period         # 告警时间段
notification_options        # 告警包括的状态变化结果
notifications_enabled       # 是否启用告警提醒功能
stalking_options [o,d,u]     # 持续状态检测参数,o = 持续的UP状态,
d = 持续的DOWN状态,and u = 持续的UNREACHABLE状态.

固然在企业的监测环境中不少项目可能都不必定可以用上,这里我只是经过一个简单的例子说明其用法就行了。因此修改/usr/local/nagios/etc/objects/localhost.cfg文件,于该文件的“HOST DEFINITION”部分,在原来的基础上增长本身的主机定义内容:

define host{
        use linux-box                                  ; Inherit default values from a template
        host_name localhost                            ; The name we're giving to this server
        alias RHEL5u2                                  ; A longer name for the server
        address 192.168.1.220                          ; IP address of the server
        }

同时在“HOST GROUP DEFINITION”部分,将192.168.1.220这台主机加入到linux-servers这个hostgroup中。若是有多台主机都属于这个hostgroup,能够用逗号将其隔开。如下是我添加的内容:

define hostgroup{
        hostgroup_name  linux-servers  ; The name of the hostgroup
        alias           Linux Servers  ; Long name of the group
        members         192.168.1.220  ; Comma separated list of hosts that belong to this group
        }

而在最后的“SERVICE DEFINITION”部分,全部未注释的部分其实是关于对localhost也就是本机所要监测的内容。其格式和语法就是我在提到Nagios监测原理方面举例说明的内容。对于localhost来讲不须要修改了,可是能够把他的内容复制到自定义的cfg档中并照葫芦画瓢修改为对192.168.1.220这台 主机的命令定义。咱们下面就来作这样的操做:

在/usr/local/nagios/etc/objects目录下针对监测的服务创建服务定义,创建一个新的文件remotehosts.cfg,加入下面内容:

下面是自定义的:

define service{
use generic-service
host_name localhost
service_description CPU Load
check_command check_nrpe!check_load
}

表示监测远程主机的CPU负载。

若是要监测当前在远程主机的磁盘空间,则加入:

define service{
use generic-service
host_name localhost
service_description /dev/sda3 Free Space
check_command check_nrpe!check_disk /dev/sda3
}

若是要监测当前远程主机的僵死进程数,则加入:

define service{
use generic-service
host_name localhost
service_description Zombie Processes
check_command check_nrpe!check_zombie_procs
}

同时使用vi编辑器末行模式的r功能读取当前目录下的localhost.cfg档,删除“HOST DEFINITION”和“HOST GROUP DEFINITION”部分。只保留“SERVICE DEFINITION”部分并修改成下面的内容:

第一个命令定义:

经过check_ping脚本确保监测主机和被监测主机的连通性,若是网络丢包率到达20%则产生warning警告,到达60%则产生critical警告:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 PING REMOTE HOST
        check_command                  check_ping!100.0,20%!500.0,60%
        }

第二个命令定义:

监测远程主机根分区磁盘情况,若是根分区可用空间低于20%会产生Warning警告,若是可用空间低于10%则产生Critical警告:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 Root Partition of Remote Server
        check_command                  check_local_disk!20%!10%!/
        }

第三个命令定义:

监测远程主机当前的登陆用户数量,若是登陆数量大于20用户则产生warning警告,若是大于50则产生critical警告:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 Current Users of Remote Server
        check_command                  check_local_users!20!50
        }

第四个命令定义:

监测远程主机当前的进程总数,若是大于250进程则产生warning警告,若是大于400进程则产生critical警告:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 Total Processes of Remote Machine
        check_command                   check_local_procs!250!400!RSZDT
        }

第五个命令定义:

监测远程主机当前的本地负载量:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 Current Load of Remote Machine
        check_command                  check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }

第六个命令定义:

监测远程主机swap文件系统使用量,若是swap可用空间低于20%则产生warning警告,低于10%则产生critical警告:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 Swap Usage of Remote Server
        check_command                   check_local_swap!20!10
        }

第七个命令定义:

监测SSH链接可用性,但消息通知功能默认被关闭,由于并非全部用户都有权限SSH。

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 SSH of Remote Machine
        check_command                   check_ssh
        notifications_enabled               0
        }

# Define a service to check HTTP on the remote machine.
# Disable notifications for this service by default, as not all users may have HTTP enabled.

第八个命令定义:

监测远程主机上的HTTP服务,但相似于SSH,该服务的消息通知功能默认关闭。

define service{
        use                             local-service         ; Name of service template to use
        host_name                       192.168.1.220
        service_description                 HTTP of Remote Machine
        check_command                   check_http
        notifications_enabled               0
        }

保存该档后,按照其余cfg文件的权限和属性为该文件指定所属用户和组:

# chown nagios.nagios /usr/local/nagios/etc/objects/remotehosts.cfg         [ Enter ]

至于想定义的其余内容,我就再也不向该文件中添加了,我想你们应该已经掌握了这种命令定义的方法了。

最后不要忘了一步关键的操做——在主配置文件中定义Nagios启动以后读取刚才修改的这些配置,也就是确保刚才修改的配置文件在nagios主配置文件/usr/local/nagios/etc/nagios.cfg中都有正确指定,信息以下:

cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/remotehosts.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

最后校验配置文件正确性:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg             [ Enter ]

若是校验彻底经过,则重启Nagios服务:

# chkconfig --level 345 nagios on                                      [ Enter ]
# service nagios restart                                                [ Enter ]

此时若是再经过浏览器访问http://192.168.1.10/nagios,咱们就能够看到被监测主机192.168.1.220上所反应出来的内容信息。下面是几个效果图:(如图pic37.png-pic39.png所示)

到此为止,Nagios的基本原理和强大的功能就基本介绍完了。而事实上Nagios不但能在现有的功能基础上实现功能扩展,并且还可以实现和第三方软件的结合,例如和前面所介绍的MRTG和Cacti联用来构建动态显示图标;同时按照前面所说明的内容能够配置各类事件级别的邮件通知功能。但由于篇幅的限制咱们会在下次有机会的时候向你们介绍。尽管在配置的难度上显得比较高,可是其强大的功能和灵活性却给咱们留下了极深的印象。所以这也是在一些中型甚至是大型企业中所推崇并逐步采用的一种监测方案。

各类系统监测优缺点比较和总结:

经过该文章的介绍,咱们大体了解了多张不一样但都比较经常使用的系统监测解决方案。下面能够简单比较几种不一样监测方法的特色。

在大多数监测环境中,采用SNMP都是公用的标准和协议。因此除了Nagios以外,基本上全部的监测环境也是围绕SNMP协议部署,对SNMP协议的支持是目前市面上众多网管软件的最基本要求。

经过SNMP 结合闭源商业软件的部署监测的方案:

拥有配置简单且功能也相对强大的优势,可是缺点是要受到闭源商业软件在功能和灵活性上的限制,并且意味着企业须要为这种类型的监测支付高昂的软件使用成本;

经过SNMP 结合MRTG实现部署监测方案:

优势是费用方面的支出基本为零,但缺点是配置过程要显得至关复杂和繁琐,并且因为MRTG自己的一些限制功能比较单一。

经过SNMP 结合 Cacti和RRDtool实现部署监测方案:

优势是一样不须要支付高昂的费用,并且相对于单纯使用Mrtg而言功能方面大大加强,显示的效果方面也要比Mrtg好不少,同时在监测内容和灵活性方面也有了很大的改善,相信这种方案可以被不少中小型企业所接受。但最大的问题是在部署的难度增长,对操做管理人员技术方面的要求也大大增长。所以这种方案也可以做为一种折中的选择。

经过Nagios实现监测方案:

这是几种不一样方案中惟一能够不使用SNMP的,可是功能上丝绝不比传统的使用SNMP协议的监测软件逊色,甚至实现了更多实用的特性,更况且结合插件也能支持SNMP。另外Nagios的部署和定义很是灵活,和其余软件的兼容性方面也表现出不少创造性的优点。显然在几种监测方案中,这种监测方案无疑是比较优秀的!但缺点天然也不言而喻,强大的功能是以更为繁琐和更高的技术要求做为代价,若是针对一个大型网络要将Nagios全部的功能都一一实现,显然对用户的技术水准方面要求会比较高。

总之,在企业系统和应用监测的领域中,尽管有各类不一样类型的监测要求,尽管也相应地也提供了各类不一样类型的监测部署方案。但无论是利用基本的SNMP实现简单和单一的监测,仍是利用像Cacti + RRDtool甚至Nagios这样的软件实现功能更增强大的监测部署;无论是所有利用开源软件自己实现全部监测功能,仍是和像Whatsup和Solawins等这种闭源商业软件结合部署监测环境——各类开源软件以及开源项目上都表现出了极强的共通性和兼容性,并且在功能上丝毫没有逊色。彻底可以支撑和知足企业级的监测部署环境要求!

经过本文笔者但愿可以为更多中小企业甚至大型企业用户在部署监测环境方面提供一些有用参考和帮助。但愿他们可以藉助开源方案量体裁衣地打造适合于本身的企业级监测系统。

关于做者

王基立,现工做于红帽软件(北京)有限公司,具有多年的售前解决方案规划与售后技术支持经验,熟悉红帽全部平台类产品和解决方案。现常驻深圳任红帽软件华南区解决方案架构师一职,主要负责红帽解决方案在华为、中兴等大型电信企业用户环境中的设计、规划、应用以及相关售前工做。同时也为包括各高级分销商以及金融、政府、教育等各方面在内的管道和区域用户提供相关解决方案、技术咨询、技术培训、现场实施、技术支持等服务。

原文地址:http://www.infoq.com/cn/articles/nagios-enterprise-level-system-monitor 

             https://github.com/mconigliaro/NagiosPluginsNT 

             https://github.com/robertmircea/nagios-nsca-client