Je viens de commencer avec Docker et richt maintenant j'essaie de comprendre comment configurer mon premier environnement Apache 2 / PHP docké. Jusqu'à présent, j'utilisais des machines virtuelles Linux complètes, où j'utilisais des fichiers journaux écrits dans / var / log / apache2, puis j'utilisais "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 je ne me trompe pas, cela 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 avez 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 .
docker attach <container name>
c'est le bon moyen de voir la sortie standard de votre conteneur. Mais sachez que si vous faites ctrl + d ou ctrl + c, cela mettra fin (sigkill) à votre tâche en cours. Vous devez donc le détacher correctement en utilisant la touche d'échappementctrl+p+q
. Si vous voulez simplement décortiquer dans votre conteneur, je préfère utiliser laexec
commande ci-dessus.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
Une journalisation centralisée avec ELK permettrait cependant une surveillance plus proactive. Mais vous y avez déjà pensé vous-même.
la source
Jusqu'à présent, j'ai constaté que les « journaux de docker » étaient mentionnés à plusieurs reprises.
Je suis un vrai Docker newb, donc cela pourrait détenir 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 les 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.
la source
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.
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.
la source
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.
la source
Dans le fichier de configuration d'apache, vous pouvez ajouter:
CustomLog / dev / stdout
ErrorLog / dev / stderr
et pour voir les journaux, utilisez la commande ci-dessous:
docker logs container_id
la source