Ich fange gerade mit Docker an und versuche jetzt herauszufinden, wie ich meine erste dockerisierte Apache 2 / PHP-Umgebung einrichten kann. Bisher habe ich vollständige Linux-VMs verwendet, bei denen ich Protokolldateien verwendet habe, die in / var / log / apache2 geschrieben wurden, und dann "logrotate" verwendet habe, um jeden Tag auf eine neue Datei zu springen.
Protokolldateien wurden hauptsächlich zur sofortigen Fehlererkennung (dh Anmeldung am Server und weniger zum Öffnen der aktuellen Dateien access.log und error.log) und für fail2ban verwendet.
Wenn ich richtig liege, ist dies in einer Docker-Umgebung nicht praktikabel - hauptsächlich, weil Sie sich normalerweise nicht bei Containern anmelden können, um die Protokolle anzuzeigen. Auch Protokolle gehen verloren, wenn der Container entfernt wird.
Also: Welche Methode wird in dieser Situation am häufigsten verwendet, um mit /emulate / replace access.log / error.log zu arbeiten? Was sind gemeinsame Lösungen für Produktions- und Entwicklungsumgebungen?
Bisher habe ich die Idee , eine NFS-Freigabe zu verwenden (die langsam ist und möglicherweise zu Dateikonflikten führt , wenn man nicht aufpasst) und Logstash (nicht sicher, ob es sich für kleinere Sites oder sogar Entwicklungsumgebungen lohnt und praktikabel ist?), Aber ich bin mir sicher, dass es kluge Leute sind haben sich bessere lösungen ausgedacht?
Ich bin mir nicht sicher, ob es einen Unterschied macht, aber momentan basiere ich mein Docker-Image auf PHP: 5.6-Apache .
quelle
docker attach <container name>
ist dies der beste Weg, um stdout von Ihrem Container aus zu sehen. Aber bitte beachten Sie, dass, wenn Sie Strg + D oder Strg + C tun, es Ihre laufende Aufgabe BEENDET (Sigkill). Sie müssen es also ordnungsgemäß mit der Escape-Taste lösenctrl+p+q
. Wenn Sie nur in Ihren Container schälen möchten, bevorzuge ich die Verwendung desexec
obigen Befehls.Wie wäre es, Zugriffs- und Fehlerprotokolle in stderr und stdout zu schreiben?
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
Eine zentralisierte Protokollierung mit ELK würde jedoch eine proaktivere Überwachung ermöglichen. Aber daran haben Sie selbst schon gedacht.
quelle
Bisher habe ich festgestellt, dass " Docker-Protokolle " mehrmals erwähnt wurden.
Ich bin ein absoluter Docker-Neuling, das könnte die Lösung für mein Problem sein - aber bisher habe ich das Konzept hinter diesem Befehl nicht vollständig verstanden.
Docker scheint die gesamte Standardausgabe in JSON-Dateien in / var / lib / docker / containern / zu behalten und gibt mir die Möglichkeit, über den Befehl logs auf sie zuzugreifen.
Bisher bin ich mir nicht sicher, wie ich die Ausgabe verwenden soll.
quelle
Möglicherweise gab es diese Funktion nicht, als die Frage gestellt wurde, aber mit dem Argument -v von run können Sie ein Verzeichnis auf dem Host in ein Verzeichnis im Container mounten.
Auf diese Weise bleiben die Protokolldateien (oder andere) erhalten, wenn der Container gelöscht wird, und Sie können auf die Dateien zugreifen, als ob Apache auf dem Host und nicht in einem Container installiert wäre.
Alternativ können Sie geänderte Protokolldateien an einen zentralen Speicherort verschieben. Der Kibana-Stapel verwendet dazu Filebeat. Es sollte jedoch möglich sein, Filebeat unabhängig auszuführen, wenn Sie den Rest des Stapels nicht berücksichtigen.
quelle
Das Docker-Image, das ich ausgewählt habe, hat gerade alle * .log-Dateien mit / dev / stdout und / dev / stderr verknüpft, sodass ich sie nicht lesen konnte.
Nachdem ich die Dateien entfernt und Apache neu gestartet habe, kann ich die Protokolle aus / var / log / im Docker abrufen.
quelle
In der Apache-Konfigurationsdatei können Sie
Folgendes hinzufügen: CustomLog / dev / stdout
ErrorLog / dev / stderr
Verwenden Sie den folgenden Befehl, um die Protokolle
anzuzeigen : docker logs container_id
quelle