1. 程式人生 > >《ElasticSearch6.x實戰教程》之實戰ELK日誌分析系統、多資料來源同步

《ElasticSearch6.x實戰教程》之實戰ELK日誌分析系統、多資料來源同步

第十章-實戰:ELK日誌分析系統

ElasticSearch、Logstash、Kibana簡稱ELK系統,主要用於日誌的收集與分析。

一個完整的大型分散式系統,會有很多與業務不相關的系統,其中日誌系統是不可或缺的一個,集中式日誌系統需要收集來自不同服務的日誌,對它進行集中管理儲存以及分析。ELK就是這樣一個系統。

ElasticSearch是一個開源分散式搜尋引擎,在ELK系統中提供對資料的搜尋、分析、儲存。

Logstash主要用於日誌的收集,在ELK系統中作為日誌資料來源的傳輸。

Kibana則是一個視覺化管理工具,在ELK系統中起視覺化分析檢視的作用。

安裝部署ELK

ElasticSearch

ElasticSearch的安裝在"準備工作"中已經說明,這裡不再贅述。

Kibana

Kibana6.3.2下載地址(Linux、mac OS、Windows對應不同的版本):https://www.elastic.co/cn/downloads/past-releases/kibana-6-3-2。Logstatsh歷史版本下載頁面:https://www.elastic.co/cn/downloads/past-releases#kibana。

mac OS

  1. 通過命令tar -zxvf kibana-6.3.2-darwin-x86_64.tar.gz解壓到當前使用者目錄(或者其它位置)。
  2. 解壓後進入kibana-6.3.2-darwin-x86_64目錄,執行vim config/kibana.yml命令,修改配置(注意yml格式的配置檔案冒號必須有英文空格。
server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"
logging.dest: /Users/yulinfeng/log/kibana.log
  1. 執行./bin/kibana命令啟動Kibana。

啟動完成,開啟瀏覽器輸入localhost:5061

Linux

安裝過程同mac OS。

Logstash

Logstash6.3.2下載地址(Linux、mac OS、Windows通用,下載zip包即可):https://www.elastic.co/cn/downloads/past-releases/logstash-6-3-2。Logstash歷史版本下載頁面:https://www.elastic.co/cn/downloads/past-releases#logstash。

macOS

  1. 解壓logstash-6.3.2.zip 解壓到當前使用者目錄(或者其它位置)
  2. 解壓後進入logstash-6.3.2目錄,執行vim logstash.conf配置檔案。
input {
  tcp {
    mode => "server"
    host => "127.0.0.1"
    port => 4568
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "log"
    document_type => "log4j2"
  }
}

這個配置的含義為,Logstash的日誌採集來源是4568埠(後面我們會通過程式程式碼通過log4j向埠4568列印日誌)。Logstash的日誌向ElasticSearch輸出。

  1. 執行./bin/logstash -f logstash.conf命令啟動Logstash。

Linux

安裝過程同mac OS。

日誌源DEMO

在部署Logstash時,我們定義了日誌的來源是埠4568,接下來我們模擬一個程式利用log4j2通過socket連線將日誌傳送到4568埠,DEMO完整程式碼地址:https://github.com/yu-linfeng/elasticsearch6.x_tutorial/tree/master/code/logstash。

DEMO的邏輯只有列印日誌,主要在log4j2.xml需要配置socket方式列印。

......
<Socket name="logstash-tcp" host="localhost" port="4568" protocol="TCP">
  <PatternLayout pattern="${LOG_PATTERN}" />
</Socket>
......

詳細程式碼直接檢視原始碼https://github.com/yu-linfeng/elasticsearch6.x_tutorial/tree/master/code/logstash。

啟動Spring Boot程式後,控制檯開始輸出日誌,此時返回瀏覽器檢視localhost:5061,點選Management選單,Index pattern中輸入"log"(即定義的索引Index),一直下一步即可。

配置完成後,點選Discover選單,就可看到程式DEMO列印的日誌,並可進行搜尋。現在,就請盡情探索吧。

第十一章-實戰:多資料來源同步

通常情況下,使用ES的地方一般都會使用MySQL,將MySQL作為資料來源,ES作為前臺搜尋。寫入一條資料到MySQL時,也需要同時寫入ES中。此時寫入ES就有兩種方式:一種同步的方式,另一種非同步的方式。寫入MySQL後同步寫入ES,好處是實時更新,插入成功即可搜尋,缺點也很明顯,事務的問題(MySQL成功,ES失敗的情況應提供一種保障機制達到資料一致性),效能的問題(一條資料需要同時插入MySQL和ES成功後才能返回結果)。另一種情況是在寫入MySQL成功後,非同步寫入ES,優點是資料一致性問題比較容易保證,效能的問題也不必等待過久,缺點也很明顯,插入MySQL成功後,由於非同步的原因,並不能立刻從ES搜尋出結果。

寫入MySQL成功,即資料庫中資料新增了一條資料,利用MySQL的binlog技術能監測到資料的變化,從而傳送一條MQ寫入到ES中。有關binlog可自行搜尋。Canal即是基於資料庫增量日誌解析,提供增量資料訂閱和消費的一款阿里巴巴開源軟體。

在網路上已經有很多資料講解如何通過Canal進行多資料來源同步,這裡不再給出詳細的部署過程,下面是非同步寫入ES的架構圖。


Canal下載地址:https://github.com/alibaba/canal/releases(下載deployer版本)。

關注公眾號:CoderBuff,回覆“es”獲取《ElasticSearch6.x實戰教程》完整版PDF。
這是一個能給程式設計師加buff的公眾號 (CoderBuff)