1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        分布式實(shí)時(shí)日志分析解決方案部署架構(gòu)

        共 3517字,需瀏覽 8分鐘

         ·

        2022-05-14 13:47

        上一篇:Spring 官宣:換掉 JVM!

        一、概述


        ELK 已經(jīng)成為目前最流行的集中式日志解決方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等組件組成,來共同完成實(shí)時(shí)日志的收集,存儲(chǔ),展示等一站式的解決方案。本文將會(huì)介紹ELK常見的架構(gòu)以及相關(guān)問題解決。


        1. Filebeat:Filebeat是一款輕量級(jí),占用服務(wù)資源非常少的數(shù)據(jù)收集引擎,它是ELK家族的新成員,可以代替Logstash作為在應(yīng)用服務(wù)器端的日志收集引擎,支持將收集到的數(shù)據(jù)輸出到Kafka,Redis等隊(duì)列。

        2. Logstash:數(shù)據(jù)收集引擎,相較于Filebeat比較重量級(jí),但它集成了大量的插件,支持豐富的數(shù)據(jù)源收集,對收集的數(shù)據(jù)可以過濾,分析,格式化日志格式。

        3. Elasticsearch:分布式數(shù)據(jù)搜索引擎,基于Apache Lucene實(shí)現(xiàn),可集群,提供數(shù)據(jù)的集中式存儲(chǔ),分析,以及強(qiáng)大的數(shù)據(jù)搜索和聚合功能。

        4. Kibana:數(shù)據(jù)的可視化平臺(tái),通過該web平臺(tái)可以實(shí)時(shí)的查看 Elasticsearch 中的相關(guān)數(shù)據(jù),并提供了豐富的圖表統(tǒng)計(jì)功能。

        二、ELK常見部署架構(gòu)


        2.1 Logstash作為日志收集器


        這種架構(gòu)是比較原始的部署架構(gòu),在各應(yīng)用服務(wù)器端分別部署一個(gè)Logstash組件,作為日志收集器,然后將Logstash收集到的數(shù)據(jù)過濾、分析、格式化處理后發(fā)送至Elasticsearch存儲(chǔ),最后使用Kibana進(jìn)行可視化展示,這種架構(gòu)不足的是:


        Logstash比較耗服務(wù)器資源,所以會(huì)增加應(yīng)用服務(wù)器端的負(fù)載壓力。



        2.2 Filebeat作為日志收集器


        該架構(gòu)與第一種架構(gòu)唯一不同的是:應(yīng)用端日志收集器換成了Filebeat,F(xiàn)ilebeat輕量,占用服務(wù)器資源少,所以使用Filebeat作為應(yīng)用服務(wù)器端的日志收集器,一般Filebeat會(huì)配合Logstash一起使用,這種部署方式也是目前最常用的架構(gòu)。



        2.3 引入緩存隊(duì)列的部署架構(gòu)


        該架構(gòu)在第二種架構(gòu)的基礎(chǔ)上引入了Redis緩存隊(duì)列(還可以是其他消息隊(duì)列),將Filebeat收集到的數(shù)據(jù)發(fā)送至Redis,然后在通過Logstasth讀取Redis中的數(shù)據(jù),這種架構(gòu)主要是解決大數(shù)據(jù)量下的日志收集方案,使用緩存隊(duì)列主要是解決數(shù)據(jù)安全與均衡Logstash與Elasticsearch負(fù)載壓力。



        2.4 以上三種架構(gòu)的總結(jié)


        第一種部署架構(gòu)由于資源占用問題,現(xiàn)已很少使用,目前使用最多的是第二種部署架構(gòu),至于第三種部署架構(gòu)個(gè)人覺得沒有必要引入消息隊(duì)列,除非有其他需求,因?yàn)樵跀?shù)據(jù)量較大的情況下,F(xiàn)ilebeat 使用壓力敏感協(xié)議向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。如果 Logstash 正在繁忙地處理數(shù)據(jù),它會(huì)告知 Filebeat 減慢讀取速度。擁塞解決后,F(xiàn)ilebeat 將恢復(fù)初始速度并繼續(xù)發(fā)送數(shù)據(jù)。


        三、問題及解決方案


        問題:如何實(shí)現(xiàn)日志的多行合并功能?


        系統(tǒng)應(yīng)用中的日志一般都是以特定格式進(jìn)行打印的,屬于同一條日志的數(shù)據(jù)可能分多行進(jìn)行打印,那么在使用ELK收集日志的時(shí)候就需要將屬于同一條日志的多行數(shù)據(jù)進(jìn)行合并。


        解決方案:使用Filebeat或Logstash中的multiline多行合并插件來實(shí)現(xiàn)


        在使用multiline多行合并插件的時(shí)候需要注意,不同的ELK部署架構(gòu)可能multiline的使用方式也不同,如果是本文的第一種部署架構(gòu),那么multiline需要在Logstash中配置使用,如果是第二種部署架構(gòu),那么multiline需要在Filebeat中配置使用,無需再在Logstash中配置multiline。


        1、multiline在Filebeat中的配置方式:



        如:


        pattern: '\['
        negate: true
        match: after


        該配置表示將不匹配pattern模式的行合并到上一行的末尾


        2、multiline在Logstash中的配置方式



        (1)Logstash中配置的what屬性值為previous,相當(dāng)于Filebeat中的after,Logstash中配置的what屬性值為next,相當(dāng)于Filebeat中的before。


        (2)pattern => "%{LOGLEVEL}\s*\]" 中的LOGLEVEL是Logstash預(yù)制的正則匹配模式,預(yù)制的還有好多常用的正則匹配模式,詳細(xì)請看:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns


        問題:如何將Kibana中顯示日志的時(shí)間字段替換為日志信息中的時(shí)間?


        默認(rèn)情況下,我們在Kibana中查看的時(shí)間字段與日志信息中的時(shí)間不一致,因?yàn)槟J(rèn)的時(shí)間字段值是日志收集時(shí)的當(dāng)前時(shí)間,所以需要將該字段的時(shí)間替換為日志信息中的時(shí)間。


        解決方案:使用grok分詞插件與date時(shí)間格式化插件來實(shí)現(xiàn)


        在Logstash的配置文件的過濾器中配置grok分詞插件與date時(shí)間格式化插件,如:



        如要匹配的日志格式為:“[DEBUG][20170811 10:07:31,359][DefaultBeanDefinitionDocumentReader:106] Loading bean definitions”,解析出該日志的時(shí)間字段的方式有:


        ① 通過引入寫好的表達(dá)式文件,如表達(dá)式文件為customer_patterns,內(nèi)容為:
        CUSTOMER_TIME %{YEAR}%{MONTHNUM}%{MONTHDAY}\s+%{TIME}

        注:內(nèi)容格式為:[自定義表達(dá)式名稱] [正則表達(dá)式]


        然后logstash中就可以這樣引用:



        ② 以配置項(xiàng)的方式,規(guī)則為:(?<自定義表達(dá)式名稱>正則匹配規(guī)則),如:



        問題:如何在Kibana中通過選擇不同的系統(tǒng)日志模塊來查看數(shù)據(jù)


        一般在Kibana中顯示的日志數(shù)據(jù)混合了來自不同系統(tǒng)模塊的數(shù)據(jù),那么如何來選擇或者過濾只查看指定的系統(tǒng)模塊的日志數(shù)據(jù)?


        解決方案:新增標(biāo)識(shí)不同系統(tǒng)模塊的字段或根據(jù)不同系統(tǒng)模塊建ES索引


        1、新增標(biāo)識(shí)不同系統(tǒng)模塊的字段,然后在Kibana中可以根據(jù)該字段來過濾查詢不同模塊的數(shù)據(jù)


        這里以第二種部署架構(gòu)講解,在Filebeat中的配置內(nèi)容為:



        通過新增:log_from字段來標(biāo)識(shí)不同的系統(tǒng)模塊日志


        2、根據(jù)不同的系統(tǒng)模塊配置對應(yīng)的ES索引,然后在Kibana中創(chuàng)建對應(yīng)的索引模式匹配,即可在頁面通過索引模式下拉框選擇不同的系統(tǒng)模塊數(shù)據(jù)。


        這里以第二種部署架構(gòu)講解,分為兩步:


        ① 在Filebeat中的配置內(nèi)容為:



        通過document_type來標(biāo)識(shí)不同系統(tǒng)模塊


        ② 修改Logstash中output的配置內(nèi)容為:


        在output中增加index屬性,%{type}表示按不同的document_type值建ES索引


        四、總結(jié)


        本文主要介紹了ELK實(shí)時(shí)日志分析的三種部署架構(gòu),以及不同架構(gòu)所能解決的問題,這三種架構(gòu)中第二種部署方式是時(shí)下最流行也是最常用的部署方式,最后介紹了ELK作在日志分析中的一些問題與解決方案,說在最后,ELK不僅僅可以用來作為分布式日志數(shù)據(jù)集中式查詢和管理,還可以用來作為項(xiàng)目應(yīng)用以及服務(wù)器資源監(jiān)控等場景,更多內(nèi)容請看官網(wǎng)。


        感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。 
            · END ·
        最后,關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全。



        正文結(jié)束


        推薦閱讀 ↓↓↓

        1.Alibaba開源內(nèi)網(wǎng)高并發(fā)編程手冊.pdf

        2.2T架構(gòu)師學(xué)習(xí)資料干貨分享

        3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

        4.程序員一般可以從什么平臺(tái)接私活?                                                  

        瀏覽 70
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            hd性videos意大利精品电影 | 国产美女精品在线 | av中文字 | 一本大道久久久综合精品 | 亚洲日日夜夜 | 欧美性xxxxx极品少妇 | 国产乱婬AAAA片视频软件 | 邻居公与我做爰 | 午夜激情在线看 | 午夜成人小视频 |