在工作中,遇到一个问题就是日志的处理,首选的方案就是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匹配多行日志的更多相关文章

  1. Logstash-安装logstash-filter-multiline插件(解决logstash匹配多行日志)

    ELK-logstash在搬运日志的时候会出现多行日志,普通的搬运会造成保存到ES中日志一条一条的保存,很丑,而且不方便读取,logstash-filter-multiline可以解决该问题. 接下来 ...

  2. logstash处理多行日志-处理java堆栈日志

    logstash处理多行日志-处理java堆栈日志 一.背景 二.需求 三.实现思路 1.分析日志 2.实现,编写pipeline文件 四.注意事项 五.参考文档 一.背景 在我们的java程序中,经 ...

  3. Logstash——multiline 插件,匹配多行日志

    本文内容 测试数据 字段属性 按多行解析运行时日志 把多行日志解析到字段 参考资料 在处理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如 log4j.运行时日志跟访问日志最大的 ...

  4. Logstash——multiline 插件,匹配多行日志

    本文内容 测试数据 字段属性 按多行解析运行时日志 把多行日志解析到字段 参考资料 在处理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如 log4j.运行时日志跟访问日志最大的 ...

  5. logstash之multiline插件,匹配多行日志

    在外理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如log4j.运行时日志跟访问日志最大的不同是,运行时日志是多行,也就是说,连续的多行才能表达一个意思. 在filter中,加 ...

  6. Python正则处理多行日志一例

    正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...

  7. Python正则处理多行日志一例(可配置化)

    正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...

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

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

  9. ELK学习笔记之Logstash和Filebeat解析对java异常堆栈下多行日志配置支持

    0x00 概述 logstash官方最新文档.假设有几十台服务器,每台服务器要监控系统日志syslog.tomcat日志.nginx日志.mysql日志等等,监控OOM.内存低下进程被kill.ngi ...

随机推荐

  1. 透彻理解Ioc

    引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...

  2. llvm code call graph

    https://www.ics.usi.ch/images/stories/ICS/slides/llvm-graphs.pdf

  3. ssh 防止超时掉线

    超时掉线的机制原始驱动力是什么?反正远程操作久置掉线确实挺烦的. 解决的办法呢,也是有的,客户端和服务器端都可以做.就是使用 no-op 反空闲协议发送呼吸包,来确认另一端是否在线:没回应就下线,而不 ...

  4. vue css 模块化编程 CSS Modules Scoped

    1.scoped https://vue-loader.vuejs.org/zh/guide/scoped-css.html 2.module https://vue-loader.vuejs.org ...

  5. java 生成GUID与UUID

      java 生成GUID与UUID CreateTime--2018年5月31日16点29分 Author:Marydon import java.util.UUID; public static ...

  6. 使用badblocks检测坏块

    命令格式 badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数 [启始区块]] 典型的命令如下 # 写测试, 数据安全 -c - ...

  7. Oracle 中TNS的作用

    什么是TNS? TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和client连接的一个工具,在大多数情况下client和数据库要通讯,必须配置TNS,当然在少数情况下,不用 ...

  8. 【centos6】给php命令设置全局变量三种方式

    方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/my ...

  9. C# sqlserver 2008 连接字符串

    sqlserver 2008 的连接字符串和sql2005的几乎是一样的,但是,他们对于其中的一些配置要求不同.我试着用了很多连接字符串,最后找到了问题的原因,特别记录到这里,如果有相同问题的同学,可 ...

  10. 重启ssh服务出现Redirecting to /bin/systemctl restart sshd.service

    转自:https://blog.csdn.net/caijunfen/article/details/70599138 CentOs 重启ssh服务的命令如下: # service sshd rest ...