头图

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


观测云
21 声望86 粉丝

云时代的系统可观测平台


引用和评论

0 条评论