前,对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 [email protected]
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整合的方式。
$ cat ./config.xml
<testcasefile>zjwtest.xml</testcasefile>
<globalhttplog>onfail</globalhttplog>
<useragent>WebInject Application Tester</useragent>
<timeout>10</timeout>
<globaltimeout>20</globaltimeout>
<reporttype>nagios</reporttype>
$ cat oldp4pagent.xml
<testcases repeat="1">
<case
id="1"
description1="old p4p agent"
description2="old p4p agent"
method="get"
url="http://agent.p4p.cn.yahoo.com/"
parseresponse='skey" value="|"'
parseresponse1='encrypted" value="|"'
verifypositive="loginsys"
errormessage="Fail to open old p4p agent page"
/>
<case
id="2"
description1="Old p4p agent"
description2="home page"
method="post"
url="https://bssauth.3721.yahoo.com/loginverify.php"
postbody="skey={PARSEDRESULT}&encrypted={PARSEDRESULT1}&loginsys=agent&username=abcde&encrypt=&password=p4pwjj&word=1234&ok=%B5%C7+%C2%BC"
verifypositive="frame.htm"
errormessage="Login fail"
/>
<case
id="3"
description1="Old p4p agent"
description2="Job Sheet"
method="get"
url="http://agent.p4p.cn.yahoo.com/tts/index.php?type=2"
verifypositive="test for new mysql"
errormessage="Job Sheet"
/>
</testcases>
$ cat ./search_myweb_cn.xml
<testcases repeat="1">
<case
id="1"
description1="search_myweb_cn"
description2="search_myweb_cn"
method="get"
url="http://myweb.cn.yahoo.com/search.html?showp=%E5%91%A8%E6%9D%B0%E4%BC%A6&p=%E5%91%A8%E6%9D%B0%E4%BC%A6"
verifypositive="addp.html\?method=save&ou="
/>
</testcases>