前言
为简化日志接入门槛,咱们提供了极简模式的日志解析方式(如[开启日志采集之旅]()中的介绍)。为了更好的对日志进行分析,咱们还提供了其余解析方式,例如:分隔符模式、完整正则模式、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规则,具体请参考配置时间格式
本文做者:元乙
阅读原文本文为云栖社区原创内容,未经容许不得转载。