ELK 已經成為目前最受歡迎的集中式日誌解決方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等組件組成,來共同完成實時日誌的收集,存儲,展示等一站式的解決方案。本篇文章主要為大家介紹了關於分散式即時日誌分析解決方案ELK 部署架構,有需要的朋友可以看一下
課程推薦→:《 elasticsearch全文搜尋實戰》(實戰影片)
一、概述
ELK 已經成為目前最受歡迎的集中式日誌解決方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等組件組成,來共同完成實時日誌的收集,存儲,展示等一站式的解決方案。本文將會介紹ELK常見的架構以及相關問題解決。
Filebeat:Filebeat是一款輕量級,佔用服務資源非常少的資料收集引擎,它是ELK家族的新成員,可以取代Logstash作為在應用伺服器端的日誌收集引擎,支援將收集到的資料輸出到Kafka,Redis等隊列。
Logstash:資料收集引擎,相較於Filebeat比較重量級,但它整合了大量的插件,支援豐富的資料來源收集,對收集的資料可以過濾,分析,格式化日誌格式。
Elasticsearch:分散式資料搜尋引擎,基於Apache
Lucene實現,可集群,提供資料的集中式存儲,分析,以及強大的資料搜尋和聚合功能。Kibana:數據的視覺化平台,透過該web平台可以即時的查看 Elasticsearch 中的相關數據,並提供了豐富的圖表統計功能。
二、ELK常見部署架構
2.1、Logstash作為日誌收集器
這種架構是比較原始的部署架構,在各應用伺服器端分別部署一個Logstash組件,作為日誌收集器,然後將Logstash收集到的資料過濾、分析、格式化處理後發送至Elasticsearch存儲,最後使用Kibana進行可視化展示,這種架構不足的是:Logstash比較耗伺服器資源,所以會增加應用伺服器端的負載壓力。
2.2、Filebeat作為日誌收集器
該架構與第一種架構唯一不同的是:應用端日誌收集器換成了Filebeat,Filebeat輕量,佔用伺服器資源少,所以使用Filebeat作為應用伺服器端的日誌收集器,一般Filebeat會搭配Logstash一起使用,這種部署方式也是目前最常用的架構。
2.3、引入快取佇列的部署架構
該架構在第二種架構的基礎上引入了Kafka訊息佇列(還可以是其他訊息佇列),將Filebeat收集到的資料傳送至Kafka,然後在透過Logstasth讀取Kafka中的數據,這種架構主要是解決大數據量下的日誌收集方案,使用快取佇列主要是解決資料安全與均衡Logstash與Elasticsearch負載壓力。
2.4、以上三種架構的總結
第一種部署架構由於資源佔用問題,現已很少使用,目前使用最多的是第二種部署架構,至於第三種部署架構個人覺得沒有必要引入訊息佇列,除非有其他需求,因為在資料量較大的情況下,Filebeat 使用壓力敏感協定向Logstash 或Elasticsearch 發送資料。如果 Logstash 正在繁忙地處理數據,它會告知 Filebeat 減慢讀取速度。擁塞解決後,Filebeat 將恢復初始速度並繼續發送資料。
推薦一個交流學習群:478030634 裡面會分享一些資深架構師錄製的錄影:有Spring,MyBatis,Netty源碼分析,高並發、高性能、分散式、微服務架構的原理,JVM效能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多:
三、問題及解決方案
問題:如何實現日誌的多行合併功能?
系統應用程式中的日誌一般都是以特定格式進行列印的,屬於同一日誌的資料可能分多行進行列印,那麼在使用ELK收集日誌的時候就需要將屬於同一日誌的多行數據進行合併。
解決方案:使用Filebeat或Logstash中的multiline多行合併外掛程式來實作
在使用multiline多行合併外掛程式的時候需要注意,不同的ELK部署架構可能multiline的使用方式也不同,如果是本文的第一種部署架構,那麼multiline需要在Logstash中配置使用,如果是第二種部署架構,那麼multiline需要在Filebeat中配置使用,無需再在Logstash中配置multiline。
1、Filebeat中multiline的設定方式:
pattern :正規表示式
negate:預設為false,表示符合pattern的行合併到上一行;true表示不符合pattern的行合併到上一行
#match:after表示合併到上一行的結尾,before表示合併到上一行的行首
如:
pattern: '['
negate: true
match: after
該配置表示將不符合pattern模式的行合併到上一行的結尾
2、multiline在Logstash中的配置方式
(1)Logstash中配置的what屬性值為previous,相當於Filebeat中的after,Logstash中配置的what屬性值為next,相當於Filebeat中的before。
(2)pattern => "%{LOGLEVEL}s*]" 中的LOGLEVEL是Logstash預製的正則匹配模式,預製的還有好多常用的正則匹配模式,詳細請看:https://github .com/logstash-p...
問題:如何將Kibana中顯示日誌的時間欄位替換為日誌資訊中的時間?
預設情況下,我們在Kibana中查看的時間欄位與日誌資訊中的時間不一致,因為預設的時間欄位值是日誌收集時的當前時間,所以需要將該欄位的時間替換為日誌資訊中的時間。
解決方案:使用grok分詞外掛程式與date時間格式化外掛程式來實作
在Logstash的設定檔的過濾器中設定grok分詞外掛程式與date時間格式化插件,如:
如要匹配的日誌格式為:“DEBUG[DefaultBeanDefinitionDocumentReader:106] Loading bean definitions”,解析出該日誌的時間字段的方式有:
① 透過引入寫好的表達式文件,如表達式文件為customer_patterns,內容為:
CUSTOMER_TIME %{YEAR}%{MONTHNUM}%{MONTHDAY}s+ %{TIME}
註:內容格式為:[自訂表達式名稱] [正規表示式]
然後logstash中就可以這樣引用:
##② 以設定項目的方式,規則為:(?正規符合規則),如:
問題:如何在Kibana中透過選擇不同的系統日誌模組來查看資料
解決方案:新增標識不同系統模組的字段或根據不同系統模組建立ES索引
1、新增標識不同系統模組的字段,然後在Kibana中可以根據該字段來過濾查詢不同模組的資料這裡以第二種部署架構講解,在Filebeat中的配置內容為:
# #透過新增:log_from欄位來識別不同的系統模組日誌
四、總結
本文主要介紹了ELK即時日誌分析的三種部署架構,以及不同架構所能解決的問題,這三種架構中第二種部署方式是時下最受歡迎也是最常用的部署方式,最後介紹了ELK作在日誌分析中的一些問題與解決方案,說在最後,ELK不僅可以用來作為分散式日誌資料集中式查詢和管理,還可以用來作為專案應用以及伺服器資源監控等場景。
以上是分散式即時日誌分析解決方案 ELK 部署架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版
好用的JavaScript開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。