91 分佈式ELK 日誌採集系統 Only matched data are send to output.

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環境

  1. 先安裝zk 解壓zookeeper-3.4.14
  2. 進入到 \conf 修改:zoo_sample.cfg 爲 zoo.cfg
    修改配置文件:dataDir=F:/path/kafkaandzk/zookeeper-3.4.14/data
  3. 進入到bin目錄:zookeeper-3.4.14\bin
  4. zkServer.cmd

先安裝kafka環境

  1. 解壓kafka安裝包
  2. 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

  1. 下載ES鏡像問題
    docker pull elasticsearch
  2. 運行ES
    docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch
  3. 測試運行結果
    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輸入數據源:

  1. 本地文件
  2. Kafka
  3. Redis/mysql
    Logstash輸出數據源:
  4. Es
  5. Mongdb
  6. Redis
  7. Mysql

1.上傳logstash-6.4.3.tar.gz到服務中
2.tar –zxvf logstash-6.4.3.tar.gz
3.cd logstash-6.4.3

  1. bin/logstash-plugin install logstash-input-kafka
  2. 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中。

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