HAProxy提供了WEB信息界面 , 用来查看和管理后端服务器的状态信息。在配置文件中使用stats关键字指明各个控制状态页的参数。

1. 状态页配置项

  • stats admin {if | unless} <condition> : 当满足指定条件时statistics开启admin等级。它允许通过web接口启用或禁用后端服务器

    section :frontend,listen,backend

    # statistics admin level only for localhost
    backend stats_localhost
        stats enable
        stats admin if LOCALHOST
     
    # statistics admin level always enabled because of the authentication
    backend stats_auth
        stats enable
        stats auth  admin:AdMiN123
        stats admin if TRUE
        
    # statistics admin level depends on the authenticated user
    userlist stats-auth
        group admin    users admin
        user  admin    insecure-password AdMiN123
        group readonly users haproxy
        user  haproxy  insecure-password haproxy
    ​
    backend stats_auth
        stats enable
        acl AUTH       http_auth(stats-auth)
        acl AUTH_ADMIN http_auth_group(stats-auth) admin
        stats http-request auth unless AUTH
        stats admin if AUTH_ADMIN

  • stats auth <user>:<passwd> : 通过身份验证启用统计信息并授予对帐户的访问权限 。认证时的账号和密码 , 可使用多次。默认:no authentication。sections : defaults,frontend,listen,backend。

  • stats enable : 开启统计信息功能。sections : defaults,frontend,listen,backend。

  • stats hide-version : 开启统计信息功能,并在报告中隐藏haproxy版本。sections : defaults,frontend,listen,backend。

  • stats realm :stats auth身份认证时的提示信息。设置的提示信息中 , 如果有空白字符 , 则需要转义。仅在与"stats auth"配合使用时有意义。

  • stats refresh : 数据统计页面中,自动刷新时间。sections : defaults,frontend,listen,backend。

  • stats scope { <name> | "." } : 启用统计报告并限定报告的区段。sections : defaults,frontend,listen,backend。

  • stats show-desc : 显示描述信息(可以写一些haproxy的简介内容)。sections : defaults,frontend,listen,backend。

  • stats show-legends :在数据统计页面中显示附加信息。sections : defaults,frontend,listen,backend。

  • stats show-node :在数据统计页面中,报告hostname。sections : defaults,frontend,listen,backend。

  • stats uri <prefix> : 开启数据统计功能,并定义可以访问的URI。sections : defaults,frontend,listen,backend。

示例:

listen stats
        mode http
        bind 0.0.0.0:9999
        stats enable
        log global
        stats uri /haproxy-status
        stats realm hello\ 1234
        stats auth haadmin:123456
        stats show-node
        #stats show-legends
        stats show-desc Master node for Europe, Asia, Africa
        stats scope web_port
        stats admin if TRUE
image-20220531210119064

2. 状态页详细说明

image-20220531210616810
  • 进程任务信息类

    • pid = 5178 (process #1, nbproc = 1, nbthread = 2) : pid为当前pid号, process为当前进程号,nbproc和nbthread为一共多少进程和每个进程多少个线程

    • uptime = 0d 0h00m41s : haproxy启动时间

    • system limits: memmax = unlimited; ulimit-n = 524287 : 系统资源限制 , memmax 最大内存, ulimit-n最大打开文件数。

    • maxsock = 524287; maxconn = 262122; maxpipes = 0 : 最大socket连接数/单进程最大连接数/最大管道数maxpipes

    • current conns = 2; current pipes = 0/0; conn rate = 2/sec; bit rate = 0.000 kbps : 当前连接数/当前管道数/当前连接速率/当前传输速率

    • Running tasks: 1/16; idle = 100 % : 运行的任务/当前空闲率

  • 状态转换说明

    • active UP : 在线服务器

    • backup UP : 标记为backup的服务器

    • active UP, going down : 监测未通过正在进入down过程

    • backup UP, going down : 备份服务器正在进入down过程

    • active DOWN, going up : down的服务器正在进入up过程

    • backup DOWN, going up : 备份服务器正在进入up过程

    • active or backup DOWN : 在线的服务器或者是backup的服务器已经转换成了down状态

    • not checked : 标记为不监测的服务器

    • active or backup DOWN for maintenance (MAINT) : active或者backup服务器人为下线的, 进入维护模式

    • active or backup SOFT STOPPED for maintenance : active或者backup被人为软下线(人为将weight改成 0)

3. backend server信息

  • Queue : 服务器队列信息

    • Cur : 当前队列数量

    • max : 当前最大队列数量

    • limit : 每秒新的队列限制量

  • session rate : 每秒的链接会话信息

    • cur : 每秒的当前会话数量

    • max : 每秒新的最大会话数量

    • limit : 每秒新的会话限制量

  • sessions : 会话信息

    • cur : 当前会话量

    • max : 最大会话量

    • limit : 限制会话量

    • Total : 总共会话量

    • LbTot : 选中一台服务器所用的总时间

    • Last : 和服务器的持续连接时间

  • Bytes : 流量统计

    • In : 网络的字节输入总量

    • Out : 网络的字节输出总量

  • Denied : 拒绝统计信息

    • Req : 拒绝请求量

    • Resp : 拒绝回复量

  • Errors : 错误统计信息

    • Req : 错误请求量

    • conn : 错误链接量

    • Resp : 错误响应量

  • Warnings : 警告统计信息

    • Retr : 重新尝试次数

    • Redis : 再次发送次数

  • Server : real server 信息

    • status : 后端机的状态,包括up和down

    • LastChk : 持续检查后端服务器的时间

    • Wght : 权重

    • Act : 活动链接数量

    • Bck : 备份的服务器数量

    • Chk : 心跳检测时间

    • Dwn : 后端服务器链接后都是DOWN的数量

    • Dwntme : 总的downtime时间

    • Thrtle : server状态

4. haproxy服务状态页

可以通过monitor-uri命令查看对应haproxy状态。这个选项单纯只是影响monitor-uri指定的监控界面的结果

  • 语法: monitor-uri <uri> 。通过外部监控请求指定的uri查看haproxy状态。section : default, frontend,listen。

当frontend收到引用<uri>的HTTP请求时 , HAProxy不会转发 , 也不会记录 , 而是返回 "HTTP/1.0 200 OK "或 "HTTP/1.0 503 Service unavailable" , 取决于用 "monitor fail"定义的故障条件。这通常足以让任何前端的HTTP探针检测到该服务是正常运行的 , 而无需将请求转发到后端服务器。请注意 ,HTTP方法、版本和所有头信息都被忽略 , 但请求至少必须在HTTP层面上是有效的。这个关键词只能在HTTP模式的前端使用。

监控请求的处理非常早 , 就在请求被解析之后 , 甚至在任何 "http-request"之前。之前应用的唯一规则集是tcp-request的。它们只是用来向上层组件报告HAProxy的健康状况 , 仅此而已。另外可以使用 "monitor fail"和ACL添加任何数量的条件 , 这样就可以根据可以想象的任何检查结果(最常见的是后端可用服务器的数量)来调整。

  • 语法 : monitor fail {if | unless} <condition> :添加一个条件 , 向监控的HTTP请求报告失败。section : frontend,listen。

该语句添加了一个条件 , 可以强制监控请求的响应报告失败。默认情况下 , 当外部组件查询专用于监控的URI时 , 会返回一个200的响应。当上述条件之一被满足时 , HAProxy将返回503而不是200。这对于向外部组件报告站点故障非常有用 , 该组件可能会根据HAProxy报告的可用性在多个站点之间发布路由公告。在这种情况下 , 我们将依靠涉及 "nbsrv"标准的ACL。注意 , "monitor "只在HTTP模式下工作。如果需要 , 可以使用 "errorfile"或 "errorloc"对这两种状态信息进行调整。

测试

listen web_port
        bind 0.0.0.0:80
        mode http
        log global
        monitor-uri /haproxy_test
        monitor fail if TRUE
        balance random
        server web1 192.168.194.136:8080  check  inter 3000 fall 2 rise 5
        server web2 192.168.194.128:8080  check  inter 3000 fall 2 rise 5
image-20220811172340198
listen web_port
        bind 0.0.0.0:80
        mode http
        log global
        monitor-uri /haproxy_test
        balance random
        server web1 192.168.194.136:8080  check  inter 3000 fall 2 rise 5
        server web2 192.168.194.128:8080  check  inter 3000 fall 2 rise 5
image-20220811172654156
frontend www
   mode http
   acl site_dead nbsrv(dynamic) lt 2
   acl site_dead nbsrv(static)  lt 2
   monitor-uri   /site_alive
   monitor fail  if site_dead


熊熊