第十章-實戰:ELK日志分析系統
關注公眾號:CoderBuff,回復“es”獲取《ElasticSearch6.x實戰教程》完整版PDF。
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
- 通過命令
tar -zxvf kibana-6.3.2-darwin-x86_64.tar.gz
解壓到當前用戶目錄(或者其它位置)。 - 解壓后進入
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
- 執行
./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
- 解壓
logstash-6.3.2.zip
解壓到當前用戶目錄(或者其它位置) - 解壓后進入
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輸出。
- 執行
./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。
