ELK+Kafka+Beats實現海量日志收集平台(一)
一、應用場景
利用ELK+Kafka+Beats來實現一個統一日志平台,它是一款針對大規模分布式系統日志的統一采集、
存儲、分析的APM 工具。在分布式系統中,有大量的服務部署在不通的服務器上,客服端的一個請求查
詢,就可能會調用后端多個服務,每個服務之間可能會相互調用或一個服務又會調用其它服務,最終才
將請求的結果返回,匯總展現到前端頁面上。假若這其中的某個環節發生異常,開發運維人員很難准確
定位這個問題到底是由哪個服務調用造成的, 統一日志平台的作用就是追蹤每個請求的完整調用鏈路,
收集調用鏈路上每個服務的性能、日志數據,方便開發運維人員能夠快速發現問題,定位問題。
統一日志平台通過采集模塊、傳輸模塊、存儲模塊、分析模塊實現日志數據的統一采集、存儲和分
析,結構圖如下:
二、實現原理
“ ELK”是三個開源項目的縮寫:Elasticsearch,Logstash和Kibana。也稱ELK Stack,能夠可靠,安
全地從任何來源以任何格式獲取數據,然后進行實時搜索,分析和可視化。Elasticsearch是搜索和分析引
擎,開源的,分布式,RESTful,基於JSON的搜索引擎。它易於使用,可擴展且靈活。Logstash是服務器
端的數據處理管道,它同時從多個源中提取數據,進行轉換,然后將其發送到類似Elasticsearch的“存儲”
中。Kibana允許用戶在Elasticsearch中使用圖表將數據可視化。
Beats 是一個免費且開放的平台,集合了多種單一用途數據采集器。它們從成百上千或成千上萬台機
器和系統向 Logstash 或 Elasticsearch 發送數據。Beats可以將數據直接發送到Elasticsearch或通過 Log-
stash 發送,然后在Logstash中可以進一步處理和過濾數據,然后再在Kibana中進行可視化 。
Beats架構圖如下:
要實現海量日志數據收集分析,首先要解決的問題就是如何處理海量的數據信息,本案例中利用Kafka
結合Beats、Logstash來實現分布式消息隊列平台,其中采用Beats來采集日志數據,也就相當於是Kafka消
息隊列中的Producer來生產消息,然后將消息發送到Kafka(相當於消息隊列的Broker),然后將日志數據
發送到Logstash(扮演消費者-Consumer)進行分析過濾等處理。再把從Logstash中處理之后的數據存儲到
Elasticsearch中,最終通過Kibana來可視化日志數據。
該過程架構圖如下:
其中Beats主要有以下幾種:
Filebeat : 用於收集日志文件
Winlogbeat : 用於收集Windows事件日志
Metricbeat : 用於指標
Packetbeat : 用於收集網絡流量數據
由於我們要采集日志來進行分析管理,所以我們使用Beats中的filebeat來進行日志采集
通過上面的架構思路,大致清楚了日志收集分析顯示到底要干什么事兒?接下來再通過下圖進一步將
該流程具體梳理下
本案例通過編寫一個簡單的SpringBoot工程來生產日志數據,也就是圖中的Log4j2 Appender來作為
filebeats的數據源(filebeats要從哪兒獲取日志文件),使用Log4j2來進行日志記錄而不是Spring自帶的
Slf4j記錄是因為Log4j2的性能要優於Slf4j。圖中把生成的日志分為了all.log、error.log 兩類日志,all.log用
於記錄應用服務產生的所有日志記錄,error.log主要用於記錄warn、error兩類的錯誤日志。error.log日志
只有當應用服務報錯的時候才進行記錄,這樣以便日后進行分析告警。
ELK官方參考文檔
ElasticSearch官網文檔 https://www.elastic.co/cn/elasticsearch/
Logstash官網文檔 https://www.elastic.co/cn/logstash
Kibana 官網文檔 https://www.elastic.co/cn/kibana
Beats 官網文檔 https://www.elastic.co/cn/beats/