Chinaunix首页 | 论坛 | 博客

qsh

  • 博客访问: 3945622
  • 博文数量: 1015
  • 博客积分: 15904
  • 博客等级: 上将
  • 技术积分: 8572
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-04 19:16
文章分类

全部博文(1015)

文章存档

2019年(1)

2017年(1)

2016年(19)

2015年(27)

2014年(30)

2013年(95)

2012年(199)

2011年(72)

2010年(109)

2009年(166)

2008年(296)

分类: 系统运维

2012-08-21 10:20:30

  
     最近在需求的驱动下,认真研究了一下F5的http monitor的处理机制。从F5的技术白皮书上初略理解到:http monitor可以通过检测某个服务目录,从而从得到的结果中匹配相关的字符串。
比如下面的monitor:
b monitor http_mo1 list
monitor http_mo1 {
defaults from http
recv "nameof"
send "GET /services/message/message.html”
}
F5去GET /services/message/message.html这个页面,然后用"nameof"去匹配这个页面的内容,如果能查到就说明检测成功;否则失败。
而后续配置多个不同的系统的http monitor时,进行同样的配置(仅仅修改服务目录和recv的字串)下,发现有些monitor竟然匹配不到字符串,从而导致健康检查失败。但是直接使用浏览器浏览该页面时是能查找到相关的字符串的。monitor配置如下:
monitor http_mo2 {
defaults from http
recv "targetName"
send "GET /services/conf/message/message.html”
}
而后使用在F5的CLI上使用如下命令进行检测:echo -e "GET /services/message/message.html HTTP/1.1\r\nConnection: Close\r\nHost: \r\n\r\n" | nc 1.1.1.1 80;其中1.1.1.1 80是需要监控的地址和服务端口。echo出来的内容如下:
echo -e "GET /services/conf/message/message.html HTTP/1.1\r\nConnection: Close\r\nHost: \r\n\r\n" | nc 1.1.1.1 80 | less
HTTP/1.1 200 OK
Content-Type: text/xml; charset=iso-8859-1
Connection: close
Server: Jetty(6.1.5)

<wsdl:definitions targetNamespace=
可以看出targetName从应该能匹配到的。后来看了一些文档说有可能是HTTP的版本问题,因为F5默认是使用HTTP/1.0去GET的,但是目前基本上都是使用HTTP/1.1的。所以在GET中加入了HTTP的版本。即如下:
monitor http_mo2 {
defaults from http
recv "targetName"
send "GET /services/conf/message/message.html HTTP/1.1\r\n”
}
但是这样的GET还不够严谨,我后续测试也是有检测不到的现象。后来直接将上面echo命令中的HTTP/1.1\r\nConnection: Close\r\nHost: \r\n\r\n全部加进去就检测ok了。不能不加Host: \r\n\r\n,否则也有检测不到关键字的情况。
总结:做F5的http的monitor时需要关注GET的格式,即服务目录后面要添加”HTTP/1.1\r\nConnection: Close\r\nHost: \r\n\r\n“。否则有可能监控失败,具体为什么必须添加这些目前不清楚。
 
注意:

①,F5只能针对url进行grep来进行检查,不能进行http_states的检测;
 
②,匹配字不能与文件名一致或者是文件名的一部分。否则,即使服务器上没有改文件,也会标示为up。这是因为仅仅是从GET命令后得出的结果中去grep,那肯定会有该匹配字了。所以需要确认匹配字只能出现在该文件中的内容;
 
 
 
阅读(1573) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~