Logtail从入门到精通(四):正则表达式Java日志采集实战
摘要:?為簡(jiǎn)化日志接入門檻,我們提供了極簡(jiǎn)模式的日志解析方式(如[開(kāi)啟日志采集之旅]()中的介紹)。為了更好的對(duì)日志進(jìn)行分析,我們還提供了其他解析方式,例如:分隔符模式、完整正則模式、JSON模式等。本文將為大家介紹如何使用完整正則解析模式。
前言
為簡(jiǎn)化日志接入門檻,我們提供了極簡(jiǎn)模式的日志解析方式(如[開(kāi)啟日志采集之旅]()中的介紹)。為了更好的對(duì)日志進(jìn)行分析,我們還提供了其他解析方式,例如:分隔符模式、完整正則模式、JSON模式等。本文將為大家介紹如何使用完整正則解析模式。
日志解析介紹
日志采集最終目的還是為了分析,通常分析都要基于結(jié)構(gòu)化或半結(jié)構(gòu)化的數(shù)據(jù),因此日志解析是整個(gè)日志解決方案中非常重要的一個(gè)部分。解析可以理解為從無(wú)結(jié)構(gòu)化到半結(jié)構(gòu)化的過(guò)程,即將文件中一行或多行文本變?yōu)橐粋€(gè)個(gè)key&value對(duì)。
示例
例如對(duì)以下日志/log/error.log:
[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可以解析成
time : 2018-05-11T20:10:16,000 level : INFO method : SessionTracker file : SessionTrackerImpl line : 148 message : Expiring sessionsjava.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x8F",...' for column 'data' at row 1at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)at org.springframework.jdbc.support.AbstractFallbackSQLException解析所處階段
對(duì)于不同的產(chǎn)品,日志解析在整個(gè)鏈路中所處的位置會(huì)有一定的區(qū)別,一般分為兩類:schema on write?和?schema on read:
關(guān)于schema on write?還是?schema on read?的比較這里就不再展開(kāi),目前日志服務(wù)是采用的schema on write形式,Logtail在寫入前會(huì)將原始日志解析成Key&Value對(duì)。
解析方式
Logtail會(huì)不定期增加新的解析方式,具體可參考文本日志采集。
正則解析配置
正則解析配置流程如下文所示,下面我們將以解析/log/error.log為示例來(lái)向大家介紹如何使用正則方式解析日志。
創(chuàng)建正則模式采集配置
正則解析配置
自動(dòng)配置
為盡可能減輕您的配置負(fù)擔(dān),我們提供了自動(dòng)生成的配置方式,您可以使用鼠標(biāo)點(diǎn)擊、拖拽即可完成采集配置。具體配置請(qǐng)參考以下視頻(地址:http://cloud.video.taobao.com//play/u/3220778205/p/1/e/6/t/1/50132666711.mp4):
手動(dòng)配置
自動(dòng)生成正則的配置方式較為簡(jiǎn)單,但有可能存在以下情況:
因此某些情況下您還需要手動(dòng)去提取正則。Logtail支持的是PCRE方式的正則表達(dá)式,建議您使用一些正則表達(dá)式工具進(jìn)行編寫和調(diào)試,例如regextester,?regex101等
手動(dòng)配置正則模式主要分為下述三個(gè)過(guò)程
配置行首正則
對(duì)于Java應(yīng)用中的程序日志,一條日志通常會(huì)跨越多行,因此只能通過(guò)日志開(kāi)頭的特征區(qū)分每條日志行首。這里我們的示例是一個(gè)典型的Java錯(cuò)誤堆棧日志,因此需要配置行首正則表達(dá)式。
- 注意:行首正則表達(dá)式需要完整匹配一行,因此一般在表達(dá)式最后加上.*
解析字段
通過(guò)行首正則能夠從原始文件中將日志一條條切分出來(lái),接下來(lái)需要將切分后的整條日志再次分解成key&value對(duì)。
- 注意:需要提取的字段用()包裹;key不要填在正則中,直接在控制臺(tái)輸入
提取時(shí)間
每條日志在服務(wù)日志都必須包括該日志發(fā)生的時(shí)間戳信息。Logtail默認(rèn)會(huì)將采集時(shí)間作為日志時(shí)間。如果您的日志中有時(shí)間信息,建議配置時(shí)間提取規(guī)則,將日志時(shí)間映射為日志服務(wù)中的日志時(shí)間戳。
Logtail時(shí)間解析使用的是UNIX的strftime規(guī)則,具體請(qǐng)參考配置時(shí)間格式
- 注意:時(shí)間默認(rèn)從日志key中的time字段提取
數(shù)據(jù)采集效果
相關(guān)文檔和參考
正則表達(dá)式采集配置
配置時(shí)間格式
索引與查詢簡(jiǎn)介
schema-on-read-vs-schema-on-write-1
schema-on-read-vs-schema-on-write-2
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的Logtail从入门到精通(四):正则表达式Java日志采集实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AliOS Things SIG BLE
- 下一篇: Java小白进阶笔记(2)-变量和数据类