ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)
?
ELK+Filebeat+Kafka+ZooKeeper 構(gòu)建海量日志分析平臺(tái)
參考:http://www.tuicool.com/articles/R77fieA
我在做ELK日志平臺(tái)開始之初選擇為ELK+Redis直接構(gòu)建,在采集nginx日志時(shí)一切正常,當(dāng)我采集我司業(yè)務(wù)報(bào)文日志類后,logstash會(huì)報(bào)大量的redis connect timeout。換成redis cluster后也是同樣的情況后,就考慮對(duì)消息中間件進(jìn)行替換重新選型,經(jīng)過各種刷文檔,決定選用kafka來替換redis。根據(jù)網(wǎng)上找的一篇參考文檔中的架構(gòu)圖如下:
注:由于環(huán)境有限,在對(duì)該架構(gòu)圖中的elasticsearch集群與logstash轉(zhuǎn)發(fā)層進(jìn)行了合并在一臺(tái)服務(wù)器上。
架構(gòu)解讀 : (整個(gè)架構(gòu)從左到右,總共分為5層)(本文將第三層以下的進(jìn)行了合并,無elasticsearch集群)
第一層、數(shù)據(jù)采集層
最左邊的是業(yè)務(wù)服務(wù)器集群,上面安裝了filebeat做日志采集,同時(shí)把采集的日志分別發(fā)送給兩個(gè)logstash服務(wù)。
第二層、數(shù)據(jù)處理層,數(shù)據(jù)緩存層
logstash服務(wù)把接受到的日志經(jīng)過格式處理,轉(zhuǎn)存到本地的kafka broker+zookeeper?集群中。
第三層、數(shù)據(jù)轉(zhuǎn)發(fā)層
這個(gè)單獨(dú)的Logstash節(jié)點(diǎn)會(huì)實(shí)時(shí)去kafka broker集群拉數(shù)據(jù),轉(zhuǎn)發(fā)至ES DataNode。
第四層、數(shù)據(jù)持久化存儲(chǔ)
ES DataNode 會(huì)把收到的數(shù)據(jù),寫磁盤,建索引庫。
第五層、數(shù)據(jù)檢索,數(shù)據(jù)展示
ES Master + Kibana 主要 協(xié)調(diào) ES集群,處理數(shù)據(jù)檢索請(qǐng)求,數(shù)據(jù)展示。
一、環(huán)境準(zhǔn)備
操作系統(tǒng)環(huán)境:(測(cè)試環(huán)境統(tǒng)一為centos7;正式線上環(huán)境:采集層、處理緩存層為centos6.5,轉(zhuǎn)發(fā)層、持久層、檢索展示層為centos7)(本文以實(shí)驗(yàn)環(huán)境進(jìn)行撰寫)
服務(wù)器角色分配:
| 主機(jī)IP | 角色 | 所屬服務(wù)層 | 部署服務(wù) |
| 192.168.11.11 | 日志生產(chǎn) | 采集層 | filebeat |
| 192.168.11.12 | 日志緩存 | 數(shù)據(jù)處理層、緩存層 | Zookeeper+kafka+logstash |
| 192.168.11.13 | |||
| 192.168.11.14 | 日志展示 | 持久、檢索、展示層 | Logstash+elasticsearch+kibana |
?
軟件包版本:
jdk-8u112-linux-x64
filebeat-5.2.0-linux-x86_64
logstash-5.2.0
kafka_2.11-0.10.1.1
kibana-5.2.0-linux-x86_64
elasticsearch-5.2.0
zookeeper-3.4.9
二、部署安裝
(一)、部署logstash+elasticsearch+kibana(持久、檢索、展示層)
1、jdk解壓部署
[webapp@localhost ~]$ tar -xzf jdk-8u112-linux-x64.tar.gz -C /data/webapp/
2、配置jdk環(huán)境變量
[webapp@localhost ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export JAVA_HOME=/data/webapp/jdk1.8.0_112
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH
3、系統(tǒng)調(diào)優(yōu)
[webapp@localhost ~]$ vim /etc/sysctl.conf
fs.file-max=65536
vm.max_map_count = 262144
[webapp@localhost ~]$ vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
4、解壓部署logstash+elasticsearch+kibana
[webapp@localhost ~]$ unzip -d /data/webapp/ elasticsearch-5.2.0.zip
[webapp@localhost ~]$ tar -xzf logstash-5.2.0.tar.gz -C /data/webapp/
[webapp@localhost ~]$ tar -xzf kibana-5.2.0-linux-x86_64.tar.gz -C /data/webapp/
4.1、配置logstash的配置文件
[webapp@localhost ~]$ cd /data/webapp/logstash-5.2.0/config/
[webapp@localhost config]$ vim logstash_to_es.conf
input {
????kafka {
????????bootstrap_servers => "192.168.11.12:9092,192.168.11.13:9092"
????????topics => ["ecplogs"]
????????}
}
output {
????elasticsearch {
????????hosts => ["192.168.11.14:9200"]
????????index => "ecp-log-%{+YYYY.MM.dd}"
????????flush_size => 20000
????????idle_flush_time => 10
????????template_overwrite => true
????????}
}
注:["ecplogs"]此字段是kafka的消息主題,后邊在部署kafka后需要?jiǎng)?chuàng)建
4.2、配置logstash的啟動(dòng)腳本
[webapp@localhost config]$ cd ../bin/
[webapp@localhost bin]$ vim start-logstash.sh
#!/bin/bash
export JAVA_HOME=/data/webapp/jdk1.8.0_112
export JRE_HOME=/data/webapp/jdk1.8.0_112/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
/data/webapp/logstash-5.2.0/bin/logstash -f /data/webapp/logstash-5.2.0/config/logstash_to_es.conf > /dev/null &
4.3、配置elasticsearch的配置文件
[webapp@localhost ~]$ cd /data/webapp/elasticsearch-5.2.0/config/
[webapp@localhost config]$ vim elasticsearch.yml
node.name:elk1
path.data:/data/webapp/elk_data
path.logs:/data/webapp/elk_data
network.host: 192.168.11.14
http.port: 9200
4.4、配置JVM(正式環(huán)境不需要,測(cè)試環(huán)境內(nèi)存較小需要更改,將2g改為512M)
[webapp@localhost config]$ vim jvm.options
-Xms512m
-Xmx512m
4.5、配置Kibana的配置文件
[webapp@localhost ~]$ cd /data/webapp/kibana-5.2.0-linux-x86_64/config/
[webapp@localhost config]$ vim kibana.yml
server.port: 5601
server.host: "192.168.11.14"
elasticsearch.url: "http://192.168.11.14:9200"
(二)、部署Zookeeper+kafka+logstash(雙機(jī)集群緩存處理層,正式環(huán)境建議三臺(tái))
1、部署zookeeper集群
[webapp@localhost ~]$ tar -xzf zookeeper-3.4.9.tar.gz -C /data/webapp/
[webapp@localhost ~]$ cd /data/webapp/zookeeper-3.4.9/conf/
[webapp@localhost conf]$ cp zoo_sample.cfg zoo.cfg
[webapp@localhost conf]$ vim zoo.cfg
dataDir=/data/webapp/zookeeper-3.4.9/zookeeper
server.1=192.168.11.12:12888:13888
server.2=192.168.11.13:12888:13888
[webapp@localhost conf]$ echo 1 > /data/webapp/zookeeper-3.4.9/zookeeper/myid
注:在另外一臺(tái)配置文件相同,只需要將myid重置為2
[webapp@localhost conf]$ echo 2 > /data/webapp/zookeeper-3.4.9/zookeeper/myid
2、啟動(dòng)zookeeper服務(wù)(在兩臺(tái)服務(wù)器中都啟動(dòng))
[webapp@localhost zookeeper-3.4.9]$ bin/zkServer.sh start
2.1、查看兩臺(tái)zookeeper集群狀態(tài)
[webapp@localhost zookeeper-3.4.9]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/webapp/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
[webapp@localhost zookeeper-3.4.9]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/webapp/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
3、配置kafka集群
[webapp@localhost ~]$ tar -xzf kafka_2.11-0.10.1.1.tgz -C /data/webapp/
[webapp@localhost ~]$ cd /data/webapp/kafka_2.11-0.10.1.1/config/
[webapp@localhost config]$ vim server.properties
broker.id=1
port = 9092
host.name = 192.168.11.12
log.dirs=/data/webapp/kafka-logs
log.retention.hours=1
zookeeper.connect=192.168.11.12:2181,192.168.11.13:2181
default.replication.factor=2
注:兩臺(tái)集群配置只需要將broker.id、host.name進(jìn)行修改,其它一致。
[webapp@localhost config]$ vim server.properties
broker.id=2
host.name = 192.168.11.13
4、啟動(dòng)kafka集群(在兩臺(tái)服務(wù)器中都啟動(dòng))
[webapp@localhost kafka_2.11-0.10.1.1]$ bin/kafka-server-start.sh -daemon config/server.properties
4.1、創(chuàng)建消息主題
[webapp@localhost kafka_2.11-0.10.1.1]$ bin/kafka-topics.sh --create --zookeeper 192.168.11.11:2181 --replication-factor 1 --partitions 2 --topic ecplogs
4.2、測(cè)試消息生產(chǎn)與消費(fèi)
在主機(jī)192.168.11.13上進(jìn)行消息消費(fèi)
[webapp@localhost kafka_2.11-0.10.1.1]$ /data/webapp/kafka_2.11-0.10.1.1/bin/kafka-console-consumer.sh --zookeeper 192.168.11.11:2181 --topic ecplogs --from-beginning
在主機(jī)192.168.11.12上進(jìn)行消息生產(chǎn):
[webapp@localhost kafka_2.11-0.10.1.1]$ bin/kafka-console-producer.sh --broker-list 192.168.11.11:9092 --topic ecplogs
在此終端中輸入數(shù)據(jù),會(huì)在192.168.11.13終端上進(jìn)行顯示出來。那么kafka功能正常。
5、配置logstash
5.1配置logstash的配置文件
[webapp@localhost ~]$ tar -xzf logstash-5.2.0.tar.gz -C /data/webapp/
[webapp@localhost ~]$ cd /data/webapp/logstash-5.2.0/config/
[webapp@localhost config]$ vim logstash_in_filebeat.conf
input {
????beats {
????????port => 5044
????????}
}
output {
????kafka {
????????bootstrap_servers => "192.168.11.12:9092,192.168.11.13:9092"
????????topic_id => "ecplogs"
????????}
}
5.2配置Logstash啟動(dòng)腳本(如4.2)
(三)、部署filebeat(日志采集)
1、解壓部署
[webapp@localhost ~]$ tar -xzf filebeat-5.2.0-linux-x86_64.tar.gz -C /data/webapp/
2、配置filebeat配置文件
[webapp@localhost ~]$ cd /data/webapp/filebeat-5.2.0-linux-x86_64/
[webapp@localhost filebeat-5.2.0-linux-x86_64]$ vim filebeat.yml
filebeat.prospectors:
- input_type: log
??paths:
- /data/logs/ecplog.log
??multiline.pattern: ^請(qǐng)
??multiline.negate: true
??multiline.match: after
output.logstash:
??hosts: ["192.168.11.13:5044"]
注解:該配置文件格式參照yml型,multiline.x配置項(xiàng)為多行合并規(guī)則,如無,可以不用配置
3、啟動(dòng)filebeat
[webapp@localhost filebeat-5.2.0-linux-x86_64]$ nohup ./filebeat -c filebeat.yml > /dev/null &
(四)各環(huán)節(jié)服務(wù)器啟動(dòng)與數(shù)據(jù)追蹤
1、啟動(dòng)192.168.11.12/13服務(wù)器上的logstash
[webapp@localhost ~]$ /data/webapp/logstash-5.2.0/bin/start-logstash.sh
2、在192.168.11.12/13終端上進(jìn)行日志消費(fèi)測(cè)試
[webapp@localhost kafka_2.11-0.10.1.1]$ /data/webapp/kafka_2.11-0.10.1.1/bin/kafka-console-consumer.sh --zookeeper 192.168.11.11:2181 --topic ecplogs --from-beginning
注:如果配置正常,該兩終端中會(huì)都會(huì)源源不斷的輸出/data/logs/ecplog.log的日志數(shù)據(jù)。
3、啟動(dòng)192.168.11.14服務(wù)器上的logstash+es+kibana
4、測(cè)試es數(shù)據(jù)索引
[webapp@localhost ~]$ curl "http://192.168.11.14:9200/ecplogs-2017.02.09"
注:如果配置正常,curl出來的是有數(shù)據(jù)的,而非404類
5、通過web展示,訪問http://192.168.11.14:5601
6、Kibanad頁面配置(略)
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/delgyd/p/elk.html
總結(jié)
以上是生活随笔為你收集整理的ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SNS介绍
- 下一篇: android studio 导入依赖报