Apache自身无健康状态可视化界面,mod_proxy_hcheck仅负责后台探测并动态启停后端节点;需结合mod_status的/balancer-manager或/server-status?auto接口,再通过Prometheus+Grafana或静态HTML+AJAX实现可视化展示。
Apache 本身不提供内置的健康状态可视化界面,
的作用是后台自动探测后端服务器的健康状态(如 HTTP 状态码、TCP 连通性、自定义响应内容等),并据此动态启用或屏蔽节点。要实现“可视化实时展示”,需在
的能力基础上,叠加外部监控与前端展示组件。
理解 mod_
proxy
_hcheck 的核心职责
(Apache 2.4.43+ 引入)负责主动健康检查,但它不采集指标、不存储历史、也不暴露 Web 接口。它只影响
路由决策——例如将请求仅转发给标记为
的后端。其配置示例如下:
ProxyHCExpr ok2xx "status = 2xx"ProxyHCExpr okup "expr %{hc('HTTP-Status')} == 200 && %{hc('Content-Length')} > 100"BalancerMember http://192.168.1.10:8080 hcexpr=ok2xx hcuri=/health hctemplate=tcpBalancerMember http://192.168.1.11:8080 hcexpr=okup hcuri=/health hctemplate=http
上述配置让 Apache 按规则探测各节点,并更新内部状态(
/
)。但这些状态默认不可读取。
获取健康状态:通过 Apache 的状态模块暴露数据
Apache 自带
,配合
可显示负载均衡器中各成员的当前状态(包括
更新后的
/
标记)。
Apache 2.4.62
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
下载
启用
和
:
LoadModule status_module modules/mod_status.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.so
在虚拟主机中添加状态页配置:
SetHandler balancer-managerRequire ip 127.0.0.1 192.168.1.0/24
访问
即可看到每个后端的
(如
、
)、
、
等字段,这是最轻量级的“可视化”方式。
增强可视化:对接 Prometheus + Grafana
若需实时图表、告警、历史趋势,推荐用
的机器可读接口(
格式)作为数据源:
启用
,并配置:
SetHandler server-statusRequire ip 127.0.0.1
访问
返回纯文本指标,其中包含:
Balancer: myclusterMember: http://192.168.1.10:8080 OK (1) 0/256 0Member: http://192.168.1.11:8080 ERR (0) 0/256 0
括号内数字即健康检查结果(1=OK,0=ERR)。
使用
apache_exporter
抓取该接口,暴露为 Prometheus metrics;再用 Grafana 配置面板,绘制「健康节点数」「异常节点列表」「检查失败率」等图表。
定制轻量级前端页面(无额外服务)
若不想引入 Prometheus,可用一个静态 HTML 页面 + AJAX 定时拉取
,解析并渲染状态表格:
确保 Apache 允许跨域(或同域部署该页面):
Header set Access-Control-Allow-Origin "*"
前端 JS 示例逻辑:
用
获取文本 → 正则匹配
→ 动态更新 DOM 表格行背景色(绿色/红色)→ 每 10 秒刷新一次。
优势:零后端依赖,部署简单;劣势:无法存历史,权限控制弱。
不复杂但容易忽略:健康检查生效的前提是 BalancerMember 启用了
且后端
接口响应稳定;可视化只是状态的呈现层,真正起作用的是
对路由的实时干预。
mod_proxy_hcheckmod_proxy_hcheckmod_proxy_hcheckProxyPassOKOKERRmod_statusmod_proxy_balancermod_proxy_hcheckOKERRmod_statusmod_proxy_balancerhttp://your-apache/balancer-managerStateOKERRRouteLoadmod_statusautoExtendedStatus Onhttp://your-apache/server-status?auto/server-status?autofetch('/server-status?auto')Balancer:.*?Member:.*?(OK|ERR)hcexpr/healthmod_proxy_hcheck