HAProxy 简介
HAProxy(High Availability Proxy)是一款广泛使用的高性能负载均衡器,支持 TCP 和 HTTP 协议,提供高可用性、负载均衡和代理服务。它特别适用于负载较大的 Web 站点,能够支持数以万计的并发连接,并且可以简单安全地整合到现有架构中。可观测性可以帮助快速定位和解决 HAProxy 及其后端服务的问题。HAProxy 2.0 及以上版本提供了完善的指标暴露体系,可以把指标暴露到指定端口,然后由 Prometheus 进行采集。
观测云
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。观测云的 DataKit 拥有 prom 采集器,可以取代 Prometheus 采集 HAProxy 指标,然后通过仪表板和监控器实时掌握 HAProxy 的运行情况。
前置条件
- Centos7.9 主机
192.168.0.2
、192.168.0.3
192.168.0.2
安装 Docker,Docker Compose192.168.0.2
、192.168.0.3
安装 Nginx,端口 80(可以使用其它代理服务)
部署 DataKit
DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。
登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。
复制第 2 步中的安装命令,在 192.168.0.2
主机上执行。
采集步骤
1、部署 HAProxy
HAProxy 部署在 192.168.0.2
主机上,创建 /data/haproxy/haproxy.cfg
文件,其中日志输出到 stdout,负载配置的是前置条件中的 Nginx,指标暴露在 8405 端口,backend 配置的是前置条件中的 Nginx。
global
log stdout format raw local0 info
maxconn 4000
daemon
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend prometheus
bind *:8405
mode http
http-request use-service prometheus-exporter if { path /metrics }
no log
frontend frontend_web
description "frontend frontend_web"
bind :8080
default_backend webservers
backend webservers
balance roundrobin
server httpA 192.168.0.2:80 check inter 500 rise 3 fall 2 weight 1
server httpB 192.168.0.3:80 check inter 1500 rise 3 fall 2 weight 1
创建 /data/haproxy/docker-compose.yaml
文件。
version: '3.8'
services:
haproxy:
image: haproxy:3.1.6
container_name: haproxy
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
ports:
- 8080:8080
- 8405:8405
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- haproxy-network
networks:
haproxy-network:
driver: bridge
启动 HAProxy。
docker-compose up -d
访问 192.168.0.2:8080
产生负载调用。
2、指标采集
登录 192.168.0.2
,执行如下操作开通采集器。
cd /usr/local/datakit/conf.d/prom
cp prom.conf.sample haproxy.conf
修改 urls 和 source。
重启 DataKit。
datakit service -R
在「指标」 - 「指标管理」中能查看到采集的 haproxy 指标。
3、日志采集
Docker Compose 部署的 HAProxy,日志输出到了 stdout,DataKit 容器采集器默认采集的 stdout 日志,无需再配置。
关键指标
在 HAProxy 中,监控 Frontend(前端)、Backend(后端)、Server(服务器)的常用指标对于性能优化。故障排查和容量规划至关重要。
Frontend 关键指标
指标名称 | 描述 | 类型 |
---|---|---|
frontend_current_sessions | 当前在前端活跃的会话数量,会随会话的建立和结束动态变化 | Gauge |
frontend_limit_sessions | 前端允许的最大会话数量,由配置文件中的 maxconn 参数决定 | Gauge |
frontend_connections_total | 自 HAProxy 工作进程启动以来,前端接收的总连接数 | Counter |
frontend_internal_errors_total | 自 HAProxy 进程启动以来,前端发生的内部错误总数 | Counter |
frontend_bytes_in_total | 自 HAProxy 进程启动以来,前端接收的总字节数 | Counter |
frontend_bytes_out_total | 自 HAProxy 进程启动以来,前端发送的总字节数 | Counter |
frontend_intercepted_requests_total | 自 HAProxy 进程启动以来,前端拦截的 HTTP 请求总数 | Counter |
Backend 关键指标
指标名称 | 描述 | 类型 |
---|---|---|
backend_bytes_in_total | 自 HAProxy 进程启动以来,后端接收的总字节数 | Counter |
backend_bytes_out_total | 自 HAProxy 进程启动以来,后端发送的总字节数 | Counter |
backend_internal_errors_total | 自 HAProxy 进程启动以来,后端发生的内部错误总数 | Counter |
backend_response_errors_total | 自 HAProxy 工作进程启动以来,后端返回的无效响应总数 | Counter |
backend_current_queue | 当前在后端队列中等待处理的请求数量 | Gauge |
backend_max_queue | 自 HAProxy 进程启动以来,后端队列中曾经达到的最大请求数量 | Gauge |
backend_loadbalanced_total | 自 HAProxy 进程启动以来,后端负载均衡器成功分配到后端服务器的请求数量 | Counter |
backend_max_response_time_seconds | 后端服务器响应请求所花费的最大时间(单位:秒) | Gauge |
backend_current_sessions | 当前在后端活跃的会话数量 | Gauge |
backend_max_sessions | 自 HAProxy 进程启动以来,后端遇到的最大并发会话数 | Gauge |
backend_sessions_total | 自 HAProxy 进程启动以来,后端处理的总会话数 | Counter |
Server 关键指标
指标名称 | 描述 | 类型 |
---|---|---|
server_check_failures_total | 自 HAProxy 工作进程启动以来,后端服务器健康检查失败的总次数 | Counter |
server_connection_errors_total | 自 HAProxy 工作进程启动以来,后端服务器连接失败的总次数 | Counter |
server_aborts_total | 自 HAProxy 工作进程启动以来,后端服务器主动中断连接的总次数 | Counter |
server_bytes_in_total | 自 HAProxy 工作进程启动以来,某个特定后端服务器接收的总字节数 | Counter |
server_bytes_out_total | 自 HAProxy 工作进程启动以来,某个特定后端服务器发送的总字节数 | Counter |
server_sessions_total | 自 HAProxy 工作进程启动以来,某个特定后端服务器处理的总会话数 | Counter |
server_connection_attempts_total | 自 HAProxy 工作进程启动以来,后端服务器的连接尝试次数总和 | Counter |
server_connection_reuses_total | 自 HAProxy 工作进程启动以来,某个特定后端服务器的连接重用次数总和 | Counter |
server_weight | 定义后端服务器的权重,权重越高,分配到该服务器的请求就越多 | 配置参数 |
场景视图
登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “haproxy”, 选择 “HAProxy 监控视图”,点击 “确定” 即可添加视图。
监控器(告警)
后端服务器检测失败
简要描述:后端服务检测失败触发告警。
后端活跃服务器数量小于1
简要描述:后端活跃服务器数量小于 1 触发告警。
前端 http 响应 4xx 错误率过高
简要描述:前端 http 响应 4消息错误率过高触发告警。
总结
HAProxy 通常用于高可用性场景,可观测性可以确保在出现问题时能够及时响应,减少停机时间。通过收集和分析 HAProxy 的指标(如连接数、响应时间、吞吐量等),可以实时监控其性能,确保系统运行在最佳状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。