Docker, Supervisord und Protokollierung - how zu konsolidieren Protokolle in docker logs?
So, das Experimentieren mit Docker + Supervisord + Django-app per uWSGI. Ich habe den ganzen Stapel arbeiten gut, aber brauchen, um aufzuräumen das logging.
Wenn ich starten Vorgesetzten im nicht-daemon-Modus,
/usr/bin/supervisord -n
Dann bekomme ich die logging-Ausgabe für die Betreuer gespielt in der docker logs stdout. Allerdings, wenn supervisord ist im daemon-Modus seine eigenen Protokolle erhalten verstaut im container-Dateisystem, und die Protokolle der entsprechenden Anwendungen tun das auch - in Ihrer eigenen app__stderr/stdout-Dateien.
Was ich will, ist zu protokollieren, sowohl supervisor und Anwendung stdout, um den docker-Protokoll.
Ist ab supervisord im nicht-daemon-Modus eine sinnvolle Idee dazu, oder braucht es dazu führen, dass unbeabsichtigte Konsequenzen? Auch, wie bekomme ich die Anwendung protokolliert spielte auch in den docker logs?
InformationsquelleAutor der Frage jvc26 | 2013-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin damit einverstanden, nicht mit den daemon-Modus klingt wie die beste Lösung, aber ich würde wahrscheinlich verwenden die gleiche Strategie, die Sie verwenden würden, wenn Sie hatte die tatsächlichen physischen Servern oder irgendeine Art von VM setup: zentralisieren Sie die Protokollierung.
Könnten Sie etwas self-hosted-wie logstash im inneren des Behälters, um Protokolle zu sammeln und senden Sie es an einen zentralen server. Oder verwenden Sie einen kommerziellen Dienst wie loggly oder papertrail, das gleiche zu tun.
InformationsquelleAutor der Antwort Till
Habe ich erreicht dies mit .
Installieren supervisor-stdout in Ihrem Docker-image:
Supervisord Konfiguration
Bearbeiten Sie Ihre
supervisord.conf
ungefähr so Aussehen:InformationsquelleAutor der Antwort Drew
Docker container ist wie ein kleenex, Sie es verwenden, dann löschen Sie es. Zu "lebendig", Docker, muss man etwas laufen, in den Vordergrund (während daemons im hintergrund laufen), das ist, warum Sie mit Supervisord.
So müssen Sie "redirect/hinzufügen/merge" - Prozess-output (access und error) , Supervisord Ausgabe, die Sie sehen, wenn Sie mit Ihrem container.
Als Drew sagte, jeder ist mit https://github.com/coderanger/supervisor-stdoutes zu erreichen (für mich sollte Hinzugefügt werden, supervisord Projekt!). Etwas Zog vergaß zu sagen, müssen Sie
Den supervisord Programm-Konfiguration blockieren.
Etwas sehr nützlich auch, stellen Sie sich Ihr Vorgang wird die Protokollierung in einer log-Datei anstatt in die Standardausgabe, können Sie Fragen, supervisord, um es zu sehen:
Dieser leitet php5-fpm.log-Inhalt auf stdout dann supervisord stdout über supervisord-stdout.
InformationsquelleAutor der Antwort Thomas Decaux
supervisor-stdout erfordert die Installation von python-pip, die downloads ~150 MB, für ein container ich denke, das ist eine Menge nur für die Installation ein weiteres tool.
Umleiten logfile /dev/stdout funktioniert bei mir:
http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html
InformationsquelleAutor der Antwort ruloweb
Heute die beste Praxis ist auf minimal Docker-images. Für mich, der ideale container mit Python-Anwendung enthält nur meinen code, die Bibliotheken und so etwas wie
uwsgi
wenn es notwendig ist.Veröffentlichte ich eine Lösung auf https://github.com/msgre/uwsgi_logging. Es ist einfach Django-Anwendung hinter
uwsgi
welche konfiguriert ist, um Protokolle anzuzeigen, ausuwsgi
- und Django-app auf Container stdout ohnesupervisor
.InformationsquelleAutor der Antwort msgre
In der Tat, beginnend supervisord im nicht-daemon-Modus ist die beste Lösung.
Konnte man auch mit volumes, um die Montage der supervisord, die Protokolle an einen zentralen Ort.
InformationsquelleAutor der Antwort creack