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!
docker-compose up
ich eine Beschwerde gesehen, dass der Port bereits verwendet wurde.
logging
Option services
stattdessen pro Container auf der gleichen Tag- Ebene sein sollte ?
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.