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
-04-05 17:50:22.765 DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor[qtp1213415012-17]: [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:367) at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:389) at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:214) at com.kongzhong.interceptor.SSOLoginInterceptor.preHandle(SSOLoginInterceptor.java:91) at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:134) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:958) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

要是上面想寫正則的話是這樣的

%{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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM