This is a simple server that scrapes HAProxy stats and exports them via HTTP for Prometheus consumption.
Note: since HAProxy 2.0.0, the official source includes a Prometheus exporter module that can be built into your binary with a single flag during build time and offers an exporter-free Prometheus endpoint. More information down below.
To run it:
./haproxy_exporter [flags]Help on flags:
./haproxy_exporter --helpFor more information check the source code documentation. All of the core developers are accessible via the Prometheus Developers mailinglist.
Specify custom URLs for the HAProxy stats port using the --haproxy.scrape-uri
flag. For example, if you have set stats uri /baz,
haproxy_exporter --haproxy.scrape-uri="http://localhost:5000/baz?stats;csv"Or to scrape a remote host:
haproxy_exporter --haproxy.scrape-uri="http://haproxy.example.com/haproxy?stats;csv"Note that the ;csv is mandatory (and needs to be quoted).
If your stats port is protected by basic auth, add the credentials to the scrape URL:
haproxy_exporter --haproxy.scrape-uri="http://user:pass@haproxy.example.com/haproxy?stats;csv"You can also scrape HTTPS URLs. Certificate validation is enabled by default, but
you can disable it using the --haproxy.ssl-verify=false flag:
haproxy_exporter --no-haproxy.ssl-verify --haproxy.scrape-uri="https://haproxy.example.com/haproxy?stats;csv"As alternative to localhost HTTP a stats socket can be used. Enable the stats socket in HAProxy with for example:
stats socket /run/haproxy/admin.sock mode 660 level admin
The scrape URL uses the 'unix:' scheme:
haproxy_exporter --haproxy.scrape-uri=unix:/run/haproxy/admin.sockTo run the haproxy exporter as a Docker container, run:
docker run -p 9101:9101 quay.io/prometheus/haproxy-exporter:v0.9.0 --haproxy.scrape-uri="http://user:pass@haproxy.example.com/haproxy?stats;csv"make buildmake testApache License 2.0, see LICENSE.
As of 2.0.0, HAProxy includes a Prometheus exporter module that can be built into your binary during build time.
To build with the official Prometheus exporter module, make with the following EXTRA_OBJS flag:
make TARGET=linux-glibc EXTRA_OBJS="contrib/prometheus-exporter/service-prometheus.o"Once built, you can enable and configure the Prometheus endpoint from your haproxy.cfg file as a typical frontend:
frontend stats
bind *:8404
http-request use-service prometheus-exporter if { path /metrics }
stats enable
stats uri /stats
stats refresh 10sFor more infromation, see this official blog post.
