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

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

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

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

最好的方法是什么?这是 HAProxy 可以实现的功能吗,还是我需要其他专业的监控软件?

答案1

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

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

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

请参阅配置手册有关日志格式及其设置方法的详细信息。

答案2

我使用option httplog clf它来记录和捕获一些额外的字段,但是这里有一个我为此编写的 python 正则表达式(这可能会节省您一些时间):

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 模式)。这是从与服务器建立 TCP 连接到服务器发送完整响应标头之间的时间。它仅显示其请求处理时间,不包括数据传输造成的网络开销。值得注意的是,当客户端有数据要发送到服务器时(例如在 POST 请求期间),时间已经运行,这可能会扭曲明显的响应时间。因此,对于从不受信任的网络后面的客户端发起的 POST 请求,通常明智的做法是不要太信任此字段。这里的“-1”值表示从未见过最后一个响应标头(空行),很可能是因为服务器在处理请求之前超时了。

答案3

不需要系统日志,统计页面的 CSV 导出功能提供了所有详细信息。

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

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

相关内容