自訂 1.6.x 記載代理程式,以支援 Node.js 應用程式在非協調環境中使用 Winston 的自訂多行解析功能
本教學示範如何使用自訂的 Winston 日誌函式庫,為 Node.js 應用程式設定 IBM® Cloud Logs 記載代理程式 多行日誌處理。 此設定適用於非協調環境,例如 Linux 和 Windows,並會修改設定檔。 此設定可確保堆疊追蹤和多行日誌在 IBM Cloud Logs 中正確歸類。
本教學需要 IBM Cloud Logs 記載代理程式 1.6.2 或更新版本。
開始之前
在開始使用本教學之前,請檢閱下列資訊,以瞭解 記載代理程式 和多行概念。
本教學也假設您有:
本教學中的設定檔可以在您安裝 記載代理程式 時下載套件檔案的地方找到。
Winston 組態範例
假設您的 Node.js 應用程式使用 Winston,並以下列格式記錄到主控台:
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()
]
});
此格式產生的日誌項目以時間戳記和層級開頭,多行日誌 (例如錯誤堆疊追蹤) 則在後續行中跟隨,不含時間戳記。
Winston 通常會將所有輸出 (包括錯誤堆疊追蹤) 記錄為單一字串,因此通常不需要多行解析器。 不過,這個範例展示了如果您的格式化器列印多行日誌時該怎麼做,也有助於說明如何處理任何自訂格式的多行解析。
提供此設定作為範例,說明使用自訂記錄格式時,如何處理多行記錄。 如果您的應用程式使用不同的結構或記錄函式庫,請以此作為參考,據此建立您自己的多行解析器。
使用設定檔手動設定多行解析
為了適當地將日誌分組,請定義一個多行解析器,該解析器可識別新日誌項開頭的時間戳記,並將後續行視為前一個項目的延續。
定義多行解析器
在 parsers.conf 檔案中加入下列內容:
[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}\\] ).*$/"
此解析器假設日誌以時間戳開始,例如 [Wed Jul 24 2025 14:52:31.456] ...。 堆疊追蹤會縮排在後面的行中,且不符合時間戳記重整字串,因此會與前一個記錄行分組。
使用多行篩選器套用解析器
在 filters.conf 檔案中加入過濾區塊,以使用解析器:
[FILTER]
Name multiline
Match kube.*
Multiline.key_content log
Multiline.parser multiline-nodejs-winston
重新啟動代理程式
更新配置映射後,重新啟動代理程式。
-
Linux 對於 環境,請執行:Linux
systemctl daemon-reload && systemctl restart fluent-bit -
Windows 對於 Windows 環境,執行:
sc.exe stop fluent-bit && sc.exe start fluent-bit
驗證您的多行日誌
存取您的 IBM Cloud Logs 範例,並確認您的多行項目(例如堆疊追蹤)已正確分組。
-
使用日誌
檢視,驗證您的多行項目是否已正確分組。
分組的記錄資料包含在
log欄位中。