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