博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Logtail从入门到精通(四):正则表达式Java日志采集实战
阅读量:5835 次
发布时间:2019-06-18

本文共 2262 字,大约阅读时间需要 7 分钟。

前言

为简化日志接入门槛,我们提供了极简模式的日志解析方式(如[开启日志采集之旅]()中的介绍)。为了更好的对日志进行分析,我们还提供了其他解析方式,例如:分隔符模式、完整正则模式、JSON模式等。本文将为大家介绍如何使用完整正则解析模式。

日志解析介绍

日志采集最终目的还是为了分析,通常分析都要基于结构化或半结构化的数据,因此日志解析是整个日志解决方案中非常重要的一个部分。解析可以理解为从无结构化到半结构化的过程,即将文件中一行或多行文本变为一个个key&value对。

示例

例如对以下日志/log/error.log:

[2018-05-11T20:10:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] 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

可以解析成

time : 2018-05-11T20:10:16,000level : INFOmethod : SessionTrackerfile : SessionTrackerImplline : 148message : 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 writeschema on read

  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为示例来向大家介绍如何使用正则方式解析日志。

image.png

创建正则模式采集配置

  1. 在Logstore列表页面中,点击待存储logstore的数据接入向导图标。
  2. 选择自建软件中的文本文件
  3. 在跳转的采集配置页面中选择完整正则模式

image.png

image.png

image.png

正则解析配置

自动配置

为尽可能减轻您的配置负担,我们提供了自动生成的配置方式,您可以使用鼠标点击、拖拽即可完成采集配置。具体配置请参考以下视频:

手动配置

自动生成正则的配置方式较为简单,但有可能存在以下情况:

  1. 生成的正则并不一定能完全匹配您的日志模式
  2. 某些复杂的日志样例无法自动提取出可用模式
  3. 自动生成的正则匹配效率无法达到最优

因此某些情况下您还需要手动去提取正则。Logtail支持的是PCRE方式的正则表达式,建议您使用一些正则表达式工具进行编写和调试,例如, 等

手动配置正则模式主要分为下述三个过程

配置行首正则

对于Java应用中的程序日志,一条日志通常会跨越多行,因此只能通过日志开头的特征区分每条日志行首。这里我们的示例是一个典型的Java错误堆栈日志,因此需要配置行首正则表达式。

  • 注意:行首正则表达式需要完整匹配一行,因此一般在表达式最后加上.*

image.png

解析字段

通过行首正则能够从原始文件中将日志一条条切分出来,接下来需要将切分后的整条日志再次分解成key&value对。

  • 注意:需要提取的字段用()包裹;key不要填在正则中,直接在控制台输入

image.png

提取时间

每条日志在服务日志都必须包括该日志发生的时间戳信息。Logtail默认会将采集时间作为日志时间。如果您的日志中有时间信息,建议配置时间提取规则,将日志时间映射为日志服务中的日志时间戳。

Logtail时间解析使用的是UNIX的规则,具体请参考

  • 注意:时间默认从日志key中的time字段提取

image.png

数据采集效果

image.png

相关文档和参考

转载地址:http://xiycx.baihongyu.com/

你可能感兴趣的文章
MyBatis使用DEMO及cache的使用心得
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
李娜入选国际网球名人堂 成亚洲第一人
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>
jsp改造之sitemesh注意事项
查看>>
SpringBoot-Shiro使用
查看>>
iOS 9.0之后NSString encode方法替换
查看>>
解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
查看>>
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
查看>>
CRM Transaction处理中的权限控制
查看>>
[转]linux创建链接文件的两种方法
查看>>
python ipaddress模块使用
查看>>
文件权限
查看>>