Monitorando Logs em Containers Docker

Trabalhar com containers Docker traz muitas facilidades, mas às vezes algumas tarefas simples, como acessar logs do Apache por exemplo, podem parecer mais complicadas do que realmente são. Felizmente, com uma pequena configuração no Dockerfile, é possível redirecionar os logs do Apache para o stdout e stderr, permitindo que você os visualize facilmente sem precisar entrar no container.

Ajustando o Dockerfile

Aqui está um exemplo de como configurar o Apache para redirecionar os logs:


# Use a imagem oficial do PHP com Apache
FROM php:8.1-apache

# Habilite o módulo de reescrita do Apache (caso necessário)
RUN a2enmod rewrite

# Copie os arquivos do diretório para o diretório padrão do Apache
COPY ./app_php/ /var/www/html/

# Conceda permissões ao diretório onde os arquivos serão armazenados
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html

# Redirecione os logs do Apache para stdout e stderr
RUN ln -sfT /dev/stderr /var/log/apache2/error.log \
    && ln -sfT /dev/stdout /var/log/apache2/access.log

# Exponha a porta 80
EXPOSE 80

# Comando para iniciar o Apache no container
CMD ["apache2-foreground"]

O que está acontecendo aqui?

Os logs do Apache normalmente ficam em arquivos dentro do container, como /var/log/apache2/error.log para erros e /var/log/apache2/access.log para acessos. No entanto, ao criar links simbólicos para stderr e stdout, redirecionamos esses logs para os streams padrão do Docker. Isso significa que eles poderão ser acessados facilmente pelo comando docker logs.

Visualizando os Logs

Com o container em execução, basta rodar:


docker logs -f 

O parâmetro -f permite acompanhar os logs em tempo real, o que é útil para depuração ou monitoramento.
Se preferir, você pode usar filtros para focar apenas nos logs que interessam:


# Logs de erro
docker logs  2>&1 | grep "error"
# Logs de acesso
docker logs  2>&1 | grep "access"

Benefícios dessa Abordagem

  • Praticidade: Não é necessário acessar o container para verificar os logs.
  • Integração com Ferramentas: Logs no stdout/stderr podem ser facilmente integrados com ferramentas de monitoramento como Docker Compose, Kubernetes, ou ELK Stack.
  • Aderência a Boas Práticas: O uso de stdout/stderr para logging segue os princípios de 12-factor apps, facilitando a manutenção e escalabilidade.

Com essa configuração simples, você terá os logs do Apache ao seu alcance, sem complicações. É mais uma forma de simplificar o desenvolvimento e manter o foco no que importa.