Muitas coisas podem acontecer quando um usuário aterrissa em um website. Há até mesmo momentos em que as solicitações do usuário não chegam a um servidor, potencialmente dando-lhe um falso positivo dizendo que tudo está OK. Há muito tempo atrás, um website usava apenas um servidor. No mundo distribuído de hoje, há muitos servidores atrás de um balanceador de carga distribuindo a carga do usuário do site.
Então como você pode saber se tudo está funcionando bem entre seus usuários e seus servidores? Os logs emitidos por balanceadores de carga e servidores proxy como o HAProxy dão-lhe uma perspectiva diferente. Eles podem dizer-lhe, por exemplo, quanto tempo os pedidos dos utilizadores demoram e quantos pedidos falham. Esta informação é valiosa e pode lhe dar mais pistas quando você está resolvendo incidentes em um ambiente ao vivo.
No post de hoje, eu lhe darei uma breve explicação de como funciona o log em HAProxy, como funciona a configuração do log, como processar logs e como evitar ficar sem armazenamento em seus servidores devido ao grande tamanho dos arquivos de log.
Como funciona o Logging em HAProxy?
Quando instalar o HAProxy, você pode configurar como quer trabalhar com os logs que esta ferramenta grava. Por exemplo, você pode configurar o HAProxy para enviar os logs para diferentes locais ao mesmo tempo. Talvez uma equipa precise de obter os logs em tempo real e outra pode usar os logs para identificar uma tendência histórica. Alternativamente, você pode simplesmente querer migrar os logs para um local diferente como uma solução de armazenamento de logs centralizado.
Tipicamente, quando você configura os logs para uma ferramenta, você quer os logs gravados em um disco local. Entretanto, em um cenário onde haverá muitas operações de gravação de logs, isso pode ser contraproducente. O desempenho pode ser degradado, e você pode perder alguns dos logs. Por defeito, o HAProxy vem com uma configuração para escrever logs num socket porque é mais rápido do que enviar logs pela rede ou escrever directamente para um ficheiro.
Na documentação do HAProxy, existe uma secção que cobre os logs com mais detalhe. Uma vez que você tenha o básico deste post, você pode rapidamente mergulhar mais profundamente em outros tópicos como como capturar cookies ou cabeçalhos HTTP. Pode até configurar o tipo ou verbosidade dos logs que gostaria de ver.
Se ainda não o fez, instale o HAProxy. No Ubuntu, pode fazê-lo desta forma:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Configurar Registo para Syslog
Por defeito, existem duas secções no ficheiro de configuração do HAProxy: global e por defeito. Na secção global, você configura funcionalidades de baixo nível como segurança, desempenho e destinos de registo. A seção default é onde você tem as configurações que se aplicam a todas as outras seções proxy abaixo, como o front end e o back end. O objetivo é evitar a repetição. Um post no site HAProxy fornece mais detalhes sobre cada seção, mas para o nosso caso, as seções global e padrão são suficientes.
No arquivo de configuração padrão (/etc/haproxy/haproxy).cfg), você tem algo assim para log:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Quando você olha para o diretório “/dev/log/”, você verá um link simbólico para o diário do systemd, o que significa que os logs estão sendo enviados para syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Versões recentes como Ubuntu 18.04 vêm com o rsyslog instalado. Caso contrário, você precisará instalá-lo executando o comando “sudo apt install -y rsyslog” no seu servidor. Então olhe a configuração na pasta rsyslog. No meu caso, parece isto:
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
Notice que há um arquivo com o nome “49-haproxy.conf”, que é onde existe a configuração para o log do HAProxy. Se você não vê um arquivo como este, crie-o. Aqui está o conteúdo padrão:
$ 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&~
Você pode ver que os logs serão escritos no arquivo /var/log/haproxy.log. A partir daí, é o seu trabalho fazer algo com esses logs. No entanto, você pode precisar reiniciar o rsyslog e o HAProxy antes de poder ver alguns logs. Você pode fazer isso executando os seguintes comandos:
sudo service rsyslog restartsudo service haproxy restart
Você deve pelo menos ver alguns logs iniciais 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)
Agora que você tem logs, é hora de fazer algo com eles. Não importa qual ferramenta você usa para processar seus logs a partir do arquivo haproxy.log. Por exemplo, você pode escolher uma ferramenta como SolarWinds® Loggly®, que também tem um agente para processar logs e enviá-los para Loggly automaticamente.
Configure Back-End Servers
Se você quiser tentar ver como os logs funcionam por padrão quando você adiciona mais proxies, você pode fazer isso adicionando uma configuração como a seguinte no final da haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Substitua “Your-Webserver1-IP” e “Your-Webserver2-IP” pelos endereços IP dos servidores para os quais você quer redirecionar o tráfego. Guarde as alterações e reinicie o serviço HAProxy. Note que não foi necessário incluir nenhuma configuração de registo na secção de proxy back-end. Deverá agora ser capaz de enviar tráfego para esses servidores back-end através do HAProxy, e os logs irão automaticamente para o ficheiro haproxy.log.
Rotate Logs With Logrotate
Finalmente, como bons cidadãos, precisamos de ter a certeza que o haproxy.log não come todo o armazenamento do servidor. Para fazer isso, você pode usar o logrotate. No meu caso, ele vem instalado por padrão, mas você pode instalá-lo usando o seguinte comando:
sudo apt-get install logrotate
Então você terá um arquivo de configuração como o seguinte para limpar e comprimir o arquivo 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}
Quando você usar a configuração acima, logrotate aplicará esta regra todos os dias, mantendo quaisquer logs com 52 dias ou mais recentes. Ele também comprime os arquivos rotacionados em um formato gzip. Você não precisará se preocupar em ter muitos arquivos de log no server-logrotate irá remover quaisquer arquivos mais antigos para você. Ao usar esta configuração simples, você pode evitar ter que acordar no meio da noite para remover os logs. Parece uma grande coisa, certo?
Para ter a certeza que a configuração funciona, reinicie o HAProxy e o rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Conclusion
Eu apenas risquei a superfície das opções de registo que o HAProxy fornece. Você pode continuar olhando para a documentação oficial. Há também um excelente post no blog HAProxy que vai mais fundo em como alterar os logs de formato e até mesmo como obter métricas de perfil.
Notice I used an Ubuntu 18.04 server in AWS, and most of the configurations I discussed here are there by default. Nem todos os servidores virão desta forma, mas pelo menos agora você sabe como o login funciona no HAProxy e onde estão estas configurações para que você possa modificá-las se necessário. Feliz logon!