自訂 1.6.x 記載代理程式,以支援 Node.js 應用程式在非協調環境中使用 Winston 的自訂多行解析功能

本教學示範如何使用自訂的 Winston 日誌函式庫,為 Node.js 應用程式設定 IBM® Cloud Logs 記載代理程式 多行日誌處理。 此設定適用於非協調環境,例如 Linux 和 Windows,並會修改設定檔。 此設定可確保堆疊追蹤和多行日誌在 IBM Cloud Logs 中正確歸類。

本教學需要 IBM Cloud Logs 記載代理程式 1.6.2 或更新版本。

開始之前

在開始使用本教學之前,請檢閱下列資訊,以瞭解 記載代理程式 和多行概念。

本教學也假設您有:

  • 已配置的 IBM Cloud Logs 實例。

  • 記載代理程式 部署在非協調環境中。

本教學中的設定檔可以在您安裝 記載代理程式 時下載套件檔案的地方找到。

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 範例,並確認您的多行項目(例如堆疊追蹤)已正確分組。

  1. 存取您的 IBM Cloud Logs 實例。

  2. 使用日誌 探索日誌圖示 檢視,驗證您的多行項目是否已正確分組。

    分組的記錄資料包含在 log 欄位中。