Logtail從入門到精通(四):正則表達式Java日誌採集實戰

前言
爲簡化日誌接入門檻,咱們提供了極簡模式的日誌解析方式(如[開啓日誌採集之旅]()中的介紹)。爲了更好的對日誌進行分析,咱們還提供了其餘解析方式,例如:分隔符模式、完整正則模式、JSON模式等。本文將爲你們介紹如何使用完整正則解析模式。java

日誌解析介紹

日誌採集最終目的仍是爲了分析,一般分析都要基於結構化或半結構化的數據,所以日誌解析是整個日誌解決方案中很是重要的一個部分。解析能夠理解爲從無結構化到半結構化的過程,即將文件中一行或多行文本變爲一個個key&value對。正則表達式

示例
例如對如下日誌/log/error.log:spring

[2018-05-11T20:10:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiring sessions
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x8F",...' for column 'data' at row 1
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLException

能夠解析成sql

time : 2018-05-11T20:10:16,000
level : INFO
method : SessionTracker
file : SessionTrackerImpl
line : 148
message : Expiring sessions
            java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x8F",...' for column 'data' at row 1
            at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
            at org.springframework.jdbc.support.AbstractFallbackSQLException

解析所處階段

對於不一樣的產品,日誌解析在整個鏈路中所處的位置會有必定的區別,通常分爲兩類:schema on write 和 schema on read:session

  1. schema on write 是在進入存儲系統前就已經將數據半結構化完畢。例如ES、GrayLog、MaxCompute等
  2. schema on read 在寫入時並不進行解析,只存儲原始數據,當讀取時再進行解析。例如Splunk、Sumologic
    關於schema on write 仍是 schema on read 的比較這裏就再也不展開,目前日誌服務是採用的schema on
    write形式,Logtail在寫入前會將原始日誌解析成Key&Value對。

解析方式
Logtail會不按期增長新的解析方式,具體可參考文本日誌採集。工具

正則解析配置

正則解析配置流程以下文所示,下面咱們將以解析/log/error.log爲示例來向你們介紹如何使用正則方式解析日誌。spa

clipboard.png

建立正則模式採集配置調試

  1. 在Logstore列表頁面中,點擊待存儲logstore的數據接入嚮導圖標。
  2. 選擇自建軟件中的文本文件。
  3. 在跳轉的採集配置頁面中選擇完整正則模式。

clipboard.png

clipboard.png

clipboard.png

正則解析配置

自動配置日誌

手動配置
自動生成正則的配置方式較爲簡單,但有可能存在如下狀況:code

  1. 生成的正則並不必定能徹底匹配您的日誌模式
  2. 某些複雜的日誌樣例沒法自動提取出可用模式
  3. 自動生成的正則匹配效率沒法達到最優

所以某些狀況下您還須要手動去提取正則。Logtail支持的是PCRE方式的正則表達式,建議您使用一些正則表達式工具進行編寫和調試,例如regextester, regex101等

手動配置正則模式主要分爲下述三個過程

配置行首正則
對於Java應用中的程序日誌,一條日誌一般會跨越多行,所以只能經過日誌開頭的特徵區分每條日誌行首。這裏咱們的示例是一個典型的Java錯誤堆棧日誌,所以須要配置行首正則表達式。

注意:行首正則表達式須要完整匹配一行,所以通常在表達式最後加上.*

clipboard.png

解析字段
經過行首正則可以從原始文件中將日誌一條條切分出來,接下來須要將切分後的整條日誌再次分解成key&value對。

  • 注意:須要提取的字段用()包裹;key不要填在正則中,直接在控制檯輸入

加粗文字clipboard.png

提取時間
每條日誌在服務日誌都必須包括該日誌發生的時間戳信息。Logtail默認會將採集時間做爲日誌時間。若是您的日誌中有時間信息,建議配置時間提取規則,將日誌時間映射爲日誌服務中的日誌時間戳。

Logtail時間解析使用的是UNIX的strftime規則,具體請參考配置時間格式

  • 注意:時間默認從日誌key中的time字段提取

clipboard.png

  • 數據採集效果

clipboard.png

本文做者:元乙
閱讀原文本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索