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。

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

    联系我们

    加入社区

    微信扫码
    加入官方交流群

    立即体验

    在线开通,按量计费,真正的云服务!

    免费开启

    支持私有云环境部署

    代码托管平台