Configuración de HAProxy
Para que el plugin pueda obtener las estadísticas, HAProxy debe exponer el endpoint /stats;csv. La habilitación se realiza editando el fichero haproxy.cfg (por defecto en /etc/haproxy/haproxy.cfg).
Configuración mínima (sin autenticación, sin SSL)
Añade un frontend dedicado a las estadísticas:
frontend stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
Con esta configuración el plugin consumirá la URL:
http://<IP_SERVIDOR>:8404/stats
El plugin normaliza automáticamente la URL añadiendo el sufijo
;csvy el parámetronorefreshcuando faltan, por lo que basta con indicar la URL base de stats.
Configuración con autenticación básica
Para proteger el endpoint con usuario y contraseña, define una userlist y aplica http-request auth en el frontend de stats:
frontend stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
acl auth_ok http_auth(stats_users)
http-request auth realm stats if !auth_ok
userlist stats_users
user admin password $6$rounds=5000$<HASH_SHA512>
Genera el hash de la contraseña con mkpasswd o openssl:
mkpasswd -m sha-256 mypassword
# o bien
openssl passwd -6 mypassword
En el plugin se deberá facilitar ese mismo username y password mediante --user / --password (o los campos username / password del archivo de configuración).
Configuración con SSL/TLS
Para servir las estadísticas sobre HTTPS añade ssl crt al bind:
frontend stats
bind *:8404 ssl crt /etc/haproxy/certs/stats.pem
stats enable
stats uri /stats
stats refresh 10s
Genera un certificado autofirmado de pruebas con:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/haproxy/certs/stats.key \
-out /etc/haproxy/certs/stats.crt \
-subj "/CN=localhost"
cat /etc/haproxy/certs/stats.crt /etc/haproxy/certs/stats.key > /etc/haproxy/certs/stats.pem
En el plugin se indicará la URL con esquema https:// y el parámetro --ssl (o verify_ssl) según se quiera validar el certificado:
-
verify_ssl = true→ para certificados válidos en producción. -
verify_ssl = false→ para certificados autofirmados o entornos de prueba.
Configuración completa (SSL + autenticación)
global
maxconn 4096
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
frontend stats
bind *:8404 ssl crt /etc/haproxy/certs/stats.pem
stats enable
stats uri /stats
stats refresh 10s
stats admin if TRUE
acl auth_ok http_auth(stats_users)
http-request auth realm stats if !auth_ok
userlist stats_users
user admin password $6$rounds=5000$<HASH_SHA512>
frontend myapp
bind *:80
default_backend servers
backend servers
server s1 127.0.0.1:8080 check
Tras modificar haproxy.cfg recarga el servicio para aplicar los cambios:
sudo systemctl reload haproxy
Verificación
Para comprobar que el endpoint responde correctamente, puedes hacer una petición manual al CSV de estadísticas:
curl -u admin:mypassword http://192.168.0.10:8404/stats;csv
La salida debe ser un CSV cuyo primer registro es la cabecera con los nombres de las columnas (# pxname,svname,qcur,qmax,...) y las siguientes filas contienen los datos de cada frontend, backend y server.