测量Web场中不同服务器的页面响应时间(HAProxy?)

我正在构build一个小的Web服务器场(IIS7.5)来提供一个内部网站。 我想测量的一件事情是HTTP响应时间在用户请求和正在服务的页面之间。

考虑到我使用HAProxy作为前端负载均衡器,HAProxy似乎很适合收集这些信息,因为它位于每个请求/响应之间。 但是,查看生成的统计信息页面,有很多很好的信息,但是我看不到有关响应时间的任何信息。

什么是最好的方式去做这件事? 这是HAProxy可以做的function,还是我需要一些其他的专业监控软件?

HAProxy提供有关所有HTTP请求的非常详细的统计信息。 比你在统计页面上看到的更多

您需要设置侦听UDP系统日志消息(例如,在本地主机上)的系统日志服务器。 该系统日志服务器需要configuration为将HAProxy收到的日志消息写入文件(或任何您喜欢的地方)。 一个示例HAproxyconfiguration可能如下所示:

defaults # send the logs to localhost:514 via UDP, using the local0 facility log 127.0.0.1 local0 debug option httplog mode http balance roundrobin listen farm bind 10.0.0.1:80 server iis1 10.0.1.1:80 server iis2 10.0.1.2:80 

有关日志格式的详细信息以及如何设置,请参阅configuration手册的第8部分。

我使用option httplog clf进行logging和捕获一些额外的字段,但这里是我为此写的一个Python正则expression式(这可能会节省您一些时间):

 line_regex=re.compile('ny-lb[0-9]{2} (?P<HTTP_CLIENT_IP>[^ ]+) - - \[[^\]]*\] "(?P<HTTP_METHOD>[^ ]+) (?P<HTTP_URI>[^ ]+) (?P<HTTP_VERSION>\w+/\d+\.\d+)" (?P<HTTP_RESPONSE_CODE>\d{3}) (?P<HTTP_HAPROXY_BYTES_READ>\d+) "[^"]*" "[^"]*" [^ ]+ [^ ]+ "(?P<HTTP_HAPROXY_FRONTEND>[^"]+)" "(?P<HTTP_HAPROXY_BACKEND>[^"]+)" "(?P<HTTP_SERVER>[^"]+)" (?P<HTTP_HAPROXY_TQ>-?\d*) (?P<HTTP_HAPROXY_TW>-?\d*) (?P<HTTP_HAPROXY_TC>-?\d*) (?P<HTTP_HAPROXY_TR>-?\d*) (?P<HTTP_HAPROXY_TT>-?\d*) "(?P<HTTP_HAPROXY_TERM_STATE>[^"]*)" (?P<HTTP_HAPROXY_ACTCONN>-?\d*) (?P<HTTP_HAPROXY_FECONN>-?\d*) (?P<HTTP_HAPROXY_BECONN>-?\d*) (?P<HTTP_HAPROXY_SRV_CONN>-?\d*) (?P<HTTP_HAPROXY_RETRIES>-?\d*) (?P<HTTP_HAPROXY_SRV_QUEUE>-?\d*) (?P<HTTP_HAPROXY_BACKEND_QUEUE>-?\d*) "[^"]*" "[^"]*" "(?P<HTTP_REFERER>[^"]*)" "(?P<HTTP_UA>[^"]*)" "(?P<HTTP_HOST>[^"]*)" "(?P<HTTP_X_FORWARD_FOR>[^"]*)"') 

您可能需要HTTP_HAPROXY_TR字段:

Tr:服务器响应时间(仅限HTTP模式)。 从build立到服务器的TCP连接到服务器发送完整响应头的时刻之间的时间。 它纯粹显示了它的请求处理时间,没有数据传输造成的networking开销。 值得注意的是,当客户端有数据发送到服务器时,例如在POST请求期间,时间已经运行,这可能扭曲明显的响应时间。 出于这个原因,通常不要过分信任这个字段,用于从不可信networking背后的客户端发起的POST请求。 这里的值为“-1”意味着最后一个响应头(空行)从来没有见过,很可能是因为在服务器之前的服务器超时冲程pipe理处理请求。

不需要系统日志,来自统计页面的CSV导出function提供了所有的细节。

 $ lynx -source -auth=STATSUSER:STATSPASSWORD 'http://haproxy/stats;csv' | cut -d ',' -f 2,8,61 

字段2,8和61将显示最后1024个请求的后端名称,总会话数和平均响应时间(以ms为单位)。