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_ADMINstats 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
2. 状态页详细说明

进程任务信息类
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连接数/单进程最大连接数/最大管道数maxpipescurrent 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和downLastChk: 持续检查后端服务器的时间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
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
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