Estou começando a usar o Docker e o richt agora, tentando descobrir como configurar meu primeiro ambiente Apache 2 / PHP dockerizado. Até agora, eu estava usando VMs Linux completas, onde eu usava arquivos de log sendo gravados em / var / log / apache2, depois utilizava "logrotate" para saltar para um novo arquivo todos os dias.
Os arquivos de log foram usados principalmente para detecção imediata de erros (ou seja, faça logon no servidor e use menos para abrir os arquivos access.log e error.log atuais) e para fail2ban.
Se estou certo, isso não é praticável em um ambiente Docker - principalmente porque você geralmente não pode fazer login nos contêineres para ver os logs. Também os logs serão perdidos se o contêiner for removido.
Então: qual é o método mais comum para trabalhar com / emular / substituir access.log / error.log nessa situação? Quais são as soluções comuns para os ambientes de produção e desenvolvimento?
Minhas idéias até agora incluem o uso de um compartilhamento NFS (lento e pode causar colisões de nome de arquivo se não for cuidadoso) e logstash (não tenho certeza se vale a pena o esforço e praticável para sites menores ou mesmo ambientes de desenvolvimento?), Mas tenho certeza de que pessoas inteligentes surgiu com melhores soluções?
Não tenho certeza se isso faz diferença, mas atualmente estou baseando minha imagem do Docker no php: 5.6-apache .
fonte
docker attach <container name>
é a boa maneira de ver o stdout do seu contêiner. Mas lembre-se de que, se você pressionar ctrl + d ou ctrl + c, TERMINARÁ (sigkill) sua tarefa em andamento. Então você precisa desanexá-lo adequadamente usando a tecla Escapectrl+p+q
. Se você deseja apenas fazer shell no seu contêiner, prefiro usar oexec
comando acima.Que tal gravar o acesso e o log de erros em stderr e stdout?
https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E
https://gist.github.com/afolarin/a2ac14231d9079920864
O registro centralizado com o ELK permitiria um monitoramento mais proativo. Mas você já pensou nisso.
fonte
Até agora, encontrei " logs do docker " sendo mencionados várias vezes.
Sou um novato absoluto no Docker, de modo que possa conter a solução para o meu problema - mas até agora não entendi completamente o conceito por trás desse comando.
O Docker parece manter toda a saída stdout nos arquivos JSON em / var / lib / docker / containers / e me dá a chance de acessá-los através do comando logs.
Até agora, não tenho certeza de como realmente usar a saída.
fonte
Talvez esse recurso não existisse quando a pergunta foi feita, mas com o argumento -v da execução, você pode montar um diretório no host em um diretório no contêiner.
Dessa forma, os arquivos de log (ou outros) sobreviverão quando o contêiner for excluído e você poderá acessar os arquivos como se o apache estivesse instalado no host e não em um contêiner.
Como alternativa, você pode, de alguma forma, enviar arquivos de log modificados para um local central. A pilha Kibana usa a batida de arquivo para conseguir isso, mas deve ser possível executá-la de forma independente se você não se importa com o restante da pilha.
fonte
a imagem do docker que escolhi apenas vinculou todos os arquivos * .log em / dev / stdout e / dev / stderr, para que eu não os pudesse ler.
depois de remover os arquivos e reiniciar o apache, posso obter os logs em / var / log / na janela de encaixe.
fonte
No arquivo de configuração do apache, você pode adicionar:
CustomLog / dev / stdout
ErrorLog / dev / stderr
e para ver os logs, use o comando abaixo:
docker logs container_id
fonte