Wir haben eine Anwendung, die drei Arten von Protokollen in drei separate Dateien schreibt: Zugriffsprotokolle, allgemeine Anwendungsprotokolle und Systemprotokolle. Das Format (und der Zweck) dieser Protokolle sind sehr unterschiedlich. Und wir haben separate Logforwarder, die sie separat an unser zentrales Logging-System senden.
Basierend auf dem Prinzip, dass Protokolle als Ereignisströme behandelt werden, überlegen wir, von der Verwendung von Dateien zur Standardausgabe überzugehen. Obwohl wir einige Vorteile dieses Ansatzes kennen, würde dies auch bedeuten, dass wir einen zusammengeführten Stream der unterschiedlich formatierten Protokolle erhalten, die wir entweder erneut teilen müssen, bevor wir sie an unser zentrales System (Kibana / Splunk) senden können / etc.) oder drinnen.
Wir fragen uns, ob es Tools oder Empfehlungen gibt, wie wir mit dieser Situation umgehen sollen.
Antworten:
Ich bin immer noch auf der Suche nach einem Zusammenführungs- / Aufteilungsansatz, aber mittlerweile scheint dieser in der Kubernetes-Dokumentation empfohlene Ansatz eine vernünftige Lösung zu sein: Verwenden Sie für jedes Ihrer separaten Protokolle einen Beiwagen-Container .
Ein "Beiwagen" ist ein Docker-Container, den Sie neben einem anderen Docker-Container verwenden, um auf irgendeine Weise damit zu arbeiten. In diesem Fall hätten Sie für jedes Ihrer drei Protokolle einen separaten Container, der die Protokolle und Ausgaben auf stdout scannt oder abfängt.
Auf diese Weise hat jeder Ihrer log-sidecar-Container ein eigenes Docker-Log von seinem eigenen Standard. Da Sie auf diese Weise getrennt sind, können Sie Standardmethoden für Docker (und Kubernetes usw.) zum Trennen oder Zusammenfassen verwenden. Das sagt die Kubernetes-Seite:
Die "separaten Protokolldatenströme" sind auf die integrierte Kennzeichnung zurückzuführen, die Docker für Protokolle aus verschiedenen Containern anwendet. Eine Beschreibung finden Sie in der Docker-Dokumentation hier:
quelle
Die Idee, sie zu einem Stream zusammenzuführen, um sie später aufzuteilen, klingt schmerzhaft. Ich hatte keinen Grund, dies selbst zu tun, aber hier fange ich an:
Es fühlt sich nicht gerade elegant an, auch auf dem Host etwas einrichten zu müssen, aber wenn Sie so etwas wie Ansible verwenden, bei dem Sie ein Playbook ausführen und dieses während der Bereitstellung auf der Box einrichten können, sollte es nicht so sein Schlecht.
quelle