Unterstützung von mehrzeiligen Protokollen für die Protokollierungsagent in orchestrierten Umgebungen
Fehler und Stack Traces können sich über mehrere Zeilen erstrecken, wobei jede Zeile als separater Protokolleintrag gesendet wird. Um die Aufnahme von mehrzeiligen Protokollen durch IBM® Cloud Logs aus Anwendungen wie Java oder Python zu unterstützen, die in orchestrierten Umgebungen wie Red Hat OpenShift on IBM Cloud oder IBM Cloud Kubernetes Service laufen, müssen Sie Änderungen an der Konfiguration von Protokollierungsagent vornehmen. Zu den Änderungen gehört das Parsing, das erforderlich ist, um Protokollzeilen zu gruppieren, die als ein einziger Protokolleintrag zusammengefasst werden sollen.
Über Multiline
In den Clustern OpenShift und Kubernetes erfasst das Protokollierungssystem die Protokolle der Anwendungsströme stdout und stderr. Anschließend wird jeder Protokollzeile ein Präfix mit Metadaten vorangestellt, bevor
die Protokolle in Dateien gespeichert werden, die dem Container Runtime Interface (CRI) Protokollierungsformat entsprechen.
Dieses Kubernetes Log-Zeilenpräfix enthält:
- Zeitstempel: Im Format ISO 8601.
- Streamname:
stdoutoderstderr. - Tag:
FoderP.
Das CRI-Protokollierungsformat verwendet Tags, um zu definieren, ob eine Protokollzeile eine einzelne Zeile oder ein mehrzeiliger Protokolleintrag ist. Gültige Werte für das Tag sind:
- Teilweise (
P): Dieses Tag ist in Protokollzeilen enthalten, die das Ergebnis der Aufteilung einer einzelnen Protokollzeile in mehrere Zeilen durch die Laufzeit sind und der Protokolleintrag noch nicht beendet ist. - Vollständig (
F): Dieses Tag wird verwendet, um anzuzeigen, dass der Protokolleintrag abgeschlossen ist. Es wird für eine einzelne Protokollzeile verwendet oder um anzuzeigen, dass es sich um die letzte Zeile eines mehrzeiligen Eintrags handelt.
2024-03-15T10:30:45.123456789Z stdout F This is a complete log line
2024-03-15T10:30:45.123456789Z stderr P This is the first part of a
2024-03-15T10:30:45.123456789Z stderr F multiline error message
Standardmäßig enthält Protokollierungsagent die Konfiguration von Tail plugin mit dem mehrzeiligen Parser cri, um die Verkettung dieser CRI-formatierten Protokolle von stdout und stderr in
einer einzigen Protokollzeile zu unterstützen.
Es wird empfohlen, in Kubernetes-Umgebungen, die CRI-basierte Protokollierung verwenden, die Einstellung Multiline.Parser (standardmäßig auf cri eingestellt) zu verwenden, um von den Containern erzeugte mehrzeilige
Protokolle korrekt zu analysieren und wieder zusammenzusetzen.
Möglicherweise haben Sie auch Anwendungen wie Java oder Python, bei denen sich Fehler und Stack Traces über mehrere Zeilen erstrecken können, wobei jede Zeile als separater Protokolleintrag gesendet wird. Diese Anwendungen können mehrere Protokollzeilen
erzeugen, die miteinander zu einer einzigen Protokollzeile verbunden werden können. Um diese mehrzeiligen Protokolle über die Protokollierungsagent zu verarbeiten, müssen Sie eine zusätzliche Multiline parser konfigurieren.
Standardmäßige mehrzeilige Konfiguration
Die standardmäßige mehrzeilige Konfiguration für CRI-Protokolle wird konfiguriert und aktiviert, wenn Sie die Protokollierungsagent bereitstellen.
In Fluent Bit können Sie Multiline parser konfigurieren, indem Sie den eingebauten mehrzeiligen Parser oder einen eigenen mehrzeiligen Parser verwenden.
Standardmäßig wird Tail plugin, das mit Protokollierungsagent konfiguriert ist, mit dem eingebauten mehrzeiligen Parser cri konfiguriert. Dieser Parser verarbeitet Protokolle, die von der CRI-O Container-Engine erzeugt
werden, und unterstützt die Verkettung von Protokolleinträgen.
Die Protokollierungsagent hat zum Beispiel diese Standardkonfiguration für die Unterstützung von Mehrzeilern:
[INPUT]
Name tail
Tag kube.*
.....
Buffer_Chunk_Size 32KB
Buffer_Max_Size 256KB
Multiline.parser cri
Skip_Long_Lines On
Refresh_Interval 10
storage.type filesystem
storage.pause_on_chunks_overlimit on
Konfigurieren zusätzlicher mehrzeiliger Unterstützung für Anwendungen
Wenn Sie Anwendungen wie Java oder Python haben, bei denen sich Fehler und Stack Traces über mehrere Zeilen erstrecken können und jede Zeile als separater Protokolleintrag gesendet wird, müssen Sie den Multiline Parser in Protokollierungsagent konfigurieren.
Wählen Sie eine der folgenden Optionen, um Protokollierungsagent mit dem Multiline-Parser zu konfigurieren:
-
Stellen Sie Protokollierungsagent bereit, indem Sie einen neuen Wert
enableMultilinein der Dateilogs-values.yamlhinzufügen, die Sie für die Bereitstellung des Agenten mit Hilfe eines Diagramms Helm verwenden. Weitere Informationen finden Sie unter Konfigurieren der Helm-Diagrammwertedatei für Protokollierungsagent oder Konfigurieren der Helm-Diagrammwertedatei für Protokollierungsagent. -
Aktualisieren Sie die Protokollierungsagent auf die Version 1.4.1 oder höher. Sie müssen die Datei Helm chart
logs-values.yamlmit der Agentenversion aktualisieren undenableMultilineauftruesetzen, um die Mehrzeilenunterstützung zu aktivieren. Weitere Informationen finden Sie unter Aktualisieren der Helm Diagrammwertedatei für den Logging Agent.
Hinzufügen eines benutzerdefinierten mehrzeiligen Parsers
Um einen benutzerdefinierten mehrzeiligen Parser für die Verwendung mit Protokollierungsagent zu erstellen, folgen Sie den Anweisungen in Konfigurierbare mehrzeilige Parser. Sie werden eine benutzerdefinierte Regex definieren, um das mehrzeilige Muster zu bestimmen.
Die Konfiguration von Protokollierungsagent muss auch ein FILTER nach dem Plug-in INPUT enthalten. Der Filter wird das Muster des konfigurierten MULTILINE_PARSER anwenden. Der Wert Name der
MULTILINE_PARSER muss mit dem Wert Multiline.parser in der FILTER übereinstimmen.
filter-multiline.conf: |
[FILTER]
Name multiline
Match *
Multiline.parser INSERT_CUSTOM_PARSER_NAME
Multiline.key_content log
Hinzufügen von mehrzeiliger Unterstützung für Anwendungen
Wenn Sie Protokollierungsagent einsetzen und Anwendungen wie Java oder Python verwenden, bei denen sich Fehler und Stack Traces über mehrere Zeilen erstrecken können und jede Zeile als separater Protokolleintrag gesendet wird, können Sie Ihre Agentenkonfiguration aktualisieren und den Multiline-Parser konfigurieren.
Führen Sie die folgenden Schritte aus, um die Mehrzeilenunterstützung in Protokollierungsagent hinzuzufügen:
-
Melden Sie sich am Cluster an. Weitere Informationen finden Sie unter Zugriff auf Ihren Cluster.
-
Fügen Sie in der Protokollierungsagent config map (
inputs.conf) den Multiline Parser hinzu.In der Konfiguration von Protokollierungsagent muss
@INCLUDEfür den Multiline-Filter direkt hinter dem Eingangs-Plug-in stehen.fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf Plugins_File plugins.conf ... @INCLUDE input-kubernetes.conf @INCLUDE filter-multiline.conf ... input-kubernetes.conf: | [INPUT] Name tail Tag kube.* ..... Buffer_Chunk_Size 32KB Buffer_Max_Size 256KB Multiline.parser cri Skip_Long_Lines On Refresh_Interval 10 storage.type filesystem storage.pause_on_chunks_overlimit on filter-multiline.conf: | [FILTER] Name multiline Match * Multiline.parser multiline-java-example Multiline.key_content log parsers.conf: | ... [MULTILINE_PARSER] Name multiline-java-example Type regex Flush_timeout 500 Rule "start_state" "/^(\d+-\d+-\d+ \d+:\d+:\d+\.\d+)(.*)$/" "cont" Rule "cont" "/^(?!\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}).*$/" "cont" ... -
Starten Sie die Agent-Pods neu.
Bei Kubernetes Clustern führen Sie aus:
kubectl -n ibm-observe rollout restart ds/logs-agentBei OpenShift Clustern führen Sie aus:
oc -n ibm-observe rollout restart ds/logs-agent
Konfigurieren der Mehrzeilenunterstützung für Cluster mit mehreren Laufzeiten und Parsing-Anforderungen
Wenn Sie Cluster haben, in denen Anwendungen mit mehreren verschiedenen Sprachen oder Laufzeiten laufen (z. B. Java, Go und Python ), müssen Sie möglicherweise mehrzeilige Protokolle aus verschiedenen Quellen verarbeiten. Wenn Sie bereits einen benutzerdefinierten mehrzeiligen Parser für Java haben, können Sie ihn mit eingebauten Parsern für andere Laufzeiten wie Go und Python kombinieren. Dadurch wird sichergestellt, dass alle Protokolle korrekt geparst und als korrekt gruppierte Einträge an IBM® Cloud Logs weitergeleitet werden.
Wenn Sie mehrere Parser (integrierte und benutzerdefinierte) in einer durch Komma getrennten Liste angeben, versucht Protokollierungsagent jeden Parser nacheinander, bis eine Übereinstimmung gefunden wird.
Konfiguration von mehreren Parsern mit Helm
Wenn Sie Helm verwenden, um Ihre orchestrierte Umgebung zu konfigurieren, aktualisieren Sie den Abschnitt multilinePreprocessor, um sowohl auf integrierte Parser (z. B. go, python) als auch auf Ihre benutzerdefinierten
Parser in einer kommagetrennten Liste zu verweisen.
Zum Beispiel:
multilinePreprocessor:
- name: multiline
multiline.parser: go, python, nodejs, ruby, multiline-java-example, multiline-nodejs-winston
multiline.key_content: log
Wenn Sie eine frühere Version von Protokollierungsagent installiert haben und die Agentenkonfiguration durch Änderung der config map direkt im Cluster aktualisiert haben, erstellen Sie eine Kopie Ihrer config map aus dem Cluster, bevor Sie
den Befehl helm upgrade ausführen. Wenn die Protokollierungsagent aktualisiert wird, werden alle an der Config Map vorgenommenen Änderungen überschrieben.
Nachdem Sie die Datei values.yaml aktualisiert haben, führen Sie helm upgrade aus, um die Änderungen zu übernehmen. Überprüfen Sie Ihre Konfiguration, indem Sie die Protokolle verschiedener Laufzeiten in IBM Cloud
Logs überprüfen, um sicherzustellen, dass die mehrzeilige Gruppierung in allen Konfigurationen funktioniert.
Weitere Informationen und Beispiele
Weitere Informationen und Tutorials mit Beispielszenarien zur Konfiguration der Mehrzeilenverarbeitung finden Sie in den folgenden Themen.
| Weitere Informationen zu | Siehe |
|---|---|
| Konfigurieren der mehrzeiligen Unterstützung für die Protokollierungsagent in Linux | Thema |
| Konfigurieren der mehrzeiligen Unterstützung für Protokollierungsagent in Windows | Thema |
| Mehrzeiliges Parsing für Java Anwendungen mit Log4j | Lernprogramm |
| Mehrzeiliges Parsing mit Helm für Java Anwendungen mit Log4j | Lernprogramm |
| Mehrzeiliges Parsing für Node.js Anwendungen mit Winston | Lernprogramm |
| Mehrzeiliges Parsing mit Helm für Node.js Anwendungen mit Winston | Lernprogramm |