在之前的博客文章HAProxy Logging简介中,你了解了如何利用HAProxy的强大功能,通过日志记录将可观察性提高到负载均衡器和服务的状态。HAProxy还附带一个名为HAProxy Stats页面的仪表板,该页面向你显示涵盖服务器运行状况,当前请求率,响应时间等的大量指标。这些指标为你提供了基于每个前端,后端和服务器的精细数据。你只需要添加一个stats enable
指令,该指令通常放在它自己的frontend
部分中。
frontend stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats admin if { src 127.0.0.1 }
该bind
行设置你将用于访问仪表板的地址和端口。可选stats uri
行更改URL的路径。该stats refresh
行配置仪表板在浏览器中自动刷新的频率。
你还可以使用此screen将服务器置于维护模式或从中排出流量。为此,你将添加该stats admin
行并限制谁可以通过ACL语句访问这些函数。你也可以将其设置stats admin if TRUE
为绕过限制。(可选)添加stats auth <username:password>
一行以强制执行基本身份验证。
listen stats
mode http
bind *:1080 #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
有了这个,你可以访问端口上的/stats URL以查看仪表板:
HAProxy Stats页面为你提供近乎实时的信息提要,你可以使用这些信息对代理服务进行故障排除,获取有关流量的信息,并观察服务器上的负载。但是,度量标准使用简写名称和前缀进行标记。在充分利用它们之前,你需要了解它们的含义。在这篇博客文章中,你将浏览统计信息页面并了解每个部分显示的内容。
Frontend Statistics
在第一部分中,我们将探索与前端相关的统计数据。一个前端就是一个客户端连接到。当请求进入负载均衡器时 - 并且当响应返回给客户端时 - 它们通过前端。因此,它可以访问包含整个请求/响应生命周期的端到端计时,消息大小和运行状况指示器。
在第一部分中,我们将探索与前端相关的统计数据。前端是客户端连接的内容。当请求进入负载均衡器时 - 并且当响应返回给客户端时 - 它们通过前端。因此,它可以访问包含整个请求/响应生命周期的端到端时序,消息大小和运行状况指示器
Session Rate会话率
该会话速率部分-->Session rate,在前端的情况下,描述了其客户端连接到HAProxy的速度。
Cur列显示正在创建客户端会话或客户端与服务器之间完全建立的连接的当前速率。如果将鼠标悬停在此字段上,该页面将显示以下向下钻取指标:
Current connection rate: :1/s
Current session rate: :1/s
Current request rate: :1/s
如下图:
对应
Current connection rate per second
当前每秒的连接速率 客户端连接到HAProxy的速率(尚未创建完整会话)
Current session rate per second
当前每秒会话速率 正在创建会话的速率,这些会话是保持端到端连接状态的实体(客户端到HAProxy和HAProxy到后端服务器)
Current request rate per second
当前每秒请求率 通过已建立的连接接收HTTP请求的速率
Max列显示同时使用的大多数会话。如果将鼠标悬停在此字段上,该页面将显示以下向下钻取指标:
Max connection rate: 10/s
Max session rate: 10/s
Max request rate: 10/s
如下图:
对应
Max connection rate per second
每秒最大连接速率 客户端连接到HAProxy的最高速率(尚未创建完整会话)
Max session rate per second
每秒最大会话速率 客户端建立会话的最高速率,这些会话是保持端到端连接状态的实体(客户端到HAProxy和HAProxy到后端服务器)
Max request rate per second
每秒最高请求率 通过已建立的连接收到HTTP请求的最高速率
“ Limit”列显示前端将接受的每秒最大会话数,由rate-limit sessions
设置设置。如果超出此限制,则套接字的积压(在系统缓冲区中)中的其他连接将保持挂起状态
Sessions.
在frontend的上下文中,“Sessions”部分计算负载均衡器上使用的会话数或完整的客户端到服务器连接数。
Cur列显示已建立会话的当前数量。 Max列显示同时建立的大多数会话。
“Limit”列显示允许的最多同时会话,由frontend中的maxconn设置定义。达到此限制时,该特定frontend将停止接受新连接。如果未设置maxconn,则Limit与配置的global部分中的maxconn值相同。如果未设置,则该值基于你的系统。
将鼠标悬停在“Total”列上时,该页面将显示以下向下钻取指标:
Cum. connections: 1027
Cum. sessions: 1027
Cum. HTTP requests: 1027
- HTTP 1xx responses: 0
- HTTP 2xx responses: 523
Compressed 2xx: 0 (0%)
- HTTP 3xx responses: 0
- HTTP 4xx responses: 0
- HTTP 5xx responses: 503
- other responses: 0
Intercepted requests: 524
Cache lookups: 0
Cache hits: 0 (0%)
Failed hdr rewrites: 0
如下图:
对应
Cum. connections 自上次重新加载HAProxy以来建立的累积连接数。
Cum. sessions 自上次重新加载以来建立的累积会话数(端到端连接)。
Cum. HTTP requests 自上次重新加载以来累积的HTTP请求数。
HTTP 1xx responses 收到1xx响应的HTTP请求总数。
HTTP 2xx responses 收到2xx响应的HTTP请求总数。
Compressed 2xx 如果已启用压缩,则压缩的2xx响应总数。它还显示已压缩的请求的百分比。
HTTP 3xx responses 收到3xx响应的HTTP请求总数。
HTTP 4xx responses 收到4xx响应的HTTP请求总数。
HTTP 5xx responses 收到5xx响应的HTTP请求总数。
Other responses 收到其他指标未涵盖的响应的HTTP请求总数。
Intercepted requests 截获并重定向到HAProxy Stats页面的请求总数。
Cache lookups 检查资源的缓存的总次数。
Cache hits 返回缓存资源的总次数。
Failed hdr rewrites 由于缓冲区中没有足够的空间,无法添加或设置HTTP标头的总次数。尝试增加tune.maxrewrite或tune.bufsize。
该LbTot和最后列在本节不使用
Bytes
在前端的上下文中,“ Bytes”部分显示HAProxy和下游客户端之间发送和接收的累积数据量。
In列显示接收的总字节数,Out列显示发送的总字节数
Denied
"Denied"部分显示因安全问题而被拒绝的请求和响应数。
Req列显示由于frontend或listen部分中放置的以下任何配置指令而被拒绝的请求数:
http-request deny
http-request reject
http-request silent-drop
http-request tarpit
http-response silent-drop
tcp-request connection silent-drop
tcp-request content reject
tcp-request content silent-drop
RESP列显示的是通过一个拒绝响应的数目http-response deny
,它被放置在该指令frontend
或listen
。
Errors
在前端的上下文中, Errors部分中仅使用 Req列。它显示了遇到错误的请求数。
可能的原因包括:
- 提前终止客户
- 来自客户端的读取错误
- 客户超时了
- 客户端关闭了连接
- 客户端发送了格式错误的请求
- 请求是tarpitted
Server
"Server"部分中应用于前端的唯一字段是“ 状态”字段。
当状态为OPEN时,前端正常运行并准备接收流量。你可以禁用前端,通过执行disable frontend Runtime API命令,它将其状态更改为STOP。以下是调用该命令的示例:
echo "disable frontend website" | socat stdio /var/run/haproxy.sock
使用enable frontend命令将前端的状态更改回OPEN
Backend Statistics
Backend是负载平衡服务器池。 HAProxy将请求发送到后端,然后从其中一个活动服务器接收响应。此处的统计信息包括有关每台服务器的运行状况,与排队,连接和获取响应相关的计时以及请求率的信息
Queue
“Queue”部分仅适用于后端,并显示客户端等待服务器可用的时间。使用maxconn设置时,HAProxy能够对连接进行排队。这减少了后端服务器的压力。
Cur列显示当前已排队但尚未分配给服务器的客户端连接数。 Max列显示一次排队的最多连接数。“limit”列显示允许排队的最大连接数,由每个服务器行上的maxqueue设置定义。设置可以排队的连接数的最大限制是确保客户端不会排队等待太长时间的一种方法。你还可以设置超时队列,以设置客户端在HAProxy返回错误响应之前保持排队的时间长度。
Session Rate
在后端服务器的上下文中,会话与连接相同。这些统计信息显示了与服务器建立连接的速率。
Cur列显示每秒与服务器建立连接的当前速率。 Max列显示与给定服务器建立连接的最高速率。不使用limit列
Sessions
在后端的上下文中,“ Sessions”部分显示与任何活动服务器的当前连接数。
Cur列列出了服务器的活动连接数。 Max列显示同时为给定服务器建立的最多连接。“limit”列显示服务器允许的最大连接数,由服务器行上的maxconn参数设置。
后端行显示limit的fullconn值,如果未设置,则使用以下公式:路由到此后端的前端的会话限制值的总和除以10.因此,如果你有两个前端,每个都有1000的限制,它们的总和将是2000.除以10得到该后端的限制值200。
"total"列显示已使用给定服务器的累积连接数。将鼠标悬停在此字段上时,下拉列表会显示以下向下钻取指标:
如下:
Cum. sessions : 建立到此服务器的累积连接数。
New connections : 建立新连接的次数,而不是重用现有连接。
Reused connections : 重用现有连接的次数。
Cum. HTTP responses : 从此服务器收到的累积HTTP响应数。
HTTP 1xx responses : 此服务器的HTTP 1xx响应总数。
HTTP 2xx responses : 此服务器的HTTP 2xx响应总数。
HTTP 3xx responses : 此服务器的HTTP 3xx响应总数。
HTTP 4xx responses : 此服务器的HTTP 4xx响应总数。
HTTP 5xx responses : 此服务器的HTTP 5xx响应总数。
Other responses : 其他指标未涵盖的HTTP响应总数。
Failed hdr rewrites : 由于缓冲区中没有足够的空间,无法添加或设置HTTP标头的总次数。尝试增加tune.maxrewrite或tune.bufsize。
Queue time : 在等待连接到服务器的连接时,连接保持排队的时间量(以毫秒为单位),在过去1024次成功连接中取平均值。
Connect time : 成功连接到服务器所花费的时间(以毫秒为单位),在过去1024次成功连接中取平均值。
Response time : 服务器响应时间(以毫秒为单位),在过去1024次成功连接中取平均值。
Total time : 总会话时间(以毫秒为单位),在过去1024次成功连接中取平均值。
LbTot列显示选择给定服务器以提供请求的总次数。这可能是由于正常的负载平衡或由于故障服务器的重新分配造成的。
Last列显示自上次连接以来的时间。
在本节的底部,以灰色显示,度量标准将汇总并报告后端整体
Bytes
在后端的上下文中,“ Bytes”部分显示HAProxy与上游服务器之间发送和接收的数据量。
In列显示发送到服务器的字节数。 Out列显示收到的字节数。底行显示了所有服务器的后端总数
Denied
"Denied"部分显示因安全问题而被拒绝的请求和响应数。
Req列仅适用于整个后端。它显示了后端中任何以下配置指令拒绝的请求数:
http-request deny
http-request reject
http-request silent-drop
http-request tarpit
http-response silent-drop
tcp-request content reject
tcp-request content silent-drop
tcp-response content silent-drop
Resp列显示由于backend中的任何以下配置指令而拒绝任何给定服务器的响应数
http-response deny
tcp-response content reject
底行显示了这些单独服务器指标的总和
Errors
Errors显示与后端服务器通信相关的错误数。
不使用Req列。 Conn列显示尝试连接到服务器时遇到错误的请求数。例如,如果在HAProxy已经开始连接时关闭服务器,那么你会看到此数字上升。运行状况检查最终会从轮换中删除服务器。
Resp列显示获取响应时遇到的错误。例如,关闭tcp-response内容关闭的连接将增加此计数
Warnings
后端的"Warnings"部分显示重试次数和重新分配次数。
如果你已向后端添加了retries重试指令,则Retr列将显示重试连接的总次数。Redis列显示HAProxy无法与服务器建立连接并将其重新分配到另一台服务器的次数。这要求你添加了一个选项redispatch指令。
Server
在后端的上下文中,“ Server”部分显示有关每个服务器的状态,运行状况和权重的各种详细信息
“ status”列显示服务器当前是否已启动以及启动时间。它可以显示以下任何状态:
up :服务器报告为健康。
DOWN :服务器报告为不健康且无法接收请求。
NOLB :你已将http-check disable-on-404添加到后端,并且运行状况检查的URL已返回HTTP 404响应。
MAINT :服务器已被禁用或进入维护模式。
DRAIN :服务器已进入排水模式。
no check :未对此服务器启用运行状况检查。
LastChk列显示的值为L7OK / 200,单位为1ms。该特定值意味着执行了第7层健康检查;它返回了一个HTTP 200 OK响应,它在1毫秒内完成。或者,如果你在0ms内看到L4OK,则表示HAProxy能够与服务器建立第4层连接。
Wght列显示它将接受的流量比例,由服务器行上的weight参数设置。Act列显示服务器是处于活动状态(标记为Y)还是备份(标记为 - )。密切相关的Bck列显示服务器是备份(标记为Y)还是活动(标记为 - )
Chk列显示失败的运行状况检查的数量。 Dwn列显示从UP到DOWN的转换次数。 Dwntme列显示服务器已关闭多长时间。
如果已向服务器行添加了slowstart参数,则在禁用并稍后启用该服务器时,Thrtle列显示服务器将接受的流量百分比。在你设定的期间内,百分比将逐渐上升至100%。
延伸阅读
linuxea:haproxy 1.9中的多线程linuxea:haproxy1.9 了解四个基础部分linuxea:haproxy1.9日志简介linuxea: 使用HAproxy 1.9 Runtime API进行动态配置linuxea: 关于HAproxy无缝重载