Anpassung von 1.6.x Protokollierungsagent zur Unterstützung von benutzerdefiniertem mehrzeiligem Parsing für Node.js Anwendungen, die Winston in nicht-orchestrierten Umgebungen verwenden
Dieses Tutorial zeigt, wie man die IBM® Cloud Logs Protokollierungsagent mehrzeilige Protokollierung für eine Node.js Anwendung mit der angepassten Winston Logging Library konfiguriert. Diese Konfiguration ist für nicht-orchestrierte Umgebungen gedacht, z. B. Linux und Windows, und ändert die Konfigurationsdatei. Diese Konfiguration stellt sicher, dass Stack Traces und mehrzeilige Logs in IBM Cloud Logs korrekt gruppiert werden.
Für dieses Tutorial ist die Website IBM Cloud Logs Protokollierungsagent 1.6.2 oder höher erforderlich.
Vorbereitende Schritte
Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie die folgenden Informationen lesen, um die Konzepte von Protokollierungsagent und Multiline zu verstehen.
-
Erfahren Sie mehr über die mehrzeilige Unterstützung in nicht-orchestrierten Umgebungen.
Diese Anleitung setzt außerdem voraus, dass Sie über die entsprechenden Kenntnisse verfügen:
-
Eine bereitgestellte und konfigurierte IBM Cloud Logs-Instanz.
-
Die Protokollierungsagent wurde in einer nicht-orchestrierten Umgebung eingesetzt.
Die Konfigurationsdateien in diesem Tutorial finden Sie dort, wo die Paketdateien bei der Installation von Protokollierungsagent heruntergeladen wurden.
Beispiel einer Winston-Konfiguration
Nehmen wir an, Ihre Anwendung Node.js verwendet Winston und protokolliert in folgendem Format auf der Konsole:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({
format: 'ddd MMM DD YYYY HH:mm:ss.SSS'
}),
winston.format.errors({ stack: true }),
winston.format.printf(({ timestamp, level, message, stack }) => {
const levelUpper = level.toUpperCase();
const baseLog = `[${timestamp}] ${levelUpper} [Main] - ${message}`;
if (stack) {
return `${baseLog}\n${stack}`;
}
return baseLog;
})
),
transports: [
new winston.transports.Console()
]
});
Dieses Format erzeugt Protokolleinträge, die mit einem Zeitstempel und einem Level beginnen, und mehrzeilige Protokolle, wie z. B. Fehler-Stacktraces, folgen in den nachfolgenden Zeilen ohne Zeitstempel.
Winston protokolliert in der Regel alle Ausgaben, einschließlich Fehler-Stacktraces, als eine einzige Zeichenkette, so dass ein mehrzeiliger Parser oft nicht erforderlich ist. Dieses Beispiel zeigt jedoch, was zu tun ist, wenn Ihr Formatierer mehrzeilige Protokolle ausgibt, und es hilft zu veranschaulichen, wie das mehrzeilige Parsing für jedes benutzerdefinierte Format anzugehen ist.
Diese Konfiguration dient als Beispiel, um zu zeigen, wie mehrzeilige Protokolle bei der Verwendung von benutzerdefinierten Protokollformatierungen behandelt werden können. Wenn Ihre Anwendung eine andere Struktur oder eine andere Protokollierungsbibliothek verwendet, verwenden Sie dies als Referenz, um Ihren eigenen mehrzeiligen Parser entsprechend zu erstellen.
Manuelle Konfiguration des mehrzeiligen Parsings mit Hilfe einer Konfigurationsdatei
Um Protokolle richtig zu gruppieren, definieren Sie einen mehrzeiligen Parser, der den Zeitstempel am Anfang neuer Protokolleinträge erkennt und nachfolgende Zeilen als Fortsetzungen der vorherigen Einträge behandelt.
Definieren Sie den mehrzeiligen Parser
Fügen Sie Folgendes zur Datei parsers.conf hinzu:
[MULTILINE_PARSER]
Name multiline-nodejs-winston
Type regex
Flush_timeout 500
Rule "start_state" "/^\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] .*$/"
Rule "cont" "/^(?!\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] ).*$/"
Dieser Parser geht davon aus, dass die Protokolle mit einem Zeitstempel wie [Wed Jul 24 2025 14:52:31.456] ... beginnen. Stack Traces sind in den folgenden Zeilen eingerückt und entsprechen nicht der Zeitstempel-Regex, so dass sie
mit der vorherigen Protokollzeile gruppiert werden.
Den Parser mit einem mehrzeiligen Filter anwenden
Fügen Sie einen Filterblock in die Datei filters.conf ein, um den Parser zu verwenden:
[FILTER]
Name multiline
Match kube.*
Multiline.key_content log
Multiline.parser multiline-nodejs-winston
Starten Sie den Agenten erneut.
Starten Sie den Agenten nach der Aktualisierung der Konfigurationskarte neu.
-
Linux Für Linux Umgebungen, führen Sie:
systemctl daemon-reload && systemctl restart fluent-bit -
Windows Für Windows-Umgebungen, führen Sie:
sc.exe stop fluent-bit && sc.exe start fluent-bit
Überprüfen Sie Ihre mehrzeiligen Protokolle
Rufen Sie Ihre Instanz IBM Cloud Logs auf und überprüfen Sie, ob Ihre mehrzeiligen Einträge (z. B. Stack Traces) korrekt gruppiert sind.
-
Verwenden des Symbols „ Protokolle
die Protokollansicht und überprüfen Sie, ob Ihre mehrzeiligen Einträge richtig gruppiert sind.
Die gruppierten Protokolldaten werden in das Feld
logaufgenommen.