Apache负载均衡监控需日志、状态接口、健康检查三者协同:定制LogFormat采集路由与耗时,开放/server-status?auto供Prometheus抓取,启用/balancer-manager查看节点实时状态,并对接ELK/Loki与Prometheus+Grafana实现全链路可观测。
要让 Apache 负载均衡器提供统一的流量监控视角,核心不是“加一个开关”,而是把请求分发过程中的关键决策点、节点状态、响应质量全部结构化采集,并集中输出到可读、可查、可联动的视图中。这需要日志、状态接口、健康检查三者协同,缺一不可。
启用并定制负载均衡日志格式
默认访问日志看不到后端路由信息,必须扩展 LogFormat 来捕获 balancer 模块的运行时变量:
mod_proxy_balancer 和 mod_headers 已启用): LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %{BALANCER_NAME}e %{BALANCER_WORKER_ROUTE}e %{BALANCER_SESSION_ROUTE}e %{X-Forwarded-For}i %{Request_Time}s" combined_balancerCustomLog logs/access_balancer.log combined_balancer
%{BALANCER_WORKER_ROUTE}e 显示本次请求实际转发到了哪台后端(如 server2:8080) %{BALANCER_SESSION_ROUTE}e 显示会话绑定的 route(用于验证粘性是否生效) %{Request_Time}s 记录完整请求耗时(需配合 mod_log_forensic 或 mod_headers 注入) 开放 /server-status?auto 作为机器可读监控入口
该接口返回纯文本指标,适合脚本或 Prometheus 抓取:
mod_status,并在配置中启用: <Location "/server-status"> SetHandler server-status Require ip 10.10.0.0/16</Location>
http://your-apache/server-status?auto 可获取: Total Accesses、Total kBytes(总请求数与流量) CPULoad、Uptime(基础资源水位) BusyWorkers / IdleWorkers(连接池使用情况) 集成 /balancer-manager 实现节点级实时视图
这是唯一能直观看到每个后端健康状态、失败计数、响应延迟的 Web 界面:
mod_status 必须开启,且路径权限严格限制: <Location "/balancer-manager"> SetHandler balancer-manager Require ip 192.168.50.100</Location>
BalancerMember 的当前状态(Up/Down/Stopped) bybusyness 或 loadfactor 影响) 对接外部监控系统补全维度
单一 Apache 日志或状态页无法覆盖全链路,建议补充:
apache_exporter 抓取 /server-status?auto 数据,接入 Prometheus + Grafana,绘制“各后端错误率趋势”“平均响应时间热力图” access_balancer.log 推送至 ELK 或 Loki,通过 BALANCER_WORKER_ROUTE 字段做聚合分析,例如: SELECT BALANCER_WORKER_ROUTE, COUNT(*) AS req_count, AVG(Request_Time) AS avg_latency FROM apache_logs WHERE time > now() - 1h GROUP BY BALANCER_WORKER_ROUTE
/api/order)单独设置 balancer://core 集群,配置更细粒度的 hcfail=1 和 failonstatus=400,500,让监控视角聚焦高价值流量 不复杂但容易忽略