1. 问题的由来

    对于一个网站来说,外部用户能够看到就是该网站的页面。网站页面能否被正常访问,

 以及显示是否正常势必会成为网站整体水平最直接的外在表现。

    那么,如何才能在第一时间检测到网页是否正常,并且给相应的技术人员发出报警来及

时解决问题,而不是等接到用户抱怨的电话后才在慌忙中仓促的解决问题呢?解决这个问题

的关键就是要在第一时间发现问题,发现那些不能显示的网页或是显示不正常的网页,并及

时发出报警。当然我们可以通过人工的方法去监测,但对于一些大型的、复杂的网站来说就

不是很合适了,我们可以使用监控软件来解决这个问题。 我所使用的就是Nagios软件,它

提供的插件(Plugins)中有相应的命令可以完成对网页的监控。

 

2. 如何通过Nagios解决此类问题

    对于Nagios、NRPE 以及Nagios Plugins 的安装配置网站的资料很多,在我的Blog 中

也有相应的文章可以参考,在这里就不再过多的说明了。

    想使用Nagios监控网页状况,Nagios插件中的一个命令不得不被提及,那就是

check_http,我没可以使用它来检查网页是否正常、可用。该命令的具体说明和用法如下。

             选  项                                   说  明

        -H, --hostname=ADDRESS                      主机名或域名

        -I, --IP-address=ADDRESS server的IP地址,用于在不能DNS 的

                                                    情况下

        -p, --port=INTEGER                          端口号,默认80

        -u, --url=PATH                              url,默认是/

        -w, --warning=DOUBLE                        warning状态的响应时间,单位是秒

        -c, --critical=DOUBLE                       critical状态的响应时间,单位是秒

        -t, --timeout=INTEGER                       连接超时时间,默认 10秒

 

举一个简单的实例,一个网站的域名是www.testhost.test,端口是默认80,需要监测

它的主页/index.html,warning 时间和critical 时间、 timeout时间使用默认值,不设置。

具体命令书写如下。    

    $ ./check_http -H www.testhost.test -u /index.html 

    HTTP OK HTTP/1.1 200 OK - 115357 bytes in 1.717 seconds |time=1.716934s;;;0.000000 

     size=115357B;;;0

    

    可以看出该网页是正常的,如果网页地址不对或显示有错误也会有相应的反馈信息。

3. 具体配置Nagios来监控网页

    通过Nagios监控网页一般有两种方式,一种是直接通过Nagios监控主机配置监控服务

监视网页;另一种是在某一安装了NRPE 的客户端主机上配置监控命令,通过NRPE监控网页

情况,再将结果传回给Nagios监控主机。通过一个装有NRPE 的客户端作为桥 的方式可以

使主机更加安全,减轻Nagios主机的负担,同时可以避免在Nagios主机上配置DNS等不必

要的麻烦。

方式一、直接通过Nagios主机监控网页。

nagios <wbr>监控网页

 

方式二、通过NRPE监控网页。

 

nagios <wbr>监控网页

方式一的配置十分简单,只需要在Nagios 的配置文件里添加一个服务即可。

    配置内容如下   

    修改./etc/objects/commands.cfg,增加如下内容。

      #'check_http' check web page 
      define command{ 
              command_name    check_webpage 
              command_line    $USER1$/check_http $ARG1$ 
              }

    修改./etc/objects/localhost.cfg,增加如下内容。

      define host{ 
              use                     linux-server             
              host_name               web_pages 
              alias                   web_pages 
              address                 127.0.0.1 
              }

      #the check web pages on the remote host. 
      define service{ 
              use                     generic-service 
              host_name                    web_pages      ;主机名,为了便于显示可 
      以定义一个虚拟的host 
              service_description     web page1 
              check_command           check_webpage!-H 
www.testhost.test -u  
      /index.html 
              }

    

    方式二的配置方法略复杂一些,需要修改两台主机的配置文件。

    修改NRPE 的配置文件,增加如下内容。

      #check webpage 
      command[check_webpage]=/usr/local/nagios        libexec/check_http -H  
      
www.testhost.test -u /index.html

    

    修改Nagios配置文件,增加如下内容。

      #the check_apache on the remote host. 
      define service{ 
              use                     generic-service 
              host_name               hostname 
              service_description     web page 
              check_command           check_nrpe! check_webpage

 }

    

    以上仅仅是举个简单的例子来说明,当然实际环境要更复杂、页面要更多,可以通过增

加服务(service)的方式将其一一纳入监控范围。