全部產品
Search
文件中心

Simple Log Service:如何採集多種格式的日誌

更新時間:Sep 20, 2024

採集日誌時要求日誌採用統一的格式,但有時日誌中可能會包含多種格式,您可以採用Schema-On-WriteSchema-On-Read兩種模式處理。

背景資訊

以Java日誌為例,作為一個程式日誌,它一般既包含正常資訊,也會包含異常棧等錯誤資訊。

  • WARNING類型的多行日誌

  • INFO類型的簡單文本日誌

  • DEBUG類型的索引值日誌

[2018-10-01T10:30:31,000] [WARNING] java.lang.Exception: another exception happened
    at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
    at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
    at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
[2018-10-01T10:30:32,000] [INFO] info something
[2018-10-01T10:30:33,000] [DEBUG] key:value key2:value2

解決方案

  • Schema-On-Write

    • 使用情境:預Crowdsourced Security Testing道日誌格式,在採集日誌時完成格式化。

    • 說明:為同一份日誌應用多個Logtail配置,每個Logtail配置具有不同的正則配置,從而能夠正確地實現欄位提取。預設情況下,一個檔案只能匹配一個Logtail配置,如果需要為同一份日誌應用多個Logtail配置,請參見如何?檔案中的日誌被採集多份

  • Schema-On-Read

    • 使用情境:同時分析的日誌數量較小(例如千萬級),日誌格式多變,在查詢和分析日誌時完成格式化。

    • 說明:使用它們共同的Regex來採集。

      1. 例如採用多行日誌採集,將時間和日誌等級作為行首正則,剩餘部分為message。例如提取[2018-10-01T10:30:32,000] [INFO]作為行首正則,message為info something

      2. 如果希望進一步分析message,可以為該欄位建立索引,然後利用Log Service的正則提取函數從message欄位提取需要的內容。