163 votes

comment rediriger les journaux du menu fixe vers un fichier unique?

Je souhaite rediriger tous les journaux de mon conteneur Docker vers un seul fichier journal pour les analyser. j'ai essayé

 docker logs container > /tmp/stdout.log 2>/tmp/stderr.log
 

mais cela donne un journal dans deux fichiers différents. J'ai déjà essayé

 docker logs container > /tmp/stdout.log
 

Mais cela n'a pas fonctionné.

199voto

pl_rock Points 4101

Pas besoin de rediriger les logs.

Menu fixe par défaut stocker les journaux dans un fichier journal. Pour vérifier le chemin du fichier journal exécuter la commande:

docker inspect --format='{{.LogPath}}' containername

/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log

Ouvrez ce fichier journal et de les analyser.

si vous rediriger les journaux, alors vous n'obtiendrez que des journaux avant la redirection. vous ne serez pas en mesure de voir en direct les journaux.

EDIT:

Pour voir en direct les journaux que vous pouvez exécuter la commande ci-dessous

tail -f `docker inspect --format='{{.LogPath}}' containername`

Note:

Ce fichier journal /var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log sera créé que si le panneau générer des journaux, si il n'y a pas de journaux ensuite, ce fichier ne sera pas là. il est similaire, comme parfois, si nous exécuter la commande docker logs containername et elle ne retourne rien. Dans ce scénario, ce fichier ne sera pas disponible.

192voto

Eddy Hernandez Points 1576

Que diriez-vous de cette option:

docker logs containername >& logs/myFile.log

Les journaux demandés dans la question ne seront pas redirigés, mais copiés une fois dans un fichier spécifique.

62voto

jmcejuela Points 811

docker logs -f <yourContainer> &> your.log &

Explication:

  • -f (c.-à-d. --follow ): écrit tous les journaux existants et continue ( suit ) tout ce qui vient ensuite.
  • &> redirige à la fois la sortie standard et l'erreur standard.
  • Il est probable que vous souhaitiez exécuter cette méthode en arrière-plan, donc & .
  • Vous pouvez séparer la sortie de stderr par: > output.log 2> error.log (au lieu d’utiliser &> ).

17voto

Jean Velloen Points 21

Pour capturer stdout & stderr de votre conteneur de menu fixe dans un seul fichier journal, exécutez la procédure suivante:

 docker logs container > container.log 2>&1
 

12voto

Abhishek Galoda Points 589

En supposant que vous avez de multiples récipients et vous souhaitez regrouper les journaux en un seul fichier, vous devez utiliser un journal des agrégateurs comme fluentd. fluentd est pris en charge, comme l'exploitation forestière pilote pour les conteneurs docker.

Ainsi, dans docker-composer, vous devez définir l'enregistrement du pilote

  service1:
    image: webapp:0.0.1
    logging:
      driver: "fluentd"
      options:
        tag: service1 

  service2:
        image: myapp:0.0.1
        logging:
          driver: "fluentd"
          options:
            tag: service2

La deuxième étape serait de mettre à jour le fluentd conf pour accueillir les journaux de service 1 et service 2

 <match service1>
   @type copy
   <store>
    @type file
    path /fluentd/log/service/service.*.log
    time_slice_format %Y%m%d
    time_slice_wait 10m
    time_format %Y%m%dT%H%M%S%z
  </store>
 </match> 
 <match service2>
    @type copy
   <store>
    @type file
    path /fluentd/log/service/service.*.log
    time_slice_format %Y%m%d
    time_slice_wait 10m
    time_format %Y%m%dT%H%M%S%
  </store>
 </match> 

Dans cette configuration, nous vous demandons de journaux à être écrites dans un fichier unique à ce chemin d'accès
/fluentd/log/service/service.*.log

et la troisième étape serait d'exécuter la mesure fluentd qui va commencer à écrire les logs dans le fichier.

Voici le lien pour les instructions étape par étape

Peu Long, mais de manière correcte puisque vous obtenez plus de contrôle sur les fichiers journaux de chemin d'accès, etc et il fonctionne bien dans le Panneau de l'Essaim .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X