HAProxy 可观测性最佳实践

HAProxy 简介

HAProxy(High Availability Proxy)是一款广泛使用的高性能负载均衡器,支持 TCP 和 HTTP 协议,提供高可用性、负载均衡和代理服务。它特别适用于负载较大的 Web 站点,能够支持数以万计的并发连接,并且可以简单安全地整合到现有架构中。可观测性可以帮助快速定位和解决 HAProxy 及其后端服务的问题。HAProxy 2.0 及以上版本提供了完善的指标暴露体系,可以把指标暴露到指定端口,然后由 Prometheus 进行采集。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。观测云的 DataKit 拥有 prom 采集器,可以取代 Prometheus 采集 HAProxy 指标,然后通过仪表板和监控器实时掌握 HAProxy 的运行情况。

前置条件

  • Centos7.9 主机 192.168.0.2192.168.0.3
  • 192.168.0.2 安装 Docker,Docker Compose
  • 192.168.0.2192.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。

bash 复制代码
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 文件。

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,执行如下操作开通采集器。

bash 复制代码
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 的指标(如连接数、响应时间、吞吐量等),可以实时监控其性能,确保系统运行在最佳状态。

相关推荐
Hello World......11 天前
互联网大厂Java面试:从Spring到微服务的深度探讨
数据库·spring boot·微服务·监控·java面试·日志管理·缓存技术
Sylvan Ding14 天前
远程主机状态监控-GPU服务器状态监控-深度学习服务器状态监控
运维·服务器·深度学习·监控·远程·gpu状态
杰克逊的日记14 天前
SkyWalking的工作原理和搭建过程
云原生·监控·skywalking
小黑_深呼吸23 天前
Prometheus实战教程:k8s平台-Redis监控案例
运维·kubernetes·prometheus·监控
小马爱打代码1 个月前
Spring Boot Actuator - 应用监控与管理
spring boot·监控
ak啊1 个月前
基于 Prometheus 的后端服务性能故障监控方案
监控
刘大猫261 个月前
Arthas monitor(方法执行监控)
人工智能·后端·监控
可观测性用观测云1 个月前
Neo4j 可观测性最佳实践
监控
ak啊1 个月前
基于Python的自动化运维中服务器性能监控与告警
python·监控