Muchas cosas pueden suceder cuando un usuario aterriza en un sitio web. Incluso hay veces que las peticiones de los usuarios no llegan a un servidor, dando potencialmente un falso positivo diciendo que todo está bien. Ya han pasado los días en que un sitio web utilizaba un solo servidor. En el mundo distribuido de hoy, hay muchos servidores detrás de un equilibrador de carga que distribuye la carga de los usuarios del sitio web.
Entonces, ¿cómo puede saber si todo está funcionando bien entre sus usuarios y sus servidores? Los registros emitidos por los equilibradores de carga y los servidores proxy como HAProxy te dan una perspectiva diferente. Pueden decirle, por ejemplo, cuánto tiempo tardan las peticiones de los usuarios y cuántas peticiones fallan. Esta información es valiosa y puede darte más pistas cuando estés solucionando incidencias en un entorno vivo.
En el post de hoy, te daré una breve explicación de cómo funciona el logging en HAProxy, cómo funciona la configuración del logging, cómo procesar los logs y cómo evitar quedarte sin almacenamiento en tus servidores debido al gran tamaño de los archivos de log.
¿Cómo funciona el logging en HAProxy?
Cuando instala HAProxy, puede configurar cómo quiere trabajar con los logs que esta herramienta registra. Por ejemplo, puede configurar HAProxy para que envíe los registros a diferentes lugares al mismo tiempo. Tal vez un equipo necesite obtener los registros en tiempo real y otro pueda utilizarlos para identificar una tendencia histórica. Alternativamente, es posible que simplemente desee migrar los registros a una ubicación diferente, como una solución de almacenamiento de registros centralizada.
Típicamente, cuando se configura el registro para una herramienta, se desea que los registros se registren en un disco local. Sin embargo, en un escenario donde va a haber muchas operaciones de escritura de registros, esto puede ser contraproducente. El rendimiento podría degradarse, y usted podría perder algunos de los registros. Por defecto, HAProxy viene con una configuración para escribir los registros en un socket porque es más rápido que enviar los registros a través de la red o escribir directamente en un archivo.
En la documentación de HAProxy, hay una sección que cubre el registro en más detalle. Una vez que tengas lo básico de este post, puedes profundizar rápidamente en otros temas como la captura de cookies o cabeceras HTTP. Incluso puedes configurar el tipo o la verbosidad de los registros que te gustaría ver.
Si aún no lo has hecho, instala HAProxy. En Ubuntu, puedes hacerlo de esta manera:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Configurar el registro para Syslog
Por defecto, hay dos secciones en el archivo de configuración de HAProxy: global y por defecto. En la sección global, se configuran las características de bajo nivel como la seguridad, el rendimiento y los destinos de registro. En la sección de valores predeterminados es donde tienes la configuración que se aplica a todas las demás secciones del proxy a continuación, como el front end y el back end. El objetivo es evitar la repetición. Un post en el sitio web de HAProxy proporciona más detalles sobre cada sección, pero para nuestro caso, las secciones global y defaults son suficientes.
En el archivo de configuración por defecto (/etc/haproxy/haproxy.cfg), tienes algo así para el logging:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Cuando mires el directorio «/dev/log/», verás un enlace simbólico al journal de systemd, lo que significa que los logs se están enviando a syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Las versiones recientes como Ubuntu 18.04 vienen con rsyslog instalado. Si no, tendrás que instalarlo ejecutando el comando «sudo apt install -y rsyslog» en tu servidor. Luego mira la configuración en la carpeta rsyslog. En mi caso, se ve así:
ls -la /etc/rsyslog.d/total 24drwxr-xr-x 2 root root 4096 Aug 21 22:41 .drwxr-xr-x 90 root root 4096 Aug 21 22:41 ..-rw-r--r-- 1 root root 314 Aug 15 2017 20-ufw.conf-rw-r--r-- 1 root root 255 Jun 3 02:08 21-cloudinit.conf-rw-r--r-- 1 root root 282 Jun 22 08:41 49-haproxy.conf-rw-r--r-- 1 root root 1124 Jan 30 2018 50-default.conf
Nota que hay un archivo con el nombre «49-haproxy.conf», que es donde existe la configuración para el registro de HAProxy. Si no ves un archivo como este, créalo. Aquí está el contenido por defecto:
$ cat /etc/rsyslog.d/49-haproxy.conf# Create an additional socket in haproxy's chroot in order to allow logging via# /dev/log to chroot'ed HAProxy processes$AddUnixListenSocket /var/lib/haproxy/dev/log# Send HAProxy messages to a dedicated logfileif $programname startswith 'haproxy' then /var/log/haproxy.log&~
Puedes ver que los registros se van a escribir en el archivo /var/log/haproxy.log. A partir de ahí, es tu trabajo hacer algo con esos logs. Sin embargo, puede que necesites reiniciar rsyslog y HAProxy antes de poder ver algunos registros. Puedes hacer esto ejecutando los siguientes comandos:
sudo service rsyslog restartsudo service haproxy restart
Deberías ver al menos algunos registros iniciales como este:
$ cat /var/log/haproxy.logAug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Exiting Master process...Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Current worker 1815 exited with code 143Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : All workers exited. Exiting... (143)
Ahora que tienes registros, es el momento de hacer algo con ellos. No importa qué herramienta utilices para procesar los registros del archivo haproxy.log. Por ejemplo, puedes elegir una herramienta como SolarWinds® Loggly®, que además tiene un agente para procesar los logs y enviarlos a Loggly de forma automática.
Configuración de los servidores de back-end
Si quieres probar a ver cómo funciona el logging por defecto cuando añades más proxies, puedes hacerlo añadiendo una configuración como la siguiente al final del fichero haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Sustituye «Tu-Servidor-We1-IP» y «Tu-Servidor-We2-IP» por las direcciones IP de los servidores a los que quieres redirigir el tráfico. Guarde los cambios y reinicie el servicio HAProxy. Observa que no hemos tenido que incluir ninguna configuración de registro en la sección del proxy back-end. Ahora debería poder enviar tráfico a esos servidores back-end a través de HAProxy, y los registros irán automáticamente al archivo haproxy.log.
Rotate Logs With Logrotate
Por último, como buenos ciudadanos, tenemos que asegurarnos de que el haproxy.log no se come todo el almacenamiento del servidor. Para ello, se puede utilizar logrotate. En mi caso, viene instalado por defecto, pero podéis instalarlo usando el siguiente comando:
sudo apt-get install logrotate
Entonces tendréis un archivo de configuración como el siguiente para limpiar y comprimir el archivo haproxy.log:
cat /etc/logrotate.d/haproxy/var/log/haproxy.log { daily rotate 52 missingok notifempty compress delaycompress postrotate invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true endscript}
Cuando uséis la configuración anterior, logrotate aplicará esta regla cada día, manteniendo cualquier registro de 52 días de antigüedad o más reciente. También comprime los archivos rotados en formato gzip. No tendrá que preocuparse por tener demasiados archivos de registro en el servidor: logrotate eliminará los archivos más antiguos por usted. Utilizando esta sencilla configuración, puede evitar tener que despertarse en mitad de la noche para eliminar los registros. Suena muy bien, ¿verdad?
Para asegurarse de que la configuración funciona, reinicie HAProxy y rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Conclusión
Sólo he arañado la superficie de las opciones de registro que ofrece HAProxy. Puedes seguir mirando la documentación oficial. También hay un excelente post en el blog de HAProxy que profundiza en cómo cambiar los registros de formato e incluso cómo obtener métricas de perfil.
Nótese que he utilizado un servidor Ubuntu 18.04 en AWS, y la mayoría de las configuraciones que he comentado aquí están ahí por defecto. No todos los servidores vendrán así, pero al menos ahora sabes cómo funciona el logging en HAProxy y dónde están estas configuraciones para que puedas modificarlas si es necesario. Feliz registro!