Skip to main content

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 ;csv y el parámetro norefresh cuando 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.