当前位置: 首页 > Web前端 > HTML

Logtail从入门到精通(四):正则表达式Java日志采集实践

时间:2023-04-02 16:19:49 HTML

前言为了简化日志访问门槛,我们提供了一种极简模式的日志分析方法(如【开启日志采集之旅】()在介绍)。为了更好的分析日志,我们还提供了其他的解析方式,例如:定界符模式、全正则模式、JSON模式等,本文将介绍如何使用全正则解析模式。日志解析简介日志采集的最终目的是为了分析,通常是基于结构化或半结构化数据,因此日志解析是整个日志解决方案中非常重要的一环。解析可以理解为从非结构化到半结构化的过程,即将文件中的一行或多行文本转换成键值对。以下日志/log/error.log的示例:[2018-05-11T20:10:16,000][INFO][SessionTracker][SessionTrackerImpl.java:148]Expiringsessionsjava.sql.SQLException:Incorrectstringvalue:'\xF0\x9F\x8E\x8F",...'用于org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)atorg.springframework.jdbc.support.AbstractFallbackSQLException中第1行的“数据”列被解析成功时间:2018-05-11T20:10:16,000level:INFOmethod:SessionTrackerfile:SessionTrackerImplline:148message:Expiringsessionsjava.sql.SQLException:不正确的字符串值:'\xF0\x9F\x8E\x8F",...'forcolumn1atrow1atorg.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)atorg.springframework.jdbc.support.AbstractFallbackSQLException解析阶段对于不同的产品,日志解析在整个chain路径的位置会有一些区别,一般分为两类:schemaonwrite和schemaonread:schemaonwrite表示数据在进入存储系统之前已经进行了半结构化处理。比如ES、GrayLog、MaxCompute等schemaonread,写的时候不解析,只存储原始数据,读的时候再解析。比如Splunk和Sumologic在schemaonwrite或者schemaonread上的比较这里就不展开了。目前日志服务采用schemaonwrite形式,Logtail会在写入前将原始日志解析成Key&Value对。解析方式Logtail会不定期的添加新的解析方式。详见文本日志采集。正则解析配置正则解析配置流程如下图。下面我们以解析/log/error.log为例,介绍如何使用正则解析日志。创建常规模式采集配置在Logstore列表页面,单击需要存储的logstore的数据访问向导图标。在自建软件中选择文本文件。在跳转集合配置页面选择完整的正则模式。正则表达式解析配置,自动配置,手动配置,自动配置正则配置比较简单,但是可能有以下几种情况:生成的正则可能不完全匹配你的日志模式一些复杂的日志样本不能自动提取可用的模式匹配效率生成的正则表达式不是最优的,因此在某些情况下您需要手动提取正则表达式。Logtail支持PCRE方式的正则表达式。推荐大家使用一些正则表达式工具进行编写和调试,比如regextester、regex101等。手动配置正则表达式主要分为以下三个过程。对于程序日志,一条日志通常跨越多行,所以每行日志行的开头只能通过日志开头的特征来区分。我们这里的例子是一个典型的Java错误堆栈日志,所以需要配置行首的正则表达式。注意:行首的正则表达式需要完全匹配一行,所以一般在表达式的末尾加上.*解析字段,通过行首的正则表达式从原文件中逐条拆分日志该行,然后需要将整个日志拆分日志再次分解为键值对。注意:需要提取的字段用()包裹起来;regex中不要填写key,直接在console中输入粗体文字提取时间。服务日志中的每条日志都必须包含日志的时间戳信息。Logtail默认使用采集时间作为日志时间。如果您的日志有时间信息,建议配置时间提取规则,将日志时间映射到日志服务中的日志时间戳。Logtail时间分析使用UNIX的strftime规则。具体请参考配置时间格式注意:时间默认是从logkey中的time字段中提取的。资料收集效果本文作者:袁毅阅读原文。不得转载。