Apache no Docker: Como faço para “access.log”?

10

Estou apenas começando com o Docker e richt agora estou tentando descobrir como configurar o meu primeiro ambiente Apache 2 / PHP dockerized. Até agora eu tenho usado VMs Linux completas, onde eu usei arquivos de log sendo escritos para / var / log / apache2, então use "logrotate" para pegar um novo arquivo a cada dia.

Os arquivos de log foram usados principalmente para detecção imediata de erros (por exemplo, fazer logon no servidor e usar menos para abrir os arquivos atuais access.log e error.log) e para o fail2ban.

Se eu estiver correto, isso não é praticável em um ambiente do Docker - principalmente porque você geralmente não pode efetuar login em contêineres para examinar 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 / emular / substituir access.log / error.log nessa situação? Quais são as soluções comuns para ambientes de produção e desenvolvimento?

Minhas ideias até agora incluem o uso de um compartilhamento NFS (lento e pode causar colisões de nome de arquivo se não forem cuidadosas) e logstash (não tenho certeza se vale a pena o esforço e praticável para sites menores ou até mesmo ambientes de desenvolvedores?), mas tenho certeza de que pessoas inteligentes desenvolveram soluções melhores?

Não tenho certeza se isso faz diferença, mas atualmente estou baseando minha imagem do Docker em php: 5.6-apache .

    
por BlaM 15.03.2016 / 16:40

4 respostas

8

Você ainda pode usar o comando docker exec -it <your container name> /bin/bash para acessar seu contêiner e fazer seu trabalho regular. Ou talvez você possa alterar /bin/bash em seu comando ou script .sh do seu comando para executá-lo.

Para tirar seu arquivo do container use docker cp <container name:/path/to/file> </your local machine/path/>

E para o seu trabalho diário, você pode usar cron para executar o cron com esses comandos. Eu altamente recomendo que você tenha alias seus comandos de docker freqüentes. Para que eu possa usar a janela de encaixe felizmente com algumas chaves.

O comando docker logs <container name/id> é para exibir o log da execução da imagem do docker. Ele mostra a saída de redirecionamento para stdout.

    
por 15.03.2016 / 20:49
4

Que tal escrever acesso e log de erros a stderr e stdout?

link

link

RUN ln -sf /dev/stdout /var/log/nginx/access.log

RUN ln -sf /dev/stderr /var/log/nginx/error.log

O registro centralizado com o ELK permitiria um monitoramento mais proativo. Mas você já pensou nisso sozinho.

    
por 15.03.2016 / 18:50
0

Até agora eu encontrei " logs de docker " mencionado várias vezes.

Sou um Docker newb absoluto, para que possa conter a solução do meu problema - mas até agora não entendi completamente o conceito por trás desse comando.

O Docker parece manter toda a saída do stdout em 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 usar realmente a saída.

    
por 15.03.2016 / 17:24
0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

a imagem do docker que eu escolhi acabou de vincular todos os arquivos * .log para / dev / stdout e / dev / stderr, então não consegui lê-los.

depois de remover os arquivos e reiniciar o apache, posso obter os logs de / var / log / na janela de encaixe.

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"
    
por 28.10.2018 / 15:58