Ich möchte wissen, wie ich meine Docker-Container-Protokolle am einfachsten an einen ELK-Server weiterleiten kann. Bisher haben die Lösungen, die ich nach der Suche im Internet ausprobiert habe, überhaupt nicht funktioniert.
Grundsätzlich habe ich ein Docker-Image, das ich mit Docker-Compose ausführe. Dieser Container protokolliert nichts lokal (er besteht aus verschiedenen Diensten, aber keiner von ihnen ist Logstash oder was auch immer), aber ich sehe die Protokollierung durch docker logs -tf imageName
oder docker-compose logs
. Da ich die Container mit compose beginne, kann ich die --logs-driver
Docker-Option nicht nutzen (oder weiß zumindest nicht wie) .
Daher habe ich mich gefragt, ob mich jemand ein bisschen darüber aufklären könnte, wie man diese Protokolle beispielsweise an einen ELK-Container weiterleitet.
Danke im Voraus,
Grüße
LÖSUNG :
Dank madeddie konnte ich mein Problem folgendermaßen lösen. Erwähnen Sie, dass ich die grundlegenden ELK-Stack-in-Container verwendet habe, die madeddie in seinem Beitrag vorgeschlagen hat.
Zuerst aktualisiere ich die docker-compose.yml
Datei meines Containers, um Einträge für die Protokollierungsreferenz hinzuzufügen, wie Madeddie mir sagte. Ich habe einen Eintrag pro Dienst hinzugefügt. Ein Ausschnitt aus meinem Docker-Compose sieht so aus
version: '2'
services:
mosquitto:
image: ansi/mosquitto
ports:
- "1883:1883" # Public access to MQTT
- "12202:12202" #mapping logs
logging:
driver: gelf
options:
gelf-address: udp://localhost:12202
redis:
image: redis
command: redis-server --appendonly yes
ports:
- "6379:6379" # No public access to Redis
- "12203:12203" #mapping logs
volumes:
- /home/dockeruser/redis-data:/data
logging:
driver: gelf
options:
gelf-address: udp://localhost:12203
Zweitens musste ich pro Service eine andere Portnummer verwenden, um die Protokolle weiterleiten zu können.
Schließlich habe ich meine docker-compose.yml
Elchcontainerdatei aktualisiert , um jeden der Aktualisierungsports, an denen ich meine Protokolle gesendet habe, dem zuzuordnen, den logstash abhört
logstash:
build: logstash/
command: logstash -f /etc/logstash/conf.d/logstash.conf
volumes:
- ./logstash/config:/etc/logstash/conf.d
ports:
- "5000:5000"
- "12202:12201/udp" #mapping mosquitto logs
- "12203:12201/udp" #mapping redis logs
Bei dieser Konfiguration und dem Hinzufügen des Eintrags von gelf {}
in logstash.conf
ist es ebenfalls wichtig, die IP-Adresse des Docker-Dienstes ordnungsgemäß einzurichten.
Grüße!
gelf-address:udp://ip_of_dockerhost:12201
(wenn alle Container auf demselben Host ausgeführt werden, würde 172.17.0.1 als ip_of_dockerhost funktionieren , andernfalls verwenden Sie die Haupt-IP-Adresse des Hosts, auf dem der Logstash-Container ausgeführt wird.docker-compose up
ich eine Beschwerde gesehen, dass der Port bereits verwendet wurde.logging
Optionservices
stattdessen pro Container auf der gleichen Tag- Ebene sein sollte ?Antworten:
Docker compose hat das Protokollierungsschlüsselwort: source
Wenn Sie also wissen, wohin Sie von dort aus gehen sollen, versuchen Sie es.
Wenn nicht, kann ich Ihnen raten, in den
gelf
Protokollierungstreiber für Docker und das Logstash-Gelf-Eingabe-Plugin zu schauenWenn Sie beispielsweise dieses grundlegende ELK-Stack-in-Container-Setup verwenden würden, würden Sie die Docker-Compose-Datei aktualisieren und
- "12201:12201/udp"
dem Logstash einen Port hinzufügen.Bearbeiten Sie den
logstash.conf
Eingabeabschnitt wie folgt:Konfigurieren Sie dann Ihre Container so, dass sie den Protokollierungstreiber
gelf
(nicht Syslog) und die Optiongelf-address=udp://ip_of_logstash:12201
(anstelle der Syslog-Adresse) verwenden.Die einzige Magie, um die Sie sich kümmern müssen, ist, wie Docker die IP-Adresse oder den Hostnamen des Logstash-Containers findet. Sie können dies durch Docker-Compose-Namen, Docker-Links oder einfach manuell lösen.
Docker und ELK sind mächtige, flexible, aber auch große und komplexe Bestien. Bereiten Sie sich darauf vor, etwas Zeit in das Lesen und Experimentieren zu investieren.
Haben Sie keine Angst davor, neue (und vorzugsweise sehr spezifische) Fragen zu stellen, auf die Sie stoßen, während Sie all dies untersuchen.
quelle
docker-compose.yml
Datei ausgeführt wird, oder? Ich habe es für zwei Dienste getan und jetzt melden sich diese nicht am Terminal an, also schätze ich, dass ihre Protokolle weitergeleitet werden. Ich habe ein bisschen Erfahrung damit, aber hauptsächlich aus der Literatur (ich habe gelesen, dass Filebeat besser ist). Könnten Sie diese Konfigurationen auch hier einfügen?sebp/elk
Image heruntergeladen , in dem elk eingerichtet ist, und ich plane, dieses Syslog an diesen Container weiterzuleiten.syslog-address: "tcp://192.168.0.42:123"
Option bedeutet "Protokolle an diesen Syslog-Server senden", sodass Syslog-Nachrichten nicht selbst eingerichtet und abgehört werden.