前,对web服务的监控,主要有nagios插件check_http,以及第三方软件webinject

原文地址:http://hancang2000.blog.sohu.com/56964734.html

check_http可以完成常规的web服务检查。
如:
A、页面请求的响应时间是否符合要求(相关选项:-t ,-w,-c )
B、页面请求响应是否正确(相关选项为:-e 。常用的选项值为200,301或者302)
C、URL的检查(相关选项为:-H,-I,-u)
D、页面大小是否符合期待值(相关选项为:-m)

它的具体使用方法,可以查看它的帮助:
$ sudo ./check_http  -h
Usage: check_http -H | -I [-u ] [-p ]
                  [-w ] [-c ] [-t ] [-L]
                  [-a auth] [-f ] [-e ]
                  [-s string] [-l] [-r | -R ]
                  [-P string] [-m :] [-4|-6] [-N]
                  [-M ] [-A string] [-k string]
NOTE: One or both of -H and -I must be specified
帮助里有各个选项的详细说明,这里省略了。

在nagios里配置service前,一般先在命令行下进行测试:
$ sudo ./check_http -H cn.yahoo.com -u / -w 10 -c 20 -t 30
HTTP OK HTTP/1.1 200 OK - 77530 bytes in 0.021 seconds |time=0.021011s;10.000000;20.000000;0.000000 size=77530B;;;0

补充说明:
-H cn.yahoo.com 和 -u / 表示检查的URL是: http://cn.yahoo.com/  ;
-w 10 表示超过10s响应则发出warning报警;
-c 20 表示超过20s响应则发出critical报警;
-t 30 表示超过30s响应则发出timeout报警;

通过命令行得到的测试结果,你知道了:该URL响应的HTTP信息是200,页面大小为77530 bytes 。

常用的HTTP响应信息如下:
200 OK:一切正常,对GET和POST请求的应答文档跟在后面。
301 Moved Permanently:客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
302 Found:类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
404 Not Found:无法找到指定位置的资源。
500 Internal Server Error:服务器遇到了意料不到的情况,不能完成客户的请求。
其他HTTP信息表示的含义请查阅相关文档。


命令行测试获取到以上信息后,在nagios里定义监控任务:
#定义host:
define host {
    use colo-vhost-domains
    host_name cn.yahoo.com
    alias cn.yahoo.com
    address cn.yahoo.com
}
#定义contact和contactgroup:
define contact {
    use base-web-contact
    contact_name web-L1-mail
    alias web-L1-mail
    host_notification_options n
    service_notification_options w,u,c,r,f
    email mymontest@yahoo.com.cn
    register 1       ; 0 = disable, 1 = enable
}
define contactgroup {
    contactgroup_name web-L1
    alias web-L1
    members web-L1-mail
}
#定义服务检查的command(这里的ARG[1,2,3...]表示命令的参数,在service的定义中用“!”顺序隔开各个参数):
define command {
    command_name check_http_vhost_url_200_OK
    command_line $USER1$/check_http -H $ARG4$ -w $ARG1$ -c $ARG2$ -m $ARG3$ -I $HOSTADDRESS$ -t 30 -e 200 -u '$ARG5$'

#最后定义service:
define service {
    use  base-http-ycn
    service_description cn_homepage
    host_name cn.yahoo.com
    servicegroups ycn_check_url_ok
    contact_groups  web-L1
    check_command  check_http_vhost_url_200_OK!10!20!70000!cn.yahoo.com!/
    register  1
}

这里定义的service,在命令行对应的检查命令为:
$sudo ./check_http -H cn.yahoo.com -w 10 -c 20 -m 70000 -I cn.yahoo.com -t 30 -e 200 -u /

即:http://cn.yahoo.com/ 页面响应应为200,页面大小不小于70K;
超过10s才响应时为warning,超过20s才响应时为critical,超过30s则为timeout;
报警时,通知 web-L1这个组的联系人。


整合webinject,增强web服务监控。
webinject是一个用perl语言写的第三方工具,其官方网站为 http://www.webinject.org/ 。
下载解压后即可使用。如果报错,请确认你的系统的perl环境是否满足webinject的要求。

webinject可以模拟用户的 交互行为 来检测你提供的web服务是否正常。
它的大概工作原理是模拟用户 get/post 一个URL,服务器处理后返回一个页面结果,webinject检查这个页面中
是否包含某个特定的字符串,来说明服务的响应是否是正确的。

注意:就目前来说,webinject不支持 中文字符串 作为关键字来检查!

目前,主要应用它来检测(mail,mybox,myweb,photo)登陆服务和(web,music,news...)搜索服务是否正常。

在命令行下,webinject的使用,主要包含以下三个文件:
webinject.pl  --  perl语言写的检查程序,系统的perl环境需满足它的要求
config.xml  -- 主配置文件,定义的一些全局参数
testcase.xml -- 检查步骤的xml文件(此文件名可任意,这里假定为testcase.xml)

其中,最关键的是 testcase.xml 这个文件。
它将用户的动作设计成一个一个步骤,然后检查服务器的响应是否是期望的结果。
因此,它的设计,将直接影响到检测结果的有效性和准确性。
日常的维护,也是维护这个文件。

命令行下的使用,一般为:
$sudo ./webinject.pl --config=config.xml testcase.xml
或者:$sudo ./webinject.pl -c config.xml testcase.xml

下面来说明webinject和nagios整合的一般使用过程:

A、首先,将主配置文件 config.xml 配置成跟nagios整合的方式。

 
  

注意reporttype是nagios。
这样就表示webinject会将它的检测结果报告给nagios,由nagios来展现它的检查结果。
另外,这里还指定了默认的testcase文件是 zjwtest.xml 。
即当你不指定testcase文件时,它会使用此文件来做检测。当然,你也可以指定真正的testcase文件。

B、设计testcase文件,根据用户的动作来模拟出各个步骤
以P4P的一个testcase文件为案例来说明。
 
  

说明:
id=1,2,3... -- 标识是第几个步骤

在 case 1 中,模拟用户去get:http://agent.p4p.cn.yahoo.com/ 。然后检查返回的结果中是否包含“loginsys”这个字符串。
如果包含,则说明检测是 Passed 的,也就是用户正常打开了这个页面;否则说明用户打开页面失败。

在 case 2 中,模拟用户提交登陆信息。然后检查服务器处理后返回的结果中是否包含“frame.htm”这个字符串。
如果包含,说明用户提交的登陆信息是正确的,即登陆成功,转向登陆后的一个页面。

在 case 3中,模拟用户get:http://agent.p4p.cn.yahoo.com/tts/index.php?type=2 。检查返回结果中是否包含“test for new mysql”。
验证用户登陆成功后,用户已进入相应的页面,该页面包含“test for new mysql”这个字符串。

C、在nagios中定义监控任务
#定义host
define host {
    use cnb-host
    host_name agent.p4p.cn.yahoo.com
    alias agent.p4p.cn.yahoo.com
    address agent.p4p.cn.yahoo.com
}
#定义contact和contactgroup
define contact {
    use base-contact
    contact_name p4p-L1-mail
    alias p4p-L1-mail
    host_notification_options n
    service_notification_options w,u,c,r,f
    email hui.xiah@alibaba-inc.com yuan.liu@alibaba-inc.com
    register 1       ; 0 = disable, 1 = enable
}
define contactgroup {
    contactgroup_name p4p-L1
    alias p4p common
    members p4p-L1-mail
}
#定义command
define command {
    command_name    webinject
    command_line    /home/y/conf/nagios/webinject/webinject.pl -c $ARG1$ $ARG2$
}
#定义service
define service {
    use base-http-ycn
    service_description p4p_agent
    host_name agent.p4p.cn.yahoo.com
    servicegroups http
    contact_groups p4p-L1
    check_command webinject!config.xml!oldp4pagent.xml
    register 1   ; 0 = disable, 1 = enable
}

这样,一个模拟用户登陆的监控服务就配置完了。
对应地,命令行下的检测命令为:
$sudo ./webinject.pl -c config.xml oldp4pagent.xml


搜索结果返回页的监控相对简单。
 
  

日常的维护,主要是根据app ops的调整,修改url的相关参数,和verifypositive的关键字。
关键字选择的原则:
一是有代表性,能说明页面的性质是正常的还是不正常的。
二是相对固定,也就是关键字最好相对固定,不经常改动。