架構解讀
架構解讀 : (整個架構從左到右,總共分為5層)
第一層:資料采集層
最左邊的是業務伺服器叢集,上面安裝了filebeat做日志采集,同時把采集的日志分别發送給兩個logstash服務
第二層:資料處理層,資料緩存層
logstash服務把接收到的日志經過格式處理,轉存到本地的kafka broker+zookeeper叢集中
第三層:資料轉發層
單獨的logstash節點會實時去kafka broker叢集拉資料,轉發至ES DataNode
第四層:資料持久化存儲
ES DataNode會把收到的資料,寫磁盤,建索引庫
第五層:資料檢索,資料展示
ES Master + Kibana主要協調ES叢集,處理資料檢索請求,資料展示
環境準備
(1)作業系統環境
CentOS Linux release 7.7.1908 (Core)
(2)伺服器角色配置設定
主機IP | hostname | 角色 | 所屬服務層 | 部署服務 |
---|---|---|---|---|
192.168.213.128 | zookeeper01 | 日志生産 | 采集層 | filebeat |
192.168.213.128 | zookeeper01 | 日志緩存資料 | 處理層、緩存層 | zookeeper+kafka+logstash |
192.168.213.128 | zookeeper01 | 日志展示 | 持久、檢索、展示層 | elasticsearch+logstash+kibana |
192.168.213.136 | zookeeper02 | zookeeper+kafka+elasticsearch | ||
192.168.213.135 | zookeeper03 | zookeeper+kafka+elasticsearch |
資料流向
filebeat
---->
logstash
---->
kafka
---->
logstash
---->
elasticsearch
(3)軟體包版本
軟體包版本 |
---|
elasticsearch-5.2.0 logstash-5.2.0 kibana-5.2.0-linux-x86_64 jdk-8u842-linux-x64 zookeeper-3.4.14 filebeat-6.6.1-linux-x86_64 kafka_2.13-2.4.1 |
部署安裝
節點初始化
關閉防火牆,做時間同步(略)
部署ELK
ELK叢集部署(略)
ELK叢集配置
(1)配置logstash
[[email protected] ~]# cd /data/program/software/logstash
[[email protected] logstash]# cat conf.d/logstash_to_es.conf
input {
kafka {
bootstrap_servers => "192.168.213.128:9092,192.168.213.136:9092"
topics => ["test_logstash"]
}
}
output {
elasticsearch {
hosts => ["192.168.213.128:9200","192.168.213.136:9200"]
index => "dev-log-%{+YYYY.MM.dd}"
}
}
注: test_logstash字段是kafka的消息主題,後邊在部署kafka後需要建立
(2)elasticsearch配置 (略)
(3)kibana配置 (略)
部署zookeeper+kafka+logstash
zookeeper叢集配置(略)
kafka叢集配置(略)
logstash配置
(1)服務部署(略)
(2)服務配置
[[email protected] logstash]# cat conf.d/logstash_to_filebeat.conf
input {
beats {
port => 5044
}
}
output {
kafka {
bootstrap_servers => "192.168.213.128:9092,192.168.213.136:9092"
topic_id => "test_logstash"
}
}
部署filebeat
[[email protected] filebeat]# pwd
/data/program/software/filebeat
[[email protected] filebeat]# cat nginx.yml #隻列出了需要修改的部分
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: yes
paths:
- /var/log/nginx/*.log
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
注意: beat預設對接elasticsearch,需要修改為logstash
各環節服務啟動與資料追蹤
(1)啟動zookeeper及kafka叢集
[[email protected] ~]# cd /data/program/software/zookeeper
[[email protected] zookeeper]# bin/zkServer.sh start
[[email protected] ~]# cd /data/program/software/kafka
[[email protected] kafka]# nohup bin/kafka-server-start.sh config/server.properties >>/tmp/kafka.nohup &
[[email protected] ~]# netstat -tunlp|egrep "(2181|9092)"
#在3個節點上執行
(2)啟動elasticsearch
[[email protected] ~]su - elsearch -c "/data/program/software/elasticsearch/bin/elasticsearch -d"
#在3個節點上執行
http://192.168.213.128:9200
檢視elasticsearch+zookeeper叢集狀态
http://192.168.213.128:9200/_cat/nodes?pretty
(3)啟動nodejs
[[email protected] ~]# cd /data/program/software/elasticsearch/elasticsearch-head
[[email protected] elasticsearch-head]# grunt server &
http://192.168.213.128:9100
(4)啟動kibana
[[email protected] ~]# cd /data/program/software/kibana
[[email protected] kibana]# nohup bin/kibana >>/tmp/kibana.nohup &
[[email protected] kibana]# netstat -tunlp|grep 5601
http://192.168.213.128:5601
(5)啟動logstash
[[email protected] ~]# cd /data/program/software/logstash
[[email protected] logstash]# nohup bin/logstash -f conf.d/logstash_to_filebeat.conf >>/tmp/logstash.nohup &
(6)啟動filebeat
[[email protected] ~]# cd /data/program/software/filebeat
[[email protected] filebeat]# nohup ./filebeat -e -c nginx.yml >>/tmp/filebeat.nohup &
[[email protected] filebeat]# ps -ef|grep filebeat
(7)在kafka終端上進行日志消費
[[email protected] ~]# cd /data/program/software/kafka
[[email protected] kafka]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.213.136:9092 --topic test_logstash
通路zookeeper01産生nginx日志,在kafka終端上會有實時日志消息,則
filebeat
---->
logstash
---->
kafka
資料流轉正常
[[email protected] ~]# curl -I 192.168.213.128
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Tue, 14 Apr 2020 05:22:07 GMT
Content-Type: text/html
Content-Length: 4833
Last-Modified: Fri, 16 May 2014 15:12:48 GMT
Connection: keep-alive
ETag: "53762af0-12e1"
Accept-Ranges: bytes
(8)啟動logstash轉發
[[email protected] ~]# cd /data/program/software/logstash
[[email protected] logstash]# nohup bin/logstash -f conf.d/logstash_to_es.conf >>/tmp/logstash_to_es.nohup &
(9)elasticsearch資料展示
(10)kibana資料展示
踩坑記錄
(1)logstash-6.6.1版本不支援同時運作多個執行個體
[FATAL] [logstash. runner] Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the “path.data” setting.
原因:logstash-6.6.1版本不支援同時運作多個執行個體,前一個運作的instance在path.data裡面有.lock檔案
網上大多數的解決辦法是删除其data目錄下的.lock檔案,但這并不能解決問題,我們需要
conf.d/logstash_to_filebeat.conf
和
conf.d/logstash_to_es.conf
同時線上運作以保證明時日志統計展示,是以采用了百度出來的另一個方法,直接運作
nohup bin/logstash -f conf.d/ >>/tmp/logstash.nohup &
,這樣雖然運作沒報錯,但會使資料采集異常,瘋狂輸出沒有用的資料
實測ELK(elasticsearch+logstash+kibana)6.6.1版本按本教程搭建的平台資料收集異常
單獨測試
filebeat
---->
logstash
---->
kafka
資料流轉正常;
單獨測試
kafka
---->
logstash
---->
elasticsearch
資料流轉正常;
整體測試資料流轉異常,采集到的資料并非隻是nginx的日志,且不停的輸出,不及時暫停filebeat或logstash會導緻無用資料占用磁盤空間龐大
暫時沒有找到此版本解決此問題的方法
(2)将ELK版本回退部署後叢集狀态異常
http://192.168.213.128:9200/_cat/nodes?pretty
檢視叢集狀态為503
{
"error" : {
"root_cause" : [ {
"type" : "master_not_discovered_exception",
"reason" : null
} ],
"type" : "master_not_discovered_exception",
"reason" : null
},
"status" : 503
}
檢視日志,發現master沒有選舉成功,而且3個節點的
"cluster_uuid" : "_na_"
都相同(異常)
原因:把elasticsearch複制到其他節點時 ,elk_data下的運作資料也拷貝過去了
解決辦法: 把elk_data目錄下的内容删除,重新開機elasticsearch
後記
嚴禁按舊版本的教程用新版本的軟體做執行個體,這無異于自己挖坑自己跳