分佈式日誌收集原理

一、傳統系統日誌收集的問題

 

在傳統項目中,如果在生產環境中,有多臺不同的服務器集羣,如果生產環境需要通過日誌定位項目的Bug的話,需要在每臺節點上使用傳統的命令方式查詢,這樣效率非常底下。

通常,日誌被分散在儲存不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有服務器上的日誌收集彙總。

集中化管理日誌後,日誌的統計和檢索又成爲一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。

命令方式:

tail -n 300 myes.log | grep 'node-1'

tail -100f myes.log

 

二、ELK原理

 

L:會將每天的日誌文件生成一個索引,以此區分

 

模塊安裝L -> 通過L收集本地日誌 -> 轉發到ES JSON格式 -> Kibana 展示

 

ELK分佈式日誌收集系統介紹

 

ElasticSearch是一個基於Lucene的開源分佈式搜索服務器。它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

Logstash是一個完全開源的工具,它可以對你的日誌進行收集、過濾、分析,支持大量的數據獲取方法,並將其存儲供以後使用(如搜索)。說到搜索,logstash帶有一個web界面,搜索和展示所有日誌。一般工作方式爲c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。 

Kibana是一個基於瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費的工具,Kibana可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您彙總、分析和搜索重要數據日誌

 

ELK分佈式日誌收集原理

1、每臺服務器集羣節點安裝Logstash日誌收集系統插件

2、每臺服務器節點將日誌輸入到Logstash中

3、Logstash將該日誌格式化爲json格式,根據每天創建不同的索引,輸出到ElasticSearch中

4、瀏覽器使用安裝Kibana查詢日誌信息

環境安裝

1、安裝ElasticSearch

2、安裝Logstash

3、 安裝Kibana

 

三、Logstash介紹

Logstash是一個完全開源的工具,它可以對你的日誌進行收集、過濾、分析,支持大量的數據獲取方法,並將其存儲供以後使用(如搜索)。說到搜索,logstash帶有一個web界面,搜索和展示所有日誌。一般工作方式爲c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。

核心流程:Logstash事件處理有三個階段:inputs → filters → outputs。是一個接收,處理,轉發日誌的工具。支持系統日誌,webserver日誌,錯誤日誌,應用日誌,總之包括所有可以拋出來的日誌類型。

 

Logstash環境安裝

1、上傳logstash安裝包(資料)

2、解壓tar –zxvf logstash-6.4.3.tar.gz

3、在config目錄下放入mayikt01.conf 讀入並且讀出日誌信息

 

日誌收集模式

 

 

Logstash讀取本地文件地址,實時存放在ES中,以每天格式創建不同的索引進行存放。

 

Kibana 平臺查詢 GET /es-2018.11.27/_search

 

四、ELK+Kafka實現分佈式日誌收集原理

使用SpringAop進行日誌收集,然後通過kafka將日誌發送給logstash,logstash再將日誌寫入elasticsearch,這樣elasticsearch就有了日誌數據了,最後,則使用kibana將存放在elasticsearch中的日誌數據顯示出來,並且可以做實時的數據圖表分析等等。

 

五、ELK+Kafka實現分佈式日誌收集職責

logstash做日誌對接,接受應用系統的log,然後將其寫入到elasticsearch中,logstash可以支持N種log渠道,kafka渠道寫進來的、和log目錄對接的方式、也可以對reids中的log數據進行監控讀取,等等。

elasticsearch存儲日誌數據,方便的擴展特效,可以存儲足夠多的日誌數據。

kibana則是對存放在elasticsearch中的log數據進行:數據展現、報表展現,並且是實時的。

 

六、傳統ELK實現思路圖

缺點:實時性不強。logstash冗餘。如果服務器增加則logstash也需要增加。

1. logstash太多了,擴展不好。

2. 讀取IO文件,可能會產生日誌丟失

3. 不是實時性

 

七、ELK + Kafka實現

 

八、思考問題

1.哪些日誌信息需要輸入logstash

(error級別)

2.AOP 異常通知  服務與服務之間如何區分日誌索引文件(服務名稱) hotel- 2019/10/01 11:05 order- 2019/10/01 11:05

3.在分佈式日誌收集中,相同的服務集羣的話是不需要區分日誌索引文件。

4.目的爲了 統一管理相同節點日誌我信息。

5.相同的服務集羣的話,是不需要區分日誌索引文件 搜索日誌的時候,如何定位服務器節點信息?

 

不需要,只需要在集羣中日誌信息指定IP就行了,分佈式日誌收集就是將多個集羣收集在一起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章