1,傳統日誌採集存在哪些問題?
2, 分佈式+日誌採集有哪些方案?
3,ElasticSearch+logstash+Kibana作用
4,ELK爲何需要結合kafka
5,基於docker構建elk
6,springboot項目整合elk實現異步日誌 採集
傳統日誌採集存在哪些缺點
在傳統項目中,如果在生產環境,有多臺不同的服務器集羣,如果生產環境需要通過日誌定位項目的bug、的話,需要在每臺節點上使用傳統的命令方式查詢,這樣效率非常低,傳統方式服務器搜索日誌命令。
Elk E=
ElasticSeach(存儲日誌信息)
l Logstash(搬運工)
K Kibana連接到我們ElasticSeach圖形化界面查詢日誌
Elk+kafka
ELk 採集日誌的原理。
1,需要在每個服務器上安裝Logstash
2,logstash需要配置固定讀取某個日誌文件
3,logstash將我們的日誌文件格式轉爲json的格式輸出到es中。
4,開發者使用kafka 連接到ElasticSearch 查詢存儲日誌內容
爲什麼需要將日誌存儲在elasticSearch,而不是mysql
elasticsearch 底層使用倒排索引 搜索日誌效率。
爲什麼需要使用elk+kafka
1,如果單純的使用elk的話, 服務器節點擴容 需要每個服務器上安裝我們的logstash步驟比較冗餘。
2.Logstash 讀取本地日誌文件,可能會對本地的磁盤io性能會有一定的影響。
elk+kafka原理:
1,springboot項目會基於aop的方式 攔截系統中的日誌。
日誌(錯誤日誌)
錯誤日誌:異常通知
請求與響應日誌信息: 前置或者環繞通知。
2,將該日誌投遞到我們kafka中, 注意該過程一定要是異步的日誌。
3.logstash數據源---kafka訂閱到kafka 的主題 獲取日誌消息內容。
4,將日誌消息內容輸出到es中存放。
開發者使用Kibana連接到ElasticSeach 查詢存儲日誌內容
ELK=ElasticSeach+Logstash+Kibana,日誌收集原理如下所示。
1、每臺服務器集羣節點安裝Logstash日誌收集系統插件
2、每臺服務器節點將日誌輸入到Logstash中
3、Logstash將該日誌格式化爲json格式,根據每天創建不同的索引,輸出到ElasticSearch中
4、瀏覽器使用安裝Kibana查詢日誌信息
該方案的缺點: 就是每個服務器節點上都會安裝Logstash座讀寫日誌IO操作,可能性能不是很好,
Elk+kafka環境的構建
ElasticSeach(存儲日誌信息)
l Logstash(搬運工)
K Kibana連接到我們ElasticSeach圖形化界面查詢日誌
Elk+kafka
kafka依賴於zk。
Zk環境
Kafka環境
ElasticSeach+Kibana
Logstash 配置訂閱kafka主題
Springboot項目aop攔截日誌
構建kafka環境
Win安裝kafka
安裝前環境要求
需要有jdk環境
先安裝zk環境
- 先安裝zk 解壓zookeeper-3.4.14
- 進入到 \conf 修改:zoo_sample.cfg 爲 zoo.cfg
修改配置文件:dataDir=F:/path/kafkaandzk/zookeeper-3.4.14/data - 進入到bin目錄:zookeeper-3.4.14\bin
- zkServer.cmd
先安裝kafka環境
- 解壓kafka安裝包
- kafka_2.13-2.5\kafka_2.13-2.5.0
啓動和停止kafka
.\bin\windows\kafka-server-start.bat .\config\server.properties
修改server.properties
log.dirs=F:/path/kafkaandzk/kafka/kafka-logs
注意解壓文件名稱:去除 版本名稱,不然再啓動的時候有可能
構建es環境
elk+kafka
docker安裝ES & Kibana
安裝elasticsearch
- 下載ES鏡像問題
docker pull elasticsearch - 運行ES
docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch - 測試運行結果
http://192.168.163.129:9200/
注意:-p 5601:5601 是kibana的端口地址 (我這裏kibana的container共用elasticsearch的網絡,所以這樣設置
安裝Kibana
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:elasticsearch kibana
測試運行結果
http://192.168.163.129:5601/app/kibana#
logstash 同步到 elasticsearch
Logstash是一個開源數據收集引擎,具有實時管道功能。Logstash可以動態地將來自不同數據源的數據統一起來,並將數據標準化到你所選擇的目的地
Logstash輸入數據源:
- 本地文件
- Kafka
- Redis/mysql
Logstash輸出數據源: - Es
- Mongdb
- Redis
- Mysql
1.上傳logstash-6.4.3.tar.gz到服務中
2.tar –zxvf logstash-6.4.3.tar.gz
3.cd logstash-6.4.3
- bin/logstash-plugin install logstash-input-kafka
- bin/logstash-plugin install logstash-output-elasticsearch
logstash-plugin.bat install logstash-output-elasticsearch
Kafka logstash配置文件
input {
kafka {
bootstrap_servers => "192.168.18.224:9092"
topics => "mayikt-log"
}
}
filter {
Only matched data are send to output.
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "192.168.163.129:9200" #ElasticSearch host, can be array.
index => "my_logs" #The index to write data to.
}
}
啓動 ./logstash -f ../config/kafka.conf
Elk整合實際項目
實際項目基於aop攔截日誌,將請求日誌寫入到kafka中。