web-dev-qa-db-fra.com

Apache dans Docker: Comment puis-je "access.log"?

Je viens de commencer avec Docker et richt maintenant j'essaye de comprendre comment configurer mon premier environnement Apache 2/PHP. Dockerized. Jusqu'à présent, j'utilisais des machines virtuelles Linux complètes , où j'ai utilisé des fichiers journaux écrits dans/var/log/Apache2, puis j'utilise "logrotate" pour accéder à un nouveau fichier chaque jour.

Les fichiers journaux étaient principalement utilisés pour la détection immédiate des erreurs (c'est-à-dire pour se connecter au serveur et utiliser moins pour ouvrir les fichiers access.log et error.log actuels) et pour fail2ban.

Si j'ai raison, ce n'est pas possible dans un environnement Docker - principalement parce que vous ne pouvez généralement pas vous connecter aux conteneurs pour consulter les journaux. De plus, les journaux seront perdus si le conteneur est retiré.

Donc: Quelle est la méthode la plus courante pour travailler avec/émuler/remplacer access.log/error.log dans cette situation? Quelles sont les solutions courantes pour les environnements de production et de développement?

Jusqu'à présent, mes idées incluent l'utilisation d'un partage NFS (lent et peut provoquer des collisions de noms de fichiers si ce n'est pas prudent), et logstash (je ne sais pas si cela vaut la peine et pratique pour les petits sites ou même les environnements de développement?) mais je suis sûr que les gens intelligents ont trouvé de meilleures solutions?

Je ne sais pas si cela fait une différence, mais actuellement je fonde mon image Docker sur php: 5.6-Apache .

19
BlaM

Vous pouvez toujours utiliser la commande docker exec -it <your container name> /bin/bash Pour entrer dans votre conteneur et faire votre travail normal. Ou peut-être vous pouvez changer /bin/bash Dans votre commande ou script .sh De votre commande pour l'exécuter.

Pour sortir votre fichier du conteneur, utilisez docker cp <container name:/path/to/file> </your local machine/path/>

Et pour votre travail quotidien, vous pouvez utiliser cron pour cronjob ces commandes. Je vous recommande fortement d'avoir alias vos fréquentes commandes docker. Pour que je puisse utiliser Docker avec bonheur avec quelques clés.

La commande docker logs <container name/id> Permet d'afficher le journal à partir de l'exécution de l'image docker. Il montre la sortie de redirection vers stdout.

14
Fony Lew

Que diriez-vous d'écrire le journal des accès et des erreurs sur stderr et 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

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

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

La journalisation centralisée avec WAPITI permettrait cependant une surveillance plus proactive. Mais vous y avez déjà pensé vous-même.

6
JayMcTee

Dans le fichier de configuration Apache, vous pouvez ajouter:
CustomLog/dev/stdout
ErrorLog/dev/stderr

et pour voir les journaux, utilisez la commande ci-dessous:
journaux Docker container_id

3
S.Bao
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:~ #

l'image de docker que j'ai choisie vient de lier tous les fichiers * .log à/dev/stdout et/dev/stderr, donc je n'ai pas pu les lire.

après avoir supprimé les fichiers et redémarré Apache, je peux obtenir les journaux de/var/log/dans le menu fixe.

docker-compose exec Apache bash -c "tail -f /var/log/Apache2/*.log"
1
Ohad Cohen

Peut-être que cette fonctionnalité n'existait pas lorsque la question a été posée, mais avec l'argument -v de run, vous pouvez monter un répertoire sur l'hôte sur un répertoire dans le conteneur.

docker run -v [Host_dir]:[container_dir]

De cette façon, les fichiers journaux (ou autres) survivront lorsque le conteneur est supprimé et vous pouvez accéder aux fichiers comme si Apache était installé sur l'hôte plutôt que dans un conteneur.

Alternativement, vous pouvez en quelque sorte pousser les fichiers journaux modifiés vers un emplacement central. La pile Kibana utilise filebeat pour y parvenir, mais il devrait être possible d'exécuter filebeat indépendamment si vous ne vous souciez pas du reste de la pile.

1
Erik Lievaart

Jusqu'à présent, j'ai trouvé " docker logs " mentionné plusieurs fois.

Je suis un vrai Docker newb, donc cela pourrait contenir la solution à mon problème - mais jusqu'à présent, je n'ai pas complètement compris le concept derrière cette commande.

Docker semble conserver toutes les sorties stdout dans fichiers JSON dans/var/lib/docker/containers/et me donne une chance d'y accéder via la commande logs.

Jusqu'à présent, je ne sais pas vraiment comment utiliser la sortie.

1
BlaM