天天看點

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

架構解讀

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

架構解讀 : (整個架構從左到右,總共分為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個節點上執行
           
建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

(2)啟動elasticsearch

[[email protected] ~]su - elsearch -c "/data/program/software/elasticsearch/bin/elasticsearch -d"
#在3個節點上執行
           

http://192.168.213.128:9200

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

檢視elasticsearch+zookeeper叢集狀态

http://192.168.213.128:9200/_cat/nodes?pretty

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

(3)啟動nodejs

[[email protected] ~]# cd /data/program/software/elasticsearch/elasticsearch-head
[[email protected] elasticsearch-head]# grunt server &
           

http://192.168.213.128:9100

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

(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

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

(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
           
建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

(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資料展示

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台
建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

(10)kibana資料展示

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

踩坑記錄

(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.

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

原因: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會導緻無用資料占用磁盤空間龐大

建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台
建構ELK+Zookeeper+Filebeat+Kafka大資料日志分析平台

暫時沒有找到此版本解決此問題的方法

(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

後記

嚴禁按舊版本的教程用新版本的軟體做執行個體,這無異于自己挖坑自己跳

繼續閱讀