Logs do HAProxy
Este artigo documenta nossa configuração do Ubuntu Lucid de 2010. Ele usa a configuração legada do rsyslog e os comandos de serviço do Upstart dessa versão, não uma instalação atual do Ubuntu.
Na Transloadit, usamos o HAProxy, “o balanceador de carga TCP/HTTP confiável e de alto desempenho”, para oferecer diferentes serviços em uma única porta. Por exemplo, dependendo do hostname, uma requisição para a porta 80 pode ser roteada para o Node.js (no caso de api.transloadit.com) ou para o Nginx (no caso de www.transloadit.com). O HAProxy tem nos atendido bem, e configurá-lo foi muito fácil. Mas fazer o HAProxy gerar logs no Ubuntu Lucid se mostrou mais difícil do que eu imaginava. Todos os tutoriais que encontrei ou não abordavam logs ou continham informações obsoletas. De repente, o Google deixou de ser meu amigo.
O HAProxy quer registrar logs
Por motivos de desempenho e manutenção, o HAProxy não grava logs diretamente em arquivos. Em vez disso, ele quer enviar os logs para um servidor syslog. Trata-se de um daemon Linux separado, que a maioria dos servidores já possui. O HAProxy, porém, exige que ele escute na porta UDP 514, e isso normalmente não vem habilitado.
Um servidor syslog recebe entradas de log, decide quais são relevantes e as grava em disco de forma altamente otimizada. Todos esses aspectos podem ser configurados como você preferir.
Se olharmos o início do seu arquivo /etc/haproxy/haproxy.cfg atual, podemos encontrar algo como:
global
maxconn 10000
ulimit-n 65536
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
Como você pode ver, 127.0.0.1 é onde ele tentará encontrar um servidor syslog para enviar os logs. No
Ubuntu Lucid, o daemon syslog padrão é o
rsyslogd, então vamos fazê-lo
aceitar as entradas de log do HAProxy.
O rsyslogd dá as boas-vindas ao HAProxy
A maioria dos resultados do Google sobre logs com o HAProxy me dizia para alterar o arquivo
/etc/default/rsyslog, mas esse arquivo agora é completamente ignorado no novo sistema
upstart. Além disso, mesmo que você faça o HAProxy respeitar o arquivo
padrão (sim, eu tentei), isso força o rsyslogd a entrar em modo de compatibilidade. Isso não só é uma
pena, como também, no fim das contas, desnecessário.
Usando as seguintes linhas de configuração:
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
o rsyslogd escutará apenas na interface de loopback. Não exponha um listener syslog sem autenticação à rede pública.
Onde colocar essas linhas, você pergunta? Bem, se você usa a porta UDP do syslog apenas para o
serviço do HAProxy, pode colocar/descomentar tudo em um único arquivo /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
Agora, basta executar rapidamente:
restart rsyslog
E pronto. Confira os logs do HAProxy em:
tail -f /var/log/haproxy*.log
E não se esqueça de ajustar o nível de depuração em /etc/haproxy/haproxy.cfg.
Bons logs!
