Lösung für das Problem, dass Docker-Protokolle nicht abgerufen werden können

Lösung für das Problem, dass Docker-Protokolle nicht abgerufen werden können

Als ich den Dienst täglich überprüfte und mir die Containerprotokolle von Portainer ansah, fand ich in der oberen rechten Ecke ein rotes Ausrufezeichen: „Containerprotokolle konnten nicht abgerufen werden.“

Da dieses Problem noch nie zuvor aufgetreten ist, ging ich zuerst zum Server und überprüfte die Protokolle mit dem Befehl „Docker Logs -f Container-ID“. Ich stellte fest, dass die Protokolle nicht verschoben werden konnten und zu einem bestimmten Zeitpunkt immer noch hängen blieben.

Nach einigem Überlegen dachte ich, dass es kein Problem mit dem Ausdrucken des Serviceprotokolls sein sollte. Ich suchte zunächst bei Google, fand aber kein Ergebnis, das meinem Problem entsprach. Da sich Protokolle teilweise erfassen und anzeigen lassen, manche jedoch nicht, dürfte ein Problem mit der von Docker eingerichteten Protokoll-Engine vorliegen.

Ursprünglich wollte ich einen Satz EFK installieren, hatte aber das Gefühl, dass die Menge der Protokolle nicht ausreichte. Daher habe ich die Docker-Protokoll-Engine nicht geändert und weiterhin das Standard-Journald verwendet.

[root@ad-official xiaoxiao]# Docker-Info|Grep-Protokollierung
 WARNUNG: Sie verwenden nicht das Standard-Seccomp-Profil
Protokollierungstreiber: journald

In der offiziellen Dokumentation von journald gibt es eine solche Beschreibung:

man journald.conf ... RateLimitInterval=, RateLimitBurst= Konfiguriert die Ratenbegrenzung, die auf alle im System generierten Nachrichten angewendet wird. Wenn in dem durch RateLimitInterval= definierten Zeitintervall mehr Nachrichten als in RateLimitBurst= angegeben von einem Dienst protokolliert werden, werden alle weiteren Nachrichten innerhalb des Intervalls gelöscht, bis das Intervall abgelaufen ist. Eine Meldung über die Anzahl der gelöschten Nachrichten wird generiert. Diese Ratenbegrenzung wird pro Dienst angewendet, sodass sich zwei Dienste, die protokollieren, nicht gegenseitig in ihren Begrenzungen stören. Standardmäßig 1000 Nachrichten in 30 s. Die Zeitangabe für RateLimitInterval= kann in den folgenden Einheiten angegeben werden: „s“, „min“, „h“, „ms“, „us“. Um jede Art von Ratenbegrenzung auszuschalten, setzen Sie einen der Werte auf 0. ...

Hier steht, dass standardmäßig nur 1.000 Protokolle innerhalb von 30 Sekunden empfangen werden können. Sie können es hier verstehen, da wir vor einiger Zeit einen Dienst mit einer täglichen Protokolldateigröße von fast 3 GB in Docker veröffentlicht haben, was sich auf die Protokolle anderer Dienste auswirkte. Eine große Anzahl von Protokollen wurde von Journald verworfen, sodass wir die Konfiguration ändern können und es kein Problem gibt.

Öffnen Sie die Datei /etc/systemd/journald.conf und ändern Sie RateLimitBurst vom Standardwert 1000 auf 5000 und passen Sie es entsprechend Ihrer aktuellen Protokollausgabe an:

[root@ad-official-Protokoll]# cat /etc/systemd/journald.conf
# Diese Datei ist Teil von systemd.
#
# systemd ist freie Software; Sie können es weitergeben und/oder modifizieren
# unter den Bedingungen der GNU Lesser General Public License, veröffentlicht von
# die Free Software Foundation; entweder Version 2.1 der Lizenz oder
# (nach Ihrer Wahl) jede spätere Version.
#
# Die Einträge in dieser Datei zeigen die Standardeinstellungen zur Kompilierungszeit.
# Sie können die Einstellungen ändern, indem Sie diese Datei bearbeiten.
# Die Standardeinstellungen können durch einfaches Löschen dieser Datei wiederhergestellt werden.
#
# Siehe journald.conf(5) für Details.

[Zeitschrift]
#Storage=auto
#Komprimieren=ja
#Siegel=ja
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
RateLimitBurst=5000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1Monat
ForwardToSyslog=nein
#ForwardToKMsg=nein
#ForwardToConsole=nein
ForwardToWall=nein
#TTYPath=/dev/Konsole
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=Hinweis
#MaxLevelConsole=info
#MaxLevelWall=Notfall
#ZeilenMax=48K

Setzen Sie ForwardToSyslog und ForwardToWall übrigens auf „Nein“, da die Standardeinstellung „Ja“ ist. Dadurch werden die Journal-Protokolldateien bereinigt, während die Syslog-Protokolldateien nicht gelöscht werden, wodurch die Festplatte langsam gefüllt wird.

Starten Sie dann journald neu, um die normale Verwendung fortzusetzen: systemctl restart systemd-journald.service

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Verwendung von Umgebungsvariablen in Docker und Lösungen für häufige Probleme
  • Docker löst das Problem, dass das Terminal kein Chinesisch eingeben kann
  • Docker legt Port 2375 frei, was zu Serverangriffen und -lösungen führt
  • Installieren Sie Jenkins mit Docker und lösen Sie das Problem des anfänglichen Plugin-Installationsfehlers
  • Beheben Sie das Problem, dass der Docker-Container das externe Netzwerk nicht anpingen kann
  • Beim Einrichten von Jenkins in einer Docker-Umgebung werden im Konsolenprotokoll beim Erstellen von Aufgaben verstümmelte chinesische Zeichen angezeigt
  • Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann
  • Häufig gestellte Fragen zu Docker

<<:  So ändern Sie das Root-Benutzerkennwort in MySQL 8.0.16, WinX64 und Linux

>>:  Verwenden von js zum Implementieren der bidirektionalen Bindungsfunktion von Daten in Vue2.0

Artikel empfehlen

Detaillierte Analyse der MySQL-Optimierung von like und = Leistung

Einführung Die meisten Leute, die schon einmal Da...

onfocus="this.blur()" wird von blinden Webmastern gehasst

Als er über die Seite zur Bedienung der Bildschir...

Detaillierte Erklärung, wo das von Docker abgerufene Image gespeichert ist

20200804Nachtrag: Der Artikel könnte falsch sein....

Implementierung der Navigationsleiste und des Dropdown-Menüs in CSS

1. CSS-Navigationsleiste (1) Funktion der Navigat...

So fragen Sie doppelte Daten in einer MySQL-Tabelle ab

INSERT INTO hk_test(Benutzername, Passwort) VALUE...

HTML-Tabellen-Tag-Tutorial (19): Zeilen-Tag

Die Attribute des <TR>-Tags werden verwende...

Docker-Bereitstellung – Springboot-Projektbeispielanalyse

Dieser Artikel stellt hauptsächlich die Beispiela...

Lösung für Docker-Container, der Schriftarten wie Songti nicht erkennt

Problemhintergrund: Wenn Sie Docker zum Bereitste...

Einführung in die Installationsmethode in Vue

Inhaltsverzeichnis 1. Weltweit registrierte Kompo...

So verwenden Sie Nginx zur Simulation einer Blue-Green-Bereitstellung

Dieser Artikel stellt die Blue-Green-Bereitstellu...

So fügen Sie in JS eine Abbruchfunktion zu einem Versprechen hinzu

Inhaltsverzeichnis Überblick Promise Race Methode...

SQL-Implementierung von LeetCode (184. Das höchste Gehalt der Abteilung)

[LeetCode] 184. Abteilung Höchstes Gehalt Die Mit...

Einfaches Beispiel für HTML-Textformatierung (ausführliche Erklärung)

1. Textformatierung: Dieses Beispiel zeigt, wie T...