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

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

前言

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

日志解析介绍

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

示例

例如对以下日志/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

解析所处阶段

对于不同的产品,日志解析在整个链路中所处的位置会有一定的区别,一般分为两类:schema on write 和 schema 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为示例来向大家介绍如何使用正则方式解析日志。


创建正则模式采集配置

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




正则解析配置

自动配置

为尽可能减轻您的配置负担,我们提供了自动生成的配置方式,您可以使用鼠标点击、拖拽即可完成采集配置。具体配置请参考以下视频(地址:http://cloud.video.taobao.com//play/u/3220778205/p/1/e/6/t/1/50132666711.mp4):

手动配置

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

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

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

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

配置行首正则

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

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


解析字段

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

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


提取时间

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

Logtail时间解析使用的是UNIX的strftime规则,具体请参考配置时间格式

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


数据采集效果


相关文档和参考

正则表达式采集配置

配置时间格式

索引与查询简介

schema-on-read-vs-schema-on-write-1

schema-on-read-vs-schema-on-write-2

原文链接

本文为云栖社区原创内容,未经允许不得转载。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

延时跳转php代码,PHP JS HTML ASP页面跳转代码 延时跳转代码

1.PHP延时跳转代码//跳转到浏览界面header("Refresh:1;urlmachine_list.php");//不延时header("location: http://www.baidu.com");?>2.JavaScript 跳转window.location "http://www.baidu.com";document.location "http://www.baidu.…

Vue中的条件渲染

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue中的条件渲染</title><!--引入vue.js库--><script src"../vue.js"></script> </head><body> <d…

java带参方法上机一_Java带参方法的总结

定义一个带参方法语法&#xff1a;访问修饰符 加返回类型 加方法名 加(参数列表)参数可以带有一个参数 或多个参数 还可以用数组作为参数。’《用数组作为参数》1 实例 public void show(int []scores)这个参数没有返回值调用方法实例化对象对象点方法名 (score)-(实参)实…

多隆:淘宝第一行代码撰写者的程序世界

他2000年加入阿里巴巴&#xff0c;是淘宝的创始人之一&#xff0c;是阿里内部公认的技术大牛&#xff0c;在阿里内网上他被贴得最多的标签就是“神”。在第二届研发效能嘉年华中他将在“向代码致敬&#xff0c;寻找83行代码”活动颁奖盛典中华丽现身&#xff0c;他就是“码神”…

通信工程到底要不要转专业?

戳蓝字“CSDN云计算”关注我们哦&#xff01;一年一度的大学新生报名季又开始了。各地高校陆陆续续迎来了新同学&#xff0c;有的甚至已经开始了军训。每年看到这些怀揣着梦想的年轻面孔&#xff0c;小枣君就非常感慨——时光飞逝&#xff0c;岁月无情&#xff0c;自己的青春&a…

leetcode算法题解(Java版)-16-动态规划(单词包含问题)

摘要&#xff1a; 碰到二叉树的问题&#xff0c;差不多就是深搜、广搜&#xff0c;递归那方面想想了&#xff0c;当然如果要考虑一下空间、时间&#xff0c;还需要进行剪枝和压缩处理。这题比较简单&#xff1a;判断两个树是否相等&#xff0c;可以递归的判断子树是否相等&…

php脚本启动,有没有办法启动一个PHP脚本并获得状态?

是否可以使用js在Web服务器上在后台启动php脚本并让它运行,即使您更改页面或根本不访问该站点,如果您第二次调用该php脚本也可以获取当前状态&#xff1f;这个php脚本将处理数小时的数据,每个循环的睡眠时间为X秒/分钟.如果我之前问的是可能的,如果php仅在脚本结束时才生成输出…

Vue中的列表渲染

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue中的列表渲染</title><!--引入vue.js库--><script src"../vue.js"></script> </head><body> <d…

kafkatemplate无法注入_Spring-Kafka(三)-KafkaTemplate发送消息及结果回调

我们使用KafkaTemplate.send(String data)这个方法发送消息到Kafka中,显然这个方法并不能满足我们系统的需求,那我们需要查看一下KafkaTemplate所实现的接口,看看还提供了什么方法。 当我们发送消息到Kafka后,我们又怎么去确认消息是否发送成功呢?这就涉及到KafkaTemplate…

Java小白进阶笔记(1)-重新认识Java

摘要&#xff1a; 这是偏头痛杨的第一篇原文链接&#xff0c;其中&#xff0c;在系列的第二篇开头作者布置了十道题&#xff0c;下面是我的回答&#xff08;大多是作者的文章摘录&#xff09;重新开始学习Java了&#xff0c;这也是为了以后找工作考虑。热爱的机器学习就先放一放…

真相!30K拿到互联网大厂offer,网友:我服了!

最近笔者在知乎刷到一个帖子&#xff0c;其中&#xff0c;这条回答让人印象深刻&#xff1a;其实&#xff0c;最近几年人工智能大火&#xff0c;其中深度学习岗位的薪酬爆增&#xff0c;BAT大厂高薪招聘AI人才&#xff0c;收到的简历却寥寥无几&#xff1f;究竟是大厂岗位要求高…

Java小白进阶笔记(2)-变量和数据类型

摘要&#xff1a; 复习Java知识&#xff0c;主要是一边看**偏头痛杨**的博客&#xff0c;一边完成博主布置的任务。这是看[2.偏头痛杨的Java入门教学系列之变量&数据类型篇][1] 的作业复习Java知识&#xff0c;主要是一边看偏头痛杨的博客&#xff0c;一边完成博主布置的任…

组件使用中的细节点02

使用is属性解决bug 页面 Vue根实例中除外 在子组件定义data时&#xff0c;data必须是个函数&#xff0c; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue中的列表渲染</title><!--引入…

php对帖子分类,php – MySQL:从类别中获取帖子

我正在尝试学习MySQL,所以我创建了一个小博客系统.我在MysqL中有3个表&#xff1a;帖子&#xff1a;id | title----------------1 | Post Title 12 | Post Title 2类别&#xff1a;id | title | parent--------------------------------10 | category10 | 011 | category11 | 0…

Java小白进阶笔记(3)-初级面向对象

摘要&#xff1a; 继续学习&#xff1a; 4.偏头痛杨的Java入门教学系列之初级面向对象篇继续学习&#xff1a;4.偏头痛杨的Java入门教学系列之初级面向对象篇 分割线中为原文的摘录&#xff1a;面向过程编程&面向对象编程从面向过程到面向对象&#xff0c;不仅仅是编程方式…

鸿蒙 OS 的到来,能为我们改变什么?| 程序员大本营9月刊

作者 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;「鸿蒙初辟原无姓&#xff0c;打破顽空需悟空」&#xff0c;在国产自研操作系统短缺的窘境之下&#xff0c;天惊一声雷&#xff0c;「鸿蒙」踏风来。回首上个月的技术圈&#xff0c;最值得业界浮称流说的…

vue 嵌套表格组件_使用form-create动态生成vue自定义组件和嵌套表单组件

使用form-create动态生成vue自定义组件和嵌套表单组件maker.create通过建立一个虚拟 DOM的方式生成自定义组件生成Makerlet rule [formCreate.maker.create(i-button).props({type:primary,field:btnloading:true})]$f formCreate.create(rule);上面的代码是通过maker生成器动…

注释那些事儿:前端代码质量系列文章(一)

摘要&#xff1a; 好的注释可以提高代码的可读性和可维护性&#xff0c;从而提高代码质量。那么什么是好的注释&#xff1f;如何写出好的注释&#xff1f;“Comment or not comment, that is the question”好的注释可以提高代码的可读性和可维护性&#xff0c;从而提高代码质量…

linux 给普通用户赋予最高权限

文章目录一、创建新用户二、给新用户设置密码三、赋予sudoers文件写的权限四、编辑sudoers文件五、删除sudoers文件写的权限一、创建新用户 useradd know二、给新用户设置密码 passwd know三、赋予sudoers文件写的权限 chmod uw /etc/sudoers四、编辑sudoers文件 vim /etc/…

php裁剪图片并上传源码,改写jcrop插件+php的图片上传实现与裁剪一体化

1.图片上传后立刻判断图片的宽和高是否超过预设的最大高度与宽度&#xff0c;超过了则生成缩略图&#xff0c;2.图片裁剪使用的是jquery的裁剪插件Jcrop,可以实现裁剪的即时预览&#xff0c;代码没有优化&#xff0c;会生成很多垃圾图片&#xff0c;欢迎大家一起改进&#xff0…