Warum verlassen Sie sich auf/var/log/messages Protokolle für Ihre Anwendungsprotokolle? Meiner Meinung nach sollten Ihre Anwendungsprotokolle unabhängig sein.
Angenommen, Sie haben eine Java, Ruby, Python, Knoten, Golang App (Was auch immer), dann können Sie die Protokolle in den Container in etwas wie /var/log/myapp/myapp.log pumpen. Das führen Sie Ihre Log-forwarder in Ihrem Container zu ELK allem unter /var/log/myapp/myapp.log Schiff
Allgemeines der Versender die Hostnamen als container_id basierend auf dem HOSTNAME
env Variable zeigen. Zum Beispiel:
[[email protected] ~]# env | grep HOSTNAME
HOSTNAME=1dfab5ea15cd
[[email protected] ~]#
Sie können auch so etwas wie Beaver oder log-courier verwenden, um Ihre Protokolle zu versenden.
Sie können Ihre Protokolle rotieren und alte Protokolle löschen, wenn es um Speicherplatz geht.
Wenn Sie also den Befehl docker logs
verwenden möchten, um zu STDOUT und STDERR umzuleiten, wird Ihre Anwendung etwas in das Protokoll schreiben, das den Container/die Anwendung identifiziert. (Container könnte wieder der Hostname sein) Aber Sie können auf dem Host-Rechner zu /var/log/app/application.log
umleiten. Etwas wie:
containerid/<hostname>-application: INFO: <message>
Denkt nicht, dass es eine andere Art und Weise ...
Sie können auch anstelle von Logstash als eine weitere Option zu Fluentd wechseln.
Ein 'docker-compose logs -f' könnte ausreichen, wenn das ist, wie Sie sie gestartet –