前言
爲簡化日誌接入門檻,咱們提供了極簡模式的日誌解析方式(如[開啓日誌採集之旅]()中的介紹)。爲了更好的對日誌進行分析,咱們還提供了其餘解析方式,例如:分隔符模式、完整正則模式、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
解析方式
Logtail會不按期增長新的解析方式,具體可參考文本日誌採集。工具
正則解析配置流程以下文所示,下面咱們將以解析/log/error.log爲示例來向你們介紹如何使用正則方式解析日誌。spa
建立正則模式採集配置調試
自動配置日誌
手動配置
自動生成正則的配置方式較爲簡單,但有可能存在如下狀況:code
所以某些狀況下您還須要手動去提取正則。Logtail支持的是PCRE方式的正則表達式,建議您使用一些正則表達式工具進行編寫和調試,例如regextester, regex101等
手動配置正則模式主要分爲下述三個過程
配置行首正則
對於Java應用中的程序日誌,一條日誌一般會跨越多行,所以只能經過日誌開頭的特徵區分每條日誌行首。這裏咱們的示例是一個典型的Java錯誤堆棧日誌,所以須要配置行首正則表達式。
注意:行首正則表達式須要完整匹配一行,所以通常在表達式最後加上.*
解析字段
經過行首正則可以從原始文件中將日誌一條條切分出來,接下來須要將切分後的整條日誌再次分解成key&value對。
加粗文字
提取時間
每條日誌在服務日誌都必須包括該日誌發生的時間戳信息。Logtail默認會將採集時間做爲日誌時間。若是您的日誌中有時間信息,建議配置時間提取規則,將日誌時間映射爲日誌服務中的日誌時間戳。
Logtail時間解析使用的是UNIX的strftime規則,具體請參考配置時間格式
本文做者:元乙
閱讀原文本文爲雲棲社區原創內容,未經容許不得轉載。