logstash处理java堆栈日志的方法(java,logstash,编程语言)

时间:2024-05-02 20:04:06 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

一、背景

在我们的java程序中,经常会输出一些日志,来帮助我们来分析一些问题。但是对于我们的异常来说,它可能存在多行,因此我们就需要处理这种多行的事件。在 logstash 中,我们可以借助 multiline codec 来处理。

二、需求

假设我们有如下数据。

129904[2021-05-1113:31:19][ip=]INFOo.s.c.a.AnnotationConfigApplicationContext[doClose(984)]-Closingorg.springframework.context.annotation.AnnotationConfigApplicationContext@3e5d4f6b:startupdate[TueMay1113:29:11CST2021];parent:org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@299321e2129905[2021-05-1113:31:19][ip=]WARNo.s.c.a.AnnotationConfigApplicationContext[doClose(994)]-ExceptionthrownfromApplicationListenerhandlingContextClosedEventorg.springframework.beans.factory.BeanCreationNotAllowedException:Errorcreatingbeanwithname'eurekaAutoServiceRegistration':Singletonbeancreationnotallowedwhilesingletonsofthisfactoryareindestruction(DonotrequestabeanfromaBeanFactoryinadestroymethodimplementation!) atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:216) atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) atorg.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)

logstash处理java堆栈日志的方法

需要将如上的数据做一个多行展示。

129904 的作为一行展示。

129905 的异常堆栈数据作为一行展示。

三、实现思路

1、分析日志

129904[2021-05-1113:31:19][ip=]INFOo.s.c.a.AnnotationConfigApplicationContext[doClose(984)]-Clos129905[2021-05-1113:31:19][ip=]WARNo.s.c.a.AnnotationConfigApplicationContext[doClose(994)]-ExceptionthrownfromApplicationListenerhandlingContextClosedEvent

从上方简化的日志可知,我们的日志每行都是以一个数字开头,那么可以认为以数字开头的行是一个单独的行,以非数字开头的行是隶属于上一行的,即是一个多行的。

2、实现,编写pipeline文件

vim java-exception.conf

input{file{path=>["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/java-exception/application*.log"]start_position=>"end"sincedb_path=>"/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/java-exception/sincedb.db"sincedb_write_interval=>"15seconds"mode=>"tail"type=>"application"codec=>multiline{pattern=>"^\d+"negate=>"true"what=>"previous"charset=>"UTF-8"auto_flush_interval=>3}}}filter{}output{stdout{codec=>rubydebug{}}}

我们主要关注的是 multiline中的配置

  • pattern: 这个是用来匹配文本的表达式,也可以是grok表达式

  • what: 如果pattern匹配成功的话,那么匹配行是归宿于上一个事件,还是归属于下一个事件。

    • previous: 归属于上一个事件

    • next: 归属于下一个事件

  • negate:是否对 pattern 的结果取反

    • false: 不取反,是默认值

    • true: 取反。将多行事件扫描过程中的行匹配逻辑取反(如果pattern匹配失败,则认为当前行是多行事件的组成部分)

  • auto_flush_interval: 当匹配到一个多行格式时,在 auto_flush_interval秒之内,如果没有新的行匹配的话,则会转换成 logstash 的一个事件进行发布。默认没有设置。单位是:秒(s)

四、注意事项

1、默认情况下,logstash 每读取到一行就会发送一个事件。

2、如果要发送多行事件,就需要使用 multiline 来实现。

3、如果我们的 logstash 在一个 pipeline 中存在多个输入,那么多行的处理,应该在发送数据的源头解决。即,在logstash自身不处理多行。因为可能会导致数据错乱。

logstash处理java堆栈日志的方法

五、参考文档

1、https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html

2、https://www.elastic.co/guide/en/logstash/current/multiline.html

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:logstash处理java堆栈日志的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Web前端工程中JavaScript数据方法有哪些下一篇:

15 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18