Kubernetes 1.24: Strukturierte Protokolle für mehr Klarheit
Entdecken Sie die neuen Funktionen für strukturiertes Logging in Kubernetes 1.24 und wie sie Ihre Logs verbessern können.
Die Working Group für strukturiertes Logging hat in Kubernetes 1.24 neue Funktionen zur Protokollierungsinfrastruktur hinzugefügt. In diesem Artikel erfahren Sie, wie Entwickler diese nutzen können, um die Protokollausgaben nützlicher zu gestalten, und wie sie sich aktiv an der Verbesserung von Kubernetes beteiligen können.
Strukturiertes Logging
Das Ziel des strukturierten Loggings besteht darin, die C-artige Formatierung und die daraus resultierenden undurchsichtigen Log-Strings durch Protokolleinträge zu ersetzen, die eine klar definierte Syntax für die separate Speicherung von Nachrichten und Parametern haben, zum Beispiel als JSON-Struktur.
Bei der Verwendung des traditionellen klog-Textausgabeformats für strukturierte Log-Aufrufe wurden Strings ursprünglich mit \n
Escape-Sequenzen ausgegeben, es sei denn, sie waren in einer Struktur eingebettet. Für Strukturen konnten Protokolleinträge weiterhin mehrere Zeilen umfassen, mit keiner sauberen Möglichkeit, den Log-Stream in einzelne Einträge zu unterteilen:
I1112 14:06:35.783529 328441 structured_logging.go:51] “using InfoS” longData={Name:long Data:Multiple
lines
with quite a bit
of text. internal:0}
I1112 14:06:35.783549 328441 structured_logging.go:52] “using InfoS with\nthe message across multiple lines” int=1 stringData=“long: Multiple\nlines\nwith quite a bit\nof text.” str=“another value”
Jetzt werden die <
und >
Marker zusammen mit der Einrückung verwendet, um sicherzustellen, dass das Splitting an einem klog-Header am Anfang einer Zeile zuverlässig ist und die resultierende Ausgabe menschenlesbar ist:
I1126 10:31:50.378204 121736 structured_logging.go:59] “using InfoS” longData=<
{Name:long Data:Multiple
lines
with quite a bit
of text. internal:0}
I1126 10:31:50.378228 121736 structured_logging.go:60] “using InfoS with\nthe message across multiple lines” int=1 stringData=<
long: Multiple
lines
with quite a bit
of text.
str=“another value”
Beachten Sie, dass die Log-Nachricht selbst mit Anführungszeichen ausgegeben wird. Sie soll eine feste Zeichenkette sein, die einen Protokolleintrag identifiziert, daher sollten dort Zeilenumbrüche vermieden werden.
Vor Kubernetes 1.24 verwendeten einige Log-Aufrufe im kube-scheduler weiterhin klog.Info
für mehrzeilige Strings, um die unleserliche Ausgabe zu vermeiden. Nun wurden alle Log-Aufrufe aktualisiert, um strukturiertes Logging zu unterstützen.
Die neuen Funktionen des strukturierten Loggings in Kubernetes 1.24 bieten Entwicklern und DevOps-Teams die Möglichkeit, die Qualität ihrer Protokolle erheblich zu verbessern. Nutzen Sie diese Änderungen, um Ihre Anwendungen besser zu überwachen und Probleme schneller zu identifizieren. ayedo unterstützt Sie gerne als Partner bei der Implementierung von Kubernetes-Lösungen!
Quelle: Kubernetes Blog