Angenommen, Sie haben mehrere Container und möchten die Protokolle in einer einzigen Datei zusammenfassen, müssen Sie einen Protokollaggregator wie fluentd verwenden. fluentd wird als Protokollierungstreiber für Docker-Container unterstützt.
In Docker-Compose müssen Sie also den Protokollierungstreiber definieren
service1:
image: webapp:0.0.1
logging:
driver: "fluentd"
options:
tag: service1
service2:
image: myapp:0.0.1
logging:
driver: "fluentd"
options:
tag: service2
Der zweite Schritt wäre die Aktualisierung der fließenden Konfiguration, um die Protokolle sowohl für Dienst 1 als auch für Dienst 2 bereitzustellen
<match service1>
@type copy
<store>
@type file
path /fluentd/log/service/service.*.log
time_slice_format %Y%m%d
time_slice_wait 10m
time_format %Y%m%dT%H%M%S%z
</store>
</match>
<match service2>
@type copy
<store>
@type file
path /fluentd/log/service/service.*.log
time_slice_format %Y%m%d
time_slice_wait 10m
time_format %Y%m%dT%H%M%S%
</store>
</match>
In dieser Konfiguration bitten wir Sie, Protokolle in eine einzelne Datei in diesen Pfad zu schreiben
/fluentd/log/service/service.*.log
und der dritte Schritt wäre, das angepasste Fluentd auszuführen, das mit dem Schreiben der Protokolle in die Datei beginnt.
Hier ist der Link für Schritt-für-Schritt-Anleitungen
Etwas lang, aber korrekt, da Sie mehr Kontrolle über den Pfad der Protokolldateien usw. haben und dies auch in Docker Swarm gut funktioniert.
tail -f `docker inspect --format='{{.LogPath}}' myapp`
- Es ist wirklich JSON