在工作中,遇到一个问题就是日志的处理,首选的方案就是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. python 大小端数据转换

    "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000".decode('hex')[::-1].enc ...

  2. Ulua_toLua_基本案例(二)_ScriptsFromFile

    在Untiy中用Lua.必需要LuaInterface. LuaInterface的介绍请看:点击打开链接 能够先光写Lua,生成.lua的纯文件. 再Unity中通过,luaState.DoFile ...

  3. edit-distance-动态规划,计算两词之间变换的最小步数

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  4. Microsoft Excel as a Source and Target as Oracle in ODI

    创建测试表格和目标表 导出scott用户的emp表为EMP.xlsx作为测试的元数据,结果如下 打开EMP.xlsx 公式→定义名称 创建目标表(来自scott.sql) CREATE TABLE E ...

  5. Oracle列自增实现(3)-DEFAULT Values Using Sequences

    Oracle 12c中,可以使用序列的NEXTVAL and CURRVAL的值作为默认值,来实现列自增! 一.使用序列的NEXTVAL and CURRVAL的值作为默认值 创建序列 CREATE ...

  6. Eclipse和MyEclipse使用技巧--如何解决新建一个包的时候,工具帮生成了多个包的问题?

    一.问题再现 二.如何解决

  7. ftp相关常用命令

     工欲善其事必先利其器 00.FTP常用命令 01.SFTP命令 sftp  user@ip:/tmp

  8. 今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。

    因此我决定用winform做界面,用C++写逻辑.当然尽量不用托管代码写逻辑.

  9. Androidstudio安装问题

    非常多人在用Android Studio的时候会出现"'tools.jar' seems to be not in Android Studio classpath.Please ensur ...

  10. UVA - 10298 Power Strings (KMP求字符串循环节)

    Description Problem D: Power Strings Given two strings a and b we define a*b to be their concatenati ...