HAProxy Exporter

HAProxy Exporter 是一个简单的服务,它抓取HAProxy统计数据并通过HTTP导出它们供Prometheus使用。官方地址是 https://github.com/prometheus/haproxy_exporter ,当前最新版本是 v0.13.0 ,发布时间是 2021 年11 月 26 日。

自 HAProxy 2.0.0 以来,他的官方源代码包括一个 Prometheus 导出模块,它可以在构建期间用一个标志构建到二进制文件中,并提供一个不需要导出器的Prometheus端点。

安装运行

HAProxy Exporter 运行也非常简单,直接执行二进制文件就可以。

./haproxy_exporter [flags]

或者使用 Docker 容器来运行

docker run -p 9101:9101 quay.io/prometheus/haproxy-exporter:v0.13.0 --haproxy.scrape-uri="http://user:pass@haproxy.example.com/haproxy?stats;csv"

使用

如果你设置了 stats uri /baz ,那么可以使用 --haproxy.scrape-uri 参数给 HAProxy 统计端口指定自定义的 URL 。

haproxy_exporter --haproxy.scrape-uri="http://localhost:5000/baz?stats;csv"

或者获取远端的 HAProxy ,

haproxy_exporter --haproxy.scrape-uri="http://haproxy.example.com/haproxy?stats;csv"

需要注意的是,这个参数最后的 :csv 是必须的,整个参数的值需要用双引号引起来。

如果这个统计接口有 basic auth,那么可以使用如下的方式来指定

haproxy_exporter  --haproxy.scrape-uri="http://user:pass@haproxy.example.com/haproxy?stats;csv"

也可以在获取指标的时候使用 HTTPS 的 URL ,默认情况下是启用证书验证,可以通过 --no-haproxy.ssl-verify 参数关掉证书验证。

haproxy_exporter --no-haproxy.ssl-verify --haproxy.scrape-uri="https://haproxy.example.com/haproxy?stats;csv"

除了使用 HTTP 的方式获取,还可以使用 stats socket 。在 HAProxy 中启用 stats socket 如下:

stats socket /run/haproxy/admin.sock mode 660 level admin

配置的命令如下:

haproxy_exporter --haproxy.scrape-uri=unix:/run/haproxy/admin.sock

HAProxy Exporter 也支持 TLS 和 basic authentication ,使用 --web.config.file 参数,格式描述在 exporter-toolkit 仓库里。

HAProxy 构建监控插件

在 HAProxy 2.0.0版本中,包含一个Prometheus 监控数据导出模块,可以在构建时将其构建到二进制文件中。这是通过传递参数来实现的,这个参数取决于HAProxy的版本:

在 HAProxy 2.0.x - 2.3.x ,使用 EXTRA_OBJS 参数来进行 make 构建:

make TARGET=linux-glibc EXTRA_OBJS="contrib/prometheus-exporter/service-prometheus.o"

在 HAProxy 2.4.x 版本 ,使用 USE_PROMEX 参数来进行 make 构建:

make TARGET=linux-glibc USE_PROMEX=1

构建成功以后,接可以在 HAProxy 的配置文件 haproxy.cfg 中使用下面的这个来配置打开监控数据导出了

frontend stats
    bind *:8404
    http-request use-service prometheus-exporter if { path /metrics }
    stats enable
    stats uri /stats
    stats refresh 10s

小结

HAProxy 提供了 2 种暴露监控数据的方式,采用哪一种根据实际情况来进行选择。

results matching ""

    No results matching ""