logstash处理多行日志-处理java堆栈日志
一、背景
在我们的java程序中,经常会输出一些日志,来帮助我们来分析一些问题。但是对于我们的异常来说,它可能存在多行,因此我们就需要处理这种多行的事件。在 logstash 中,我们可以借助 multiline codec 来处理。
二、需求
假设我们有如下数据。
129904 [2021-05-11 13:31:19] [ip=] INFO o.s.c.a.AnnotationConfigApplicationContext [doClose(984)] - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@3e5d4f6b: startup date [Tue May 11 13:29:11 CST 2021]; parent: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@299321e2
129905 [2021-05-11 13:31:19] [ip=] WARN o.s.c.a.AnnotationConfigApplicationContext [doClose(994)] - Exception thrown from ApplicationListener handling ContextClosedEvent
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:216)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)

需要将如上的数据做一个多行展示。
129904 的作为一行展示。
129905 的异常堆栈数据作为一行展示。
三、实现思路
1、分析日志
129904 [2021-05-11 13:31:19] [ip=] INFO o.s.c.a.AnnotationConfigApplicationContext [doClose(984)] - Clos
129905 [2021-05-11 13:31:19] [ip=] WARN o.s.c.a.AnnotationConfigApplicationContext [doClose(994)] - Exception thrown from ApplicationListener handling ContextClosedEvent
从上方简化的日志可知,我们的日志每行都是以一个数字开头,那么可以认为以数字开头的行是一个单独的行,以非数字开头的行是隶属于上一行的,即是一个多行的。
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 => "15 seconds"
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自身不处理多行。因为可能会导致数据错乱。

五、参考文档
1、https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html
2、https://www.elastic.co/guide/en/logstash/current/multiline.html
logstash处理多行日志-处理java堆栈日志的更多相关文章
- java Log日志规范
Overview 一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神.程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的.本文想讨论的是 ...
- 清晰梳理最全日志框架关系与日志配置-SpringBoot 2.7.2 实战基础
优雅哥 SpringBoot 2.7.2 实战基础 - 07 - 日志配置 Java 中日志相关的 jar 包非常多,log4j.log4j2.commons-logging.logback.slf4 ...
- K8S学习笔记之filebeat采集K8S微服务java堆栈多行日志
0x00 背景 K8S内运行Spring Cloud微服务,根据定制容器架构要求log文件不落地,log全部输出到std管道,由基于docker的filebeat去管道采集,然后发往Kafka或者ES ...
- logstash匹配多行日志
在工作中,遇到一个问题就是日志的处理,首选的方案就是ELFK(filebeat+logstash+es+kibana) 因为之前使用过logstash采集日志的时候,非常的消耗系统的资源,所以这里我选 ...
- java学习日志(1):命令行and小程序
1.dos命令行,常见的命令 dir:列出当前目录下的文件以及文件夹md:创建目录rd:删除目录(必须空)cd:进入指定目录cd.. :退回到上一级目录cd/:退回到根目录del:删除文件exit:退 ...
- JAVA主流日志梳理
JAVA主流日志梳理 引入 历史故事 Log4j - JDK1.3及以前 JUL - JDK1.4 JCL - 日志门面commons-logging的出现 SLF4j - 可能是最好的日志框架 lo ...
- Java Slf4j日志配置输出到文件中
1.概述 新项目需要增加日志需求,所以网上找了下日志配置,需求是将日志保存到指定文件中.网上找了下文章,发现没有特别完整的文章,下面自己整理下. 1.Java日志概述 对于一个应用程序来说日志记录是必 ...
- 带你掌握Java各种日志框架
一:日志基本概念及框架 1:什么是日志 Java程序员在开发项目时都是依赖Eclipse/IDEA等集成开发工具的Debug调试功能来跟踪解决Bug,但项目打包部署发布到了测试环境和生产环境怎么办?难 ...
- 细说Java主流日志工具库
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...
随机推荐
- Linux内核下包过滤框架——iptables&netfilter
iptables & netfilter 1.简介 netfilter/iptables(下文中简称为iptables)组成Linux内核下的包过滤防火墙,完成封包过滤.封包重定向和网络地址转 ...
- 通过mstsc复制粘贴失败需要重新启动RDP剪切板监视程序rdpclip.exe
先结束程序 再重新启动程序
- POJ2251——Dungeon Master(三维BFS)
和迷宫问题区别不大,相比于POJ1321的棋盘问题,这里的BFS是三维的,即从4个方向变为6个方向. 用上队列的进出操作较为轻松. #include<iostream> #include& ...
- 洛谷P1449——后缀表达式(栈模拟)
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...
- DEDEcms手机网站添加详情内页上一页/下一页的翻页功能
修改文件include/arc.archives.class.php文件. 1.搜索 function GetPreNext($gtype='') 2.将这个函数的所有内容替换为 function G ...
- dotnet 读 WPF 源代码笔记 布局时 Arrange 如何影响元素渲染坐标
大家是否好奇,在 WPF 里面,对 UIElement 重写 OnRender 方法进行渲染的内容,是如何受到上层容器控件的布局而进行坐标偏移.如有两个放入到 StackPanel 的自定义 UIEl ...
- 关于连接服务器redis的教程
第一步:下载RedisDesktopManager 这个百度一搜就有了,但是现在的版本ssh用不了 建议找可以用的版本,这个百度,懂得都懂. 第二步:服务器宝塔redis设置 在配置文件将bind 1 ...
- px em rem区别
国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的 ...
- 解决报错:The import javax.servlet.annotation cannot be resolved
maven项目,引入javax.servlet.annotation.WebServlet的jar包,使用@WebServlet注解来实现对传统web.xml中servlet和url的映射 报错:Th ...
- 前端规范之CSS规范(Stylelint)
代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...