Monitoreo HAPROXY | Prometheus + Grafana.

Ismael Aguilera
3 min readMar 22, 2023

--

Aprenderemos como monitorear nuestro balanceador de carga HAProxy utilizando Prometheus y Grafana.

By Ismael Aguilera

En el siguiente enlace podrán acceder al blog donde detallo el paso a paso para la instalación y configuración de Grafana y Prometheus.

Lo siguiente sería instalar HAProxy:

yum install -y haproxy
yum start haproxy
yum enable haproxy

Para este laboratorio voy a balancear la carga entre 2 servidores donde se encuentran instalados los servicios de Grafana, la configuración sería bastante simple:

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend grafana
bind *:8080
mode http
default_backend grafana_server

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend grafana_server
balance roundrobin
server server1 192.168.100.147:3000 check
server server2 192.168.100.148:3000 check

HAProxy dispone de un tablero de estadísticas que muestra una gran cantidad de métricas que cubren el estado de nuestros servidores, las tasas de solicitudes actuales, los tiempos de respuesta y más. Para habilitarlo debemos agregar la siguiente configuración:

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend grafana
bind *:8080
mode http
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:admin
default_backend grafana_server

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend grafana_server
balance roundrobin
server server1 192.168.100.147:3000 check
server server2 192.168.100.148:3000 check

Posterior a esto, procedemos a reiniciar los servicios:

systemctl restart haroxy

Y listo, ya contamos con nuestro tablero de estadísticas:

HAProxy Stats — By Ismael Aguilera

Prometheus dispone de un exportador de métricas para HAProxy, lo utilizaremos para exportar las métricas obtenidas de nuestro tablero.

wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.14.0/haproxy_exporter-0.14.0.linux-amd64.tar.gz
tar -zxpvf haproxy_exporter-0.14.0.linux-amd64.tar.gz
cd haproxy_exporter-0.14.0.linux-amd64
cp haproxy_exporter /usr/local/bin/
chown -R haproxy:haproxy /usr/local/bin/haproxy_exporter

Una vez copiado el binario en /usr/local/bin procederemos a crear el servicio haproxy_service.

cd /etc/systemd/system
touch haproxy_exporter.service
vim haproxy_exporter.service

[Unit]
Description=HAProxy Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/haproxy_exporter --no-haproxy.ssl-verify --haproxy.scrape-uri="http://admin:admin@192.168.XXX.XX:8080/stats;csv"

[Install]
WantedBy=multi-user.target

Levantamos el servicio pero antes, un daemon-reload.

systemctl daemon-reload
systemctl start haproxy_exporter.service
systemctl enable haproxy_exporter.service

Configuramos el firewall para permitir conexiones externas al servidor a través del puerto 9101:

firewall-cmd --add-port=9101/tcp --permanent
firewall-cmd --reload

Para finalizar con la configuración agregaremos un nuevo job “haproxy_exporter” a nuestro prometheus.yml

vi /etc/prometheus/prometheus.yml
# Global config
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
- job_name: 'haproxy_exporter'
static_configs:
- targets: ['localhost:9101']

Procedemos a reiniciar el servicio “prometheus.service” y con esto ya podremos visualizar las métricas por la interfaz web:

systemctl restart prometheus.service
prmetheus.yml
http://192.168.XXX.XX:9101/metrics

La comunidad ha colaborado en el desarrollo de dashboards compatibles con el exportador de métricas de HAProxy, los mismos están disponibles en: Grafana Dashboards

Para finalizar con este tutorial me gustaría utilizar uno de ellos, en este caso el dashboard con ID 2428. Para agregarlo debemos de realizar unos últimos pasos:

Y listo, ya contamos con el monitoreo de nuestro balanceador de carga.

--

--