Registro de logs de HAProxy
Este artículo documenta nuestra configuración de Ubuntu Lucid de 2010. Usa la configuración heredada de rsyslog y los comandos de servicio de Upstart de esa versión, no una instalación actual de Ubuntu.
En Transloadit usamos HAProxy, «The Reliable, High Performance TCP/HTTP Load Balancer», para poder ofrecer distintos servicios en un mismo puerto. Por ejemplo, según el nombre de host, una solicitud al puerto 80 se puede enrutar a Node.js (en el caso de api.transloadit.com) o a Nginx (en el caso de www.transloadit.com). HAProxy nos ha funcionado muy bien y configurarlo fue pan comido. Pero conseguir que HAProxy registre logs en Ubuntu Lucid resultó más difícil de lo que pensaba. Todos los tutoriales que encontré o no cubrían el registro de logs o contenían información obsoleta. De repente, Google dejó de ser mi amigo.
HAProxy quiere registrar logs
Por razones de rendimiento y mantenimiento, HAProxy no escribe los logs directamente en archivos. En su lugar, quiere enviarlos a un servidor syslog. Se trata de un daemon de Linux independiente con el que la mayoría de los servidores ya vienen equipados. Sin embargo, HAProxy requiere que escuche en el puerto UDP 514, y eso normalmente no está habilitado.
Un servidor syslog recibe las entradas de log, decide cuáles son interesantes y las escribe en disco de forma muy optimizada. Todos estos aspectos se pueden configurar a tu gusto.
Si miramos el principio de tu archivo /etc/haproxy/haproxy.cfg actual, puede que encontremos algo como:
global
maxconn 10000
ulimit-n 65536
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
Como puedes ver, 127.0.0.1 es la dirección donde intentará encontrar un servidor syslog al que
enviar los logs. En Ubuntu Lucid, el daemon syslog predeterminado es
rsyslogd, así que hagamos que ese
acepte las entradas de log de HAProxy.
Rsyslogd da la bienvenida a HAProxy
La mayoría de los resultados de Google que tratan el registro de logs con HAProxy me decían que
modificara el archivo /etc/default/rsyslog, pero ese archivo ahora se ignora por completo bajo el nuevo
sistema upstart. Además, aunque hagas que HAProxy respete el archivo
predeterminado (sí, lo intenté), forzará a rsyslogd a entrar en modo de compatibilidad. Eso no solo
es una lástima, sino que además resulta innecesario.
Usando las siguientes líneas de configuración:
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
rsyslogd escuchará únicamente en la interfaz de loopback. No expongas un listener de syslog sin autenticación a la red pública.
¿Que dónde poner estas líneas? Bueno, si solo usas el puerto UDP de syslog para el servicio de
HAProxy, puedes poner o descomentar todo en un único archivo /etc/rsyslog.d/haproxy.conf:
# .. otherwise consider putting these three in /etc/rsyslog.conf instead:
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
# ..and in any case, put these two in /etc/rsyslog.d/haproxy.conf:
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
Ahora ejecuta rápidamente:
restart rsyslog
Y listo. Busca los logs de HAProxy en:
tail -f /var/log/haproxy*.log
Y no olvides ajustar el nivel de depuración en /etc/haproxy/haproxy.cfg.
¡Feliz registro de logs!
