推荐阅读

Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506
Helm3(K8S 资源对象管理工具)博客专栏:https://blog.csdn.net/xzk9381/category_10895812.html

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109571087,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

Filebeat 收集日志的过程中,默认是按行收取的,也就是每一行都会默认是一个单独的事件并添加时间戳。但是在收集一些特殊日志的时候,往往一个事件包含有多行,例如 Java 的堆栈跟踪日志:

20-09-25 09:09:01.866 ERROR - {"traceId":"","where":{"methodName":"doFilter","className":"com.sohu.smc.channel.news.filter.ResponseTimeFilter","lineNumber":47},"message":"ResponseTimeFilter error","error":"org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peerat org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309)at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:272)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Connection reset by peerat sun.nio.ch.FileDispatcherImpl.write0(Native Method)at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)at sun.nio.ch.IOUtil.write(IOUtil.java:65)
"}

所以针对多行日志需要对 filebeat 进行特殊的配置。

官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html

首先对部分配置项进行说明:

  • multiline.pattern:希望匹配到的结果(正则表达式)
  • multiline.negate:值为 true 或 false。使用 false 代表匹配到的行合并到上一行;使用 true 代表不匹配的行合并到上一行
  • multiline.match:值为 after 或 before。after 代表合并到上一行的末尾;before 代表合并到下一行的开头
  • multiline.max_lines:合并的最大行数,默认 500
  • multiline.timeout:一次合并事件的超时时间,默认为 5s,防止合并消耗太多时间导致 filebeat 进程卡死

一、Java 堆栈跟踪日志

1. 示例一

堆栈跟踪日志由多行组成,每一行在初始行之后以空格开头,示例如下:

Exception in thread "main" java.lang.NullPointerExceptionat com.example.myproject.Book.getTitle(Book.java:16)at com.example.myproject.Author.getBookTitles(Author.java:25)at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

要将这些行整合到 Filebeat 的单个事件中,可以在 Filebeat 中添加如下配置:

multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after

这个配置会将以空格开头的行合并到上一行内容。

2. 示例二

接下来使用一个比较复杂的堆栈日志格式:

20-09-25 09:09:01.866 ERROR - {"traceId":"","where":{"methodName":"doFilter","className":"com.sohu.smc.channel.news.filter.ResponseTimeFilter","lineNumber":47},"message":"ResponseTimeFilter error","error":"org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peerat org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309)at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:272)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Connection reset by peerat sun.nio.ch.FileDispatcherImpl.write0(Native Method)at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)... 72 more
"}

使用如下配置可以将这些行整合到一个事件中:

multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:|^"}'
multiline.negate: false
multiline.match: after# 或者如下格式multiline:pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'negate: falsematch: after# 如果日志中有 ... 72 more 这样的结尾,可以用如下匹配方式:
multiline.type: pattern
multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:|^"}'
multiline.negate: false
multiline.match: after

这个配置会将以空格开头的行和以 Caused by 开头的行合并到上一行内容中。

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109571087,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

二、C 风格日志

一些编程语言在一行末尾使用反斜杠()字符,表示该行仍在继续,如下所示:

printf ("%10.10ld  \t %10.10ld \t %s\%f", w, x, y, z );

使用如下配置可以将这些行整合到单个事件中:

multiline.pattern: '\\$'
multiline.negate: false
multiline.match: before

这个配置会将以 \ 字符结尾的行与后面的行合并。

三、带有时间戳的日志

一般的日志中单个事件都会带有时间戳,但是有时单个事件的日志会被截成两行或者多行,这样就需要匹配时间戳来合并行。示例如下:

例如一个有关于新闻内容的日志,如果新闻的正文中包含换行符,那么在默认情况下,日志中记录的事件会由于换行符的存在被截断

[2015-08-24 11:49:14,389][INFO ][env                      ] [Letha] using [1] data paths, mounts [[/
(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]

使用如下配置可以将这些行整合到一个事件中:

multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after

此配置使用negate: true和match: after设置来指定任何不符合指定模式的行都属于上一行。

四、应用程序事件

有时应用程序日志包含以自定义标记开始和结束的事件,示例如下:

[2015-08-24 11:49:14,389] Start new event
[2015-08-24 11:49:14,395] Content of processing something
[2015-08-24 11:49:14,399] End event

使用如下配置可以将这些行整合到一个事件中:

multiline.pattern: 'Start new event'
multiline.negate: true
multiline.match: after
multiline.flush_pattern: 'End event'

此配置把指定字符串开头,指定字符串结尾的多行合并为一个事件。

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109571087,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

使用 Filebeat 对多行日志进行处理(multiline)相关推荐

  1. ES Filebeat 使用 Pipeline 处理日志中的 @timestamp

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  2. KubeSphere 多行日志采集方案深度探索

    作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长 采集落盘日志 日志采集,通常使用 EFK 架构,即 ElasticSearch,Filebeat,Kibana,这是在主机 ...

  3. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)

    写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持) 参考文章: (1)写给大忙人的ELK最新版6.2.4学习笔记-Logstash ...

  4. filebeat+logstash收集错误日志发送邮件提醒

    filebeat+logstash收集错误日志发送邮件提醒 典型ELK应用架构 因为只收集错误日志并且数据量并不是非常大所以简化流程 使用filebeat+logstash发送异常日志 软件 版本 说 ...

  5. logstash日志用于匹配多行日志

    2019独角兽企业重金招聘Python工程师标准>>> logstash显示单行日志很方便,但是多行日志怎么搞. input {file {type =>"xxxxx ...

  6. ELK 使用filebeat替代Logstash收集日志

    使用beats采集日志 之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beat ...

  7. zabbix日志监控:操作系统、业务系统、文件大小、多行日志

    zabbix日志监控:操作系统.业务系统.文件大小.多行日志 目录 1 监控操作系统日志 2 监控业务系统日志 具体要求: 分析: 操作: 3 监控日志文件大小 (1)在被管主机当中安装agent ( ...

  8. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...

    接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...

  9. 使用Elasticsearch+filebeat+logstach+kibana构建日志服务平台

    背景 devops中日志服务的搭建 收集各个节点(agent)的日志文件进ES集群,并提供分析和查询的服务 各个agent的filebeat收集服务不能终断,也就是需要动态reload配置文件 支持用 ...

最新文章

  1. SCOI2019AFO记
  2. php js获取file,PHP file_get_contents 读取js脚本的问题
  3. Flink 1.13,面向流批一体的运行时与 DataStream API 优化
  4. 玩Python遇到的问题一二三及解决办法
  5. 抖音一个老人和一个机器人歌曲_一个老人孤独去世,一个老人安然离世
  6. android的AIDL的调用
  7. (15) 常用管理类软件需求征集 -- 通用菜单模块管理
  8. bzoj 1012 最大数maxnumber
  9. 在BAE上部署Pomelo
  10. Word论文插入带有方括号序号的参考文献——尾注+交叉引用
  11. html表单中按钮居中,Ant design StepsForm中如何使底部按钮居中
  12. opencv Mat指针读取、修改像素值
  13. iOS 支持3DTouch快捷菜单
  14. php 图片获得大小,PHP获取一张图片的宽度和高度大小 并裁切图片
  15. 《野蛮生长》--冯仑
  16. mongoDB常用查询更新删除语句
  17. 大唐波斯将军 机器人_波斯帝国被阿拉伯所灭,末代王子三次求助大唐,为何唐朝没有出兵...
  18. pandas行/列删除
  19. 计算机专业毕业自我鉴定800字,计算机专业毕业自我鉴定范文
  20. 直播核心圈从业者对淘宝直播12条判断

热门文章

  1. Vijos P2010 回文日期【回文+日期计算】
  2. CCF NOI1004 填充矩形
  3. CCF201609-2 火车购票(100分)
  4. UVA489 Hangman Judge【模拟】
  5. 树莓派系统常用配置文件及常用软件
  6. C++ 多线程与并发
  7. 计算机的组成 —— 耳机与音响
  8. 使用 matlab 数字图像处理(十)—— 维纳滤波复原
  9. utilities —— 常见宏定义
  10. 矩阵的谱(半径)及其性质