0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分布式實時日志:ELK的部署架構方案

馬哥Linux運維 ? 來源:oschina ? 2023-01-08 09:56 ? 次閱讀

一、概述

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

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

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

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

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

二、ELK常見部署架構

2.1 Logstash作為日志收集器

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

Logstash 比較耗服務器資源,所以會增加應用服務器端的負載壓力。

dd3db814-8e8b-11ed-bfe3-dac502259ad0.png

2.2 Filebeat作為日志收集器

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

dd64a172-8e8b-11ed-bfe3-dac502259ad0.png

2.3 引入緩存隊列的部署架構

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

dd8ed262-8e8b-11ed-bfe3-dac502259ad0.png

2.4 以上三種架構的總結

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

三、問題及解決方案

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

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

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

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

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

dda9efe8-8e8b-11ed-bfe3-dac502259ad0.png

  • pattern:正則表達式;
  • negate:默認為false,表示匹配pattern的行合并到上一行;true表示不匹配pattern的行合并到上一行;
  • match:after表示合并到上一行的末尾,before表示合并到上一行的行首。

如:

pattern: ‘[‘
negate: true
match: after

該配置表示將不匹配pattern模式的行合并到上一行的末尾2、multiline在Logstash中的配置方式

ddcb82f2-8e8b-11ed-bfe3-dac502259ad0.png

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

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

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

默認情況下,我們在 Kibana 中查看的時間字段與日志信息中的時間不一致,因為默認的時間字段值是日志收集時的當前時間,所以需要將該字段的時間替換為日志信息中的時間。

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

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

ddea7cfc-8e8b-11ed-bfe3-dac502259ad0.png

如要匹配的日志格式為:“[DEBUG][20170811 1031,359][DefaultBeanDefinitionDocumentReader:106] Loading bean definitions”,解析出該日志的時間字段的方式有:① 通過引入寫好的表達式文件,如表達式文件為customer_patterns,內容為:
CUSTOMER_TIME %{YEAR}%{MONTHNUM}%{MONTHDAY}s+%{TIME}

注:內容格式為:[自定義表達式名稱] [正則表達式]

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

de11cae6-8e8b-11ed-bfe3-dac502259ad0.png

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

de2083b0-8e8b-11ed-bfe3-dac502259ad0.png

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

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

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

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

這里以第二種部署架構講解,在 Filebeat 中的配置內容為:

de444e8a-8e8b-11ed-bfe3-dac502259ad0.png

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

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

這里以第二種部署架構講解,分為兩步:

① 在Filebeat中的配置內容為:

de6e244e-8e8b-11ed-bfe3-dac502259ad0.png

通過document_type來標識不同系統(tǒng)模塊

② 修改Logstash中output的配置內容為:

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

四、總結

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    8700

    瀏覽量

    84528
  • 日志
    +關注

    關注

    0

    文章

    129

    瀏覽量

    10593
  • 收集器
    +關注

    關注

    0

    文章

    30

    瀏覽量

    3112

原文標題:分布式實時日志:ELK 的部署架構方案

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何長時間抓取DTU設備實時日志?

    如何長時間抓取DTU設備實時日志?
    發(fā)表于 07-26 06:31

    InDTU300系列產(chǎn)品如何輸出實時日志?

    “保存配置”,提示是否重啟時,選擇不重啟。點擊維護~實時日志。 點擊開始接收,稍等幾秒會看到模塊輸出的實時日志,故障復現(xiàn)后,依次點擊停止接收~導出日志,將日志導出即可。 如果只想監(jiān)視I
    發(fā)表于 07-25 06:05

    分布式智慧終端在水利工程建設中的實時監(jiān)控解決方案

    訊維分布式智慧終端在水利工程建設中的實時監(jiān)控解決方案,旨在通過集成先進的監(jiān)控技術和智能化管理手段,實現(xiàn)對水利工程建設過程的全面、實時、高效監(jiān)控。該
    的頭像 發(fā)表于 04-08 15:16 ?242次閱讀

    分布式光伏電力監(jiān)控解決方案

    分布式光伏電力監(jiān)控解決方案
    的頭像 發(fā)表于 01-14 08:07 ?343次閱讀
    <b class='flag-5'>分布式</b>光伏電力監(jiān)控解決<b class='flag-5'>方案</b>

    什么是分布式架構?

    分布式架構是指將一個系統(tǒng)或應用拆分成多個獨立的節(jié)點,這些節(jié)點通過網(wǎng)絡連接進行通信和協(xié)作,以實現(xiàn)共同完成任務的一種架構模式。這種架構模式旨在提高系統(tǒng)的可擴展性、可靠性和性能表現(xiàn)。 一、
    的頭像 發(fā)表于 01-12 15:04 ?978次閱讀
    什么是<b class='flag-5'>分布式</b><b class='flag-5'>架構</b>?

    分布式節(jié)點服務器是什么?

    部署在不同的服務器上進行處理和存儲,以實現(xiàn)負載均衡和容錯處理。這種架構模式旨在提高系統(tǒng)的可擴展性、可靠性和性能表現(xiàn),以滿足大規(guī)模數(shù)據(jù)處理、復雜任務處理等需求。 分布式節(jié)點服務器的實現(xiàn)方式有多種,其中最常用的
    的頭像 發(fā)表于 01-12 15:04 ?565次閱讀
    <b class='flag-5'>分布式</b>節(jié)點服務器是什么?

    redis分布式鎖可能出現(xiàn)的問題及解決方案

    Redis分布式鎖是一種常見的解決分布式系統(tǒng)中并發(fā)問題的方案。雖然Redis分布式鎖具有許多優(yōu)點,但也存在一些潛在的問題需要注意。本文將詳細介紹Redis
    的頭像 發(fā)表于 12-04 11:29 ?795次閱讀

    springcloud 分布式事務解決方案實例

    么都執(zhí)行成功,要么都執(zhí)行失敗。本文將介紹如何使用Spring Cloud來實現(xiàn)分布式事務。 在分布式系統(tǒng)中,使用數(shù)據(jù)庫事務來保證數(shù)據(jù)一致性是常見的做法。Spring Cloud通過集成各種分布式事務解決
    的頭像 發(fā)表于 12-03 16:32 ?917次閱讀

    Java手寫分布式鎖的實現(xiàn)

    隨著互聯(lián)網(wǎng)業(yè)務的發(fā)展,原本單機部署的系統(tǒng)演化成如今的分布式集群系統(tǒng)后,由于分布式系統(tǒng)多線程
    的頭像 發(fā)表于 11-17 15:51 ?437次閱讀
    Java手寫<b class='flag-5'>分布式</b>鎖的實現(xiàn)

    redis分布式鎖死鎖處理方案

    引言: 隨著分布式系統(tǒng)的廣泛應用,尤其是在大規(guī)模并發(fā)操作下,對并發(fā)控制的需求越來越高。Redis分布式鎖作為一種常見的分布式鎖實現(xiàn)方案,由于其高性能和可靠性備受青睞。然而,在多線程或多
    的頭像 發(fā)表于 11-16 11:44 ?1430次閱讀

    什么是分布式直流電源?分布式直流電源的范圍 分布式直流電的特性

    供給終端設備使用。它在分布式能源系統(tǒng)中起著重要的作用,具有許多獨特的特性和廣泛的應用范圍。 首先,我們來談談分布式直流電源的廣泛應用范圍。隨著可再生能源的快速發(fā)展,如太陽能光伏和風能等,分布式能源系統(tǒng)得以提供更加可持續(xù)的電力供應
    的頭像 發(fā)表于 11-16 11:17 ?895次閱讀

    springcloud分布式事務解決方案

    Spring Cloud是一套用于構建分布式系統(tǒng)的開源框架,它提供了一系列組件和工具,可以幫助開發(fā)人員快速構建和管理基于微服務架構的應用程序。在分布式系統(tǒng)中,事務的處理是一個重要的問題,因為在
    的頭像 發(fā)表于 11-16 11:03 ?1883次閱讀

    springclould分布式教程

    Spring Cloud是一個基于Spring Boot的分布式系統(tǒng)開發(fā)工具,它提供了一系列的分布式系統(tǒng)解決方案,可以幫助開發(fā)者快速構建和部署分布式
    的頭像 發(fā)表于 11-16 10:59 ?383次閱讀

    spring分布式框架有哪些

    的Spring分布式框架。 Spring Cloud Spring Cloud是基于Spring Boot的分布式開發(fā)工具包。它提供了多個子項目,包括服務注冊與發(fā)現(xiàn)、客戶端負載均衡、斷路器、網(wǎng)關等。Spring Cloud可以幫助開發(fā)人員快速構建基于微服務
    的頭像 發(fā)表于 11-16 10:58 ?649次閱讀

    什么是分布式鎖 Redis的五種分布式方案

    本地加鎖的方式在分布式的場景下不適用,所以本文我們來探討下如何引入分布式鎖解決本地鎖的問題。本篇所有代碼和業(yè)務基于我的開源項目 PassJava。
    發(fā)表于 10-23 11:35 ?876次閱讀
    什么是<b class='flag-5'>分布式</b>鎖 Redis的五種<b class='flag-5'>分布式</b>鎖<b class='flag-5'>方案</b>