Die beste Methode zum Senden von Docker-Containerprotokollen an logstash

9

Sagen wir, ich habe Nginx in einem Container (Docker) ausgeführt.
Das Zugriffsprotokoll und die Fehlerprotokolle werden über STDOUT in der Docker-Datei gesendet:

%Vor%

Logspout scheint eine elegante Lösung zu sein, um STDOUT von Ihrem Container in logstash zu senden (konfiguriert mit einer syslog-Eingabe)

%Vor%

Aber Logspout hat keine Ahnung vom Format des Protokolls, das über STDOUT gesendet wird (oder fehlt mir etwas?)

Ich muss also etwas tun wie:

%Vor%

Aber was ist dann mit Nginx Fehlerprotokoll? Und was, wenn ich php-fpm log auch über STDOUT sende? Wie verwaltet Logspout das?

Eine andere Lösung besteht darin, rsyslog indose den Container auszuführen und die gesammelten Protokolle an die Eingabe von logstatsh ... zu senden.

Wie Sie sehen, ist es für mich nicht wirklich klar ... Ich würde gerne in der Lage sein, nginx und php-fpm Logs an logstash zu senden, damit sie als das interpretiert werden können, was sie sind ... aber ich tue es nicht finde eine "gute Praxis" ...

Können Sie mir bitte helfen?

    
kondor 04.03.2015, 10:31
quelle

2 Antworten

8

Sie können das jetzt mit ein bisschen italienischer Klempnerarbeit machen.

In neueren Versionen von Docker gibt es einen GELF-Ausgabetreiber , den Sie konfigurieren können send die Protokolle. Da logstash ein GELF-Eingabe-Plugin hat, können Sie logstash auf empfange dieselben Protokollnachrichten und mache etwas Nützliches mit ihnen.

Eine weitere Option, wenn Sie den GELF-Übersetzungsrundlauf vermeiden möchten, ist logspout-logstash ein Logstash-Ausgabe-Plug-in für logspout , das Protokolleinträge liest, sobald sie aus Docker stammen.

    
womble 12.11.2015 00:49
quelle
1

Ich habe gerade festgestellt, dass aktuelle Versionen von nginx so konfiguriert werden können, dass sie sich in Netzwerk-Syslog-Daemons einloggen.

>
  

Die Protokollierung in syslog ist seit Version 1.7.1 verfügbar.

Damit können Sie einen syslog-Eingabefilter an einem dedizierten UDP-Port in logstash konfigurieren und Sie sind zu den Rennen.

Leider ist v1.7.1 in offiziellen Repos noch weit entfernt. Sie benötigen einen Protokollversender irgendwo .

  1. Im nginx-Container.
  2. In einem parallelen Container mit '--volumes-from', um auf den nginx-Container zuzugreifen.
  3. Auf dem Docker-Host mit Volumes, die an das Host-Dateisystem gebunden sind.

Sie haben viele Protokollversender zur Auswahl und ein freies Kapitel des The Logstash Book, das dem Thema gewidmet ist .

    
Dan Garthwaite 22.04.2015 00:36
quelle

Tags und Links