HAProxy 是一款广泛使用的高性能负载均衡器,支持 TCP 和 HTTP 协议,提供高可用性、负载均衡和代理服务。

HAProxy 2.0 以上版本提供了完善的指标暴露体系,方便观测云收集对应的指标信息。

版本要求

  • HAProxy 2.0
  • HAProxy Enterprise 2.0r1
  • HAProxy ALOHA 11.5

以下主要是采用 docker 的方式部署 HAProxy 并上报数据到观测云。

HAProxy 安装部署

准备配置 haproxy.cfg

#----------------
# Global settings
#----------------
global
  log 127.0.0.1 local2
  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

#--------------------
#Application prometheus
#--------------------

# Haproxy 开启指标
frontend prometheus
  bind *:8405
  mode http
  http-request use-service prometheus-exporter if { path /metrics }
  no log

frontend mysql
  mode tcp
  bind :3308
  log global
  default_backend mysql_servers

backend mysql_servers
  mode tcp
  balance leastconn
  server s1 192.168.2.114:3306 weight 3 check inter 5s rise 2 fall 3
  server s2 192.168.2.115:3306 weight 1 check inter 5s rise 2 fall 3

通过 prometheus-exporter 暴露指标信息,端口为 8405 ,path 为 /metrics 。 并配置了 mysql 负载均衡,且对外访问端口为 3308

Docker-compose

编写 docker-compose.yaml 文件

version: '3'
services:
  haproxy:
    image: haproxy
    container_name: haproxy
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg #插件文件挂载
    ports:
      - 89:80
      - 8405:8405
      - 3308:3308

运行

执行以下命令

docker-compose up -d

  • up 表示启动
  • -d 表示后台运行

查看运行状态 docker-compose ps

root@liurui:/home/liurui/middleware/haproxy# docker-compose ps 
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
haproxy             haproxy             "docker-entrypoint.s…"   haproxy             6 days ago          Up 3 hours          0.0.0.0:3308->3308/tcp, :::3308->3308/tcp, 0.0.0.0:8404-8405->8404-8405/tcp, :::8404-8405->8404-8405/tcp, 0.0.0.0:89->80/tcp, :::89->80/tcp

访问指标信息

通过访问 8405 端口获取指标信息,如下所示:

# HELP haproxy_process_nbthread Number of started threads (global.nbthread)
# TYPE haproxy_process_nbthread gauge
haproxy_process_nbthread 8
# HELP haproxy_process_nbproc Number of started worker processes (historical, always 1)
# TYPE haproxy_process_nbproc gauge
haproxy_process_nbproc 1
# HELP haproxy_process_relative_process_id Relative worker process number (1)
# TYPE haproxy_process_relative_process_id gauge
haproxy_process_relative_process_id 1
# HELP haproxy_process_uptime_seconds How long ago this worker process was started (seconds)
# TYPE haproxy_process_uptime_seconds gauge
haproxy_process_uptime_seconds 1364
...

观测云

注册登录观测云。

操作步骤

1、登录观测云,并获取 datakit 的安装命令

图片

2、执行安装命令安装 datakit

图片

3、开启 prom 采集器

由于 HAProxy 能够直接暴露 metrics url ,所以可以直接通过 prom 采集器进行采集。

进入 DataKit 安装目录下的 conf.d/prom ,复制 prom.conf.samplehaproxy.conf

cd /usr/local/datakit/conf.d/prom
cp prom.conf.sample haproxy.conf

调整 haproxy.conf 内容如下:

  urls = ["http://localhost:8405/metrics"]

  source = "haproxy"

  ## Keep Exist Metric Name
  ## If the keep_exist_metric_name is true, keep the raw value for field names.
  keep_exist_metric_name = true

  interval = "10s"

其他配置按需调整,调整参数说明:

  • urls:haproxy 指标地址,这里填写对应组件暴露出来的指标 url
  • source:采集器别名,建议做区分
  • keep_exist_metric_name: 保持指标名称
  • interval:采集间隔

4、重启 Datakit

datakit service -R

仪表板

通过访问 HAPorxy 代理的应用,如上面所配置的 prometheus、mysql,产生一些指标数据。观测云对 HAPorxy 也做了丰富的仪表板,可以在场景里面进行创建并查看。

  • 点击场景 - 仪表板。
  • 新建仪表板,视图类型默认选择系统视图,输入 haproxy,回车。
  • 找到 haproxy 视图,点击弹出界面,保存即可。

图片