elk 已經成為目前最流行的集中式日誌解決方案,它主要是由beats、logstash、elasticsearch、kibana等元件組成,來共同完成實時日誌的收集,儲存,展示等一站式的解決方案。本文將會介紹elk常見的架構以及相關問題解決。
filebeat:filebeat是一款輕量級,占用服務資源非常少的資料收集引擎,它是elk家族的新成員,可以代替logstash作為在應用伺服器端的日誌收集引擎,支援將收集到的資料輸出到kafka,redis等佇列。
logstash:資料收集引擎,相較於filebeat比較重量級,但它整合了大量的外掛程式,支援豐富的資料來源收集,對收集的資料可以過濾,分析,格式化日誌格式。
elasticsearch:分布式資料搜尋引擎,基於apache
lucene實現,可集群,提供資料的集中式儲存,分析,以及強大的資料搜尋和聚合功能。
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 將恢復初始速度並繼續傳送資料。
問題:如何實現日誌的多行合併功能?
系統應用中的日誌一般都是以特定格式進行列印的,屬於同一條日誌的資料可能分多行進行列印,那麼在使用elk收集日誌的時候就需要將屬於同一條日誌的多行資料進行合併。
解決方案:使用filebeat或logstash中的multiline多行合併外掛程式來實現
在使用multiline多行合併外掛程式的時候需要注意,不同的elk部署架構可能multiline的使用方式也不同,如果是本文的第一種部署架構,那麼multiline需要在logstash中配置使用,如果是第二種部署架構,那麼multiline需要在filebeat中配置使用,無需再在logstash中配置multiline。
1、multiline在filebeat中的配置方式:
如:pattern: '['
negate: true
match: after
該配置表示將不匹配pattern模式的行合併到上一行的末尾
2、multiline在logstash中的配置方式
(1)logstash中配置的what屬性值為previous,相當於filebeat中的after,logstash中配置的what屬性值為next,相當於filebeat中的before。
(2)pattern => "%s*]" 中的loglevel是logstash預製的正則匹配模式,預製的還有好多常用的正則匹配模式,詳細請看:
問題:如何將kibana中顯示日誌的時間字段替換為日誌資訊中的時間?
預設情況下,我們在kibana中檢視的時間欄位與日誌資訊中的時間不一致,因為預設的時間字段值是日誌收集時的當前時間,所以需要將該字段的時間替換為日誌資訊中的時間。
解決方案:使用grok分詞外掛程式與date時間格式化外掛程式來實現
在logstash的配置檔案的過濾器中配置grok分詞外掛程式與date時間格式化外掛程式,如:
如要匹配的日誌格式為:「debug[defaultbeandefinitiondocumentreader:106] loading bean definitions」,解析出該日誌的時間欄位的方式有:
① 通過引入寫好的表示式檔案,如表示式檔案為customer_patterns,內容為:
customer_time %%%s+%
注:內容格式為:[自定義表示式名稱] [正規表示式]
然後logstash中就可以這樣引用:
② 以配置項的方式,規則為:(?《自定義表示式名稱》正則匹配規則),如:
問題:如何在kibana中通過選擇不同的系統日誌模組來檢視資料
一般在kibana中顯示的日誌資料混合了來自不同系統模組的資料,那麼如何來選擇或者過濾只檢視指定的系統模組的日誌資料?
解決方案:新增標識不同系統模組的字段或根據不同系統模組建es索引
1、新增標識不同系統模組的字段,然後在kibana中可以根據該字段來過濾查詢不同模組的資料
這裡以第二種部署架構講解,在filebeat中的配置內容為:
通過新增:log_from欄位來標識不同的系統模組日誌
2、根據不同的系統模組配置對應的es索引,然後在kibana中建立對應的索引模式匹配,即可在頁面通過索引模式下拉框選擇不同的系統模組資料。
這裡以第二種部署架構講解,分為兩步:
① 在filebeat中的配置內容為:
通過document_type來標識不同系統模組
② 修改logstash中output的配置內容為:
在output中增加index屬性,%表示按不同的document_type值建es索引
本文主要介紹了elk實時日誌分析的三種部署架構,以及不同架構所能解決的問題,這三種架構中第二種部署方式是時下最流行也是最常用的部署方式,最後介紹了elk作在日誌分析中的一些問題與解決方案,說在最後,elk不僅僅可以用來作為分布式日誌資料集中式查詢和管理,還可以用來作為專案應用以及伺服器資源監控等場景
分布式事務解決方案
一 結合mq訊息中介軟體實現的可靠訊息最終一致性 二 tcc補償性事務解決 三 最大努力通知型方案 第一種方案 可靠訊息最終一致性,需要業務系統結合mq訊息中介軟體實現,在實現過程中需要保證訊息的成功傳送及成功消費。即需要通過業務系統控制mq的訊息狀態 第二種方案 tcc補償性,分為三個階段tryi...
分布式事務解決方案
當資料庫單錶一年產生的資料超過1000w,那麼就要考慮分庫分表,具體分庫分表的原理在此不做解釋,以後有空詳細說,簡單的說就是原來的乙個資料庫變成了多個資料庫。這時候,如果乙個操作既訪問01庫,又訪問02庫,而且要保證資料的一致性,那麼就要用到分布式事務。所謂的soa化,就是業務的服務化。比如原來單機...
分布式事務解決方案
由於資料量的巨大,大部分web應用都需要部署很多個資料庫例項。這樣,有些使用者操作就可能需要去修改多個資料庫例項中的資料。傳統的解決方法是使用分布式事務保證資料的全域性一致性,經典的方法是使用兩階段提交協議。長期以來,分布式事務提供的優雅的全域性acid保證麻醉了應用開發者的心靈,很多人都不敢越雷池...