logstash匹配多行日志
在工作中,遇到一个问题就是日志的处理,首选的方案就是ELFK(filebeat+logstash+es+kibana)
因为之前使用过logstash采集日志的时候,非常的消耗系统的资源,所以这里我选择了更加轻量级的日志采集器fiebeat,
我这里是使用filebeat采集日志,然后把日志传给logstash 进行匹配解析。然后存储到es里面,最后使用kibana进行页面上的展示
我这里的环境是这样的
filebeat-5.3.0-linux-x86_64.tar.gz
logstash-2.3.1.tar.gz
elasticsearch-1.7.3.tar.gz
kibana-4.1.2-linux-x64.tar.gz
我这里filebeat的配置是这样的
这里我的日志接收端logstash的配置是这样的
这里我在使用logstash的插件multiline插件的时候总是报错是multiline 插件的报错。我的logstash的版本是2.0.0
然后我给他换成2.3.1
./logstash-plugin install logstash-filter-multiline
装上插件 input {
beats {
type => beats
port => 5077
}
}
filter {
multiline {
pattern => ".*##.*"
negate => true
what => "previous"
}
}
不要在logstash的filter plugin中配置multiline(文章转自:http://niubidian.top/blog/show/27/) 如果在filter plugin中配multiline的话,logstash的workers会强制设置为1(即使你设置为其他值也没用)。这样会导致logstash处理效率下降。 解决办法就是将多行匹配配置到input plugin中。可以这样
input {
beats {
port => "5191"
codec => multiline {
patterns_dir => ["/data/package/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns"]
pattern => ".*#ELK#.*"
what => "previous"
negate => true }
}
}
output {
if [type] == 'test-front' {
elasticsearch {
hosts => ["10.19.148.59:9200"]
index => "test-front-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
} }
}
匹配含有字符串##的行,如果没有这个字符串的行,那肯定是属于前一行的。 对 multiline 插件来说,有三个设置比较重要:negate、pattern 和 what。
what 必须设置 可以为 previous 或 next 没有默认值 如果正则表达式匹配了,那么该事件是属于下一个或是前一个事件? pattern 必须设置 类型为 string 没有默认值 要匹配的正则表达式。 negate 类型是 boolean 默认为 false 否定正则表达式(如果没有匹配的话)。 参考链接:http://blog.csdn.net/wyqlxy/article/details/52622867
我的日志的格式是这样的
这里我们可以看一下logback.xml里的配置 <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %le %lo [%thread]: [appid => -] ## '%msg' '%ex'\n</pattern>
</encoder> 2017-- ::22.765 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor[qtp1213415012-]: [appid => -] ## 'Written [1] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@656e9929]' 'java.lang.RuntimeException: For debugging purposes only (not an error)
at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:)
at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:)
at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:)
at com.kongzhong.interceptor.SSOLoginInterceptor.preHandle(SSOLoginInterceptor.java:)
at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:)
要是上面想写正则的话是这样的
%{TIMESTAMP_ISO8601:date} %{WORD:Level} %{DATA:CLASS} \[%{DATA:Thread}\]: %{SYSLOG5424SD:appid} ## \'%{DATA:message}\' (\'\'|%{QUOTEDSTRING:Exception})
参考文档链接:
http://blog.csdn.net/wyqlxy/article/details/52622867
https://discuss.elastic.co/t/filebeat-and-multiline/38499/5
https://www.jamf.com/jamf-nation/discussions/11351/logstash-filter
ELK的文章
http://blog.oldboyedu.com/elk/ http://www.tuicool.com/articles/YRZzQzZ http://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html http://jayveehe.github.io/2017/02/01/elk-stack/ http://shildon.leanote.com/post/%E6%90%AD%E5%BB%BAELK%E7%AC%94%E8%AE%B0 filebeats 的文章
http://www.nibayuan.com/articles/2016/02/24/elk-filebeat.html
这里我们要给logstash 的beat的插件给装上 在使用filebeat的时候数据总是穿不过去,我也装上logstash-input-beats的插件了
但是就是不行,然后我按照网上的方法把这个插件给卸载了
bin/plugin uninstall logstash-input-beats
cd /data/tools
wget https://rubygems.org/downloads/logstash-input-beats-0.9.3.gem
./bin/plugin install /data/tools/logstash-input-beats-0.9.3.gem 然后我们再启动logstash 和filebeat就好了
./filebeat -e -c filebeat.yml filebeat配置多个log
https://www.zybuluo.com/muyanfeixiang/note/608470 filebeat 配置文件的解释
http://www.cnblogs.com/zlslch/p/6622079.html logstash 的配置文件的格式
http://www.cnblogs.com/smail-bao/p/5695656.html
logstash匹配多行日志的更多相关文章
- Logstash-安装logstash-filter-multiline插件(解决logstash匹配多行日志)
ELK-logstash在搬运日志的时候会出现多行日志,普通的搬运会造成保存到ES中日志一条一条的保存,很丑,而且不方便读取,logstash-filter-multiline可以解决该问题. 接下来 ...
- logstash处理多行日志-处理java堆栈日志
logstash处理多行日志-处理java堆栈日志 一.背景 二.需求 三.实现思路 1.分析日志 2.实现,编写pipeline文件 四.注意事项 五.参考文档 一.背景 在我们的java程序中,经 ...
- Logstash——multiline 插件,匹配多行日志
本文内容 测试数据 字段属性 按多行解析运行时日志 把多行日志解析到字段 参考资料 在处理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如 log4j.运行时日志跟访问日志最大的 ...
- Logstash——multiline 插件,匹配多行日志
本文内容 测试数据 字段属性 按多行解析运行时日志 把多行日志解析到字段 参考资料 在处理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如 log4j.运行时日志跟访问日志最大的 ...
- logstash之multiline插件,匹配多行日志
在外理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如log4j.运行时日志跟访问日志最大的不同是,运行时日志是多行,也就是说,连续的多行才能表达一个意思. 在filter中,加 ...
- Python正则处理多行日志一例
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
- Python正则处理多行日志一例(可配置化)
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...
- ELK学习笔记之Logstash和Filebeat解析对java异常堆栈下多行日志配置支持
0x00 概述 logstash官方最新文档.假设有几十台服务器,每台服务器要监控系统日志syslog.tomcat日志.nginx日志.mysql日志等等,监控OOM.内存低下进程被kill.ngi ...
随机推荐
- Web Storage与Cookie相比存在的优势:
(1).存储空间更大:IE8下每个独立的存储空间为10M,其他浏览器实现略有不同,但都比Cookie要大很多. (2).存储内容不会发送到服务器:当设置了Cookie后,Cookie的内容会随着请求一 ...
- Java泛型的PECS原则
1.什么是PESC ? PESC = producer-extens , consumer -super. 如果参数化类型表示一个 T 生产者,就使用 <? extends T>: 如果 ...
- java byte数组与String互转
java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String ...
- java第七节 IO
/* *第七讲 IO/输入与输出 * * File类 * RandomAccessFile类 * 各种节点流类 * 字符编码 * 各种过滤流与包装类 * *File类 * File类是IO包中唯一代表 ...
- fiddler怎么修改服务器返回参数并发送
在进行使用fiddler中提供了较多的功能进行使用的,那么进行就可以对当前的网页中的暂停之后,在进行使用fiddler中把拦截起的后,在进行修改的服务器参数的之后,在把参数修改完成之后,把进行发送出去 ...
- Vacuum tube 真空管/电子管
真空管/电子管的发明 1904, John Ambrose Fleming invented the two-electrode vacuum-tube rectifier, which he cal ...
- 存储过程—导出table数据为inser sqlt语句
Sql Server Management Studio没有将table中数据导出为insert语句的功能. 下面一个很有用的存储过程,可以把某张表的数据导出为insert sql语句.当然Oracl ...
- Debug 路漫漫-04
1.错误使用 cat 要串联的数组的维度不一致. ——前面给个初始化即可: D = cell(length(trainIdx),1); user_itemData = cell(length(trai ...
- 树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度
参考:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html 第一步,允许单总线接口 su ...
- 树莓派进阶之路 (012) - 关于Raspberry Pi树莓派无线网卡配置
Raspberry Pi树莓派无线网卡配置[多重方法备选] 要想让树莓派方便操作,肯定需要配置无线网卡,这样可以大大增强树莓派的移动性和便利性,其实配置无线网卡基本就是和普通linux平台下配置无线网 ...