2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ELK+filebeat+kafka+zookeeper构建海量日志分析平台

ELK+filebeat+kafka+zookeeper构建海量日志分析平台

时间:2019-04-11 17:59:13

相关推荐

ELK+filebeat+kafka+zookeeper构建海量日志分析平台

海量日志分析平台,由ElasticSearch、Logstash,Kiabana,filebeat,kafka,zookeeper等多个开源工具构建而成

平台构建后可以大大减轻运维人员对于日志管理的负担,检索方便,定位问题快捷。

1,本平台参考的建构图如下

上面架构图分为五层,详细解释如下:

第一层、数据采集层

最左边的是业务服务器集群,上面安装了filebeat做日志采集,同时把采集的日志分别发送给两个logstash服务。

第二层、数据处理层,数据缓存层

logstash服务把接受到的日志经过格式处理,转存到本地的kafka broker+zookeeper 集群中。

第三层、数据转发层

这个单独的Logstash节点会实时去kafka broker集群拉数据,转发至ES DataNode。

第四层、数据持久化存储

ES DataNode 会把收到的数据,写磁盘,建索引库。

第五层、数据检索,数据展示

ES Master + Kibana 主要 协调 ES集群,处理数据检索请求,数据展示。

本示例参考上面架构图,并进行了简化,去除了单独的es master层, kibana展示放在两节点的es集群上,logstash+kafka+zookeeper用两节点集群(生产建议用3--4节点),elasticsearch也采用两节点集群(生产建议2--4节点),filebeat放在随意的生产日志的机器上,具体机器分布如下:

2,系统环境及软件准备

系统版本centos7最小化安装,配置好网络能访问外网,关闭防火墙,配置基础环境及java环境

网络自行配置

关闭防火墙

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/selinux/config

设置yum源

yum install wget -y

cd /etc/yum.repos.d/

wget/repo/Centos-7.repo

wget/repo/epel-7.repo

yum -y install epel-release

yum install net-tools -y

yum install tree -y

yum install lrzsz -y

yum install vim-enhanced-y

yum installyum -y install bzip2-x86_64

安装配置jdk环境

打开网页/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载jdk-8u151-linux-x64.tar.gz (不低于1.8版本)

tar zxfjdk-8u151-linux-x64.tar.gz -C /usr/local/

vim /etc/profile

添加如下内容

JAVA_HOME=/usr/local/jdk1.8.0_151

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME PATH CLASSPATH

source /etc/profile

修改系统参数(重启生效)

vim /etc/security/limits.conf

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

vim /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

并执行命令:

sysctl -p

vi /etc/security/limits.d/90-nproc.conf

* soft nproc 2048

添加用户并下载软件

useradd elk

su elk

cd /home/elk/

wgethttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.3.1-linux-x86_64.tar.gz

wgethttps://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz

wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz

wgethttps://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz

wgethttp://mirrors.tuna./apache/kafka/1.0.0/kafka_2.12-1.0.0.tgz

wgethttps://mirrors.tuna./apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

修改安装目录权限

chown elk.elk /usr/local/

chmod 777 /usr/local/

3,安装es集群、head插件、kibana

ES集群这里采用是2节点,生产建议使用3--4节点,head和kibana安装在其中一个节点上

192.168.1.9elasticsearch

192.168.1.10elasticsearchelasticsearch-head kibana

先做elasticsearch的集群

su elk

cd /home/elk/

tar zxf elasticsearch-5.3.1.tar.gz -C /usr/local/

修改配置

vim /usr/local/elasticsearch-5.3.1/config/jvm.options

-Xms256M#测试机器内存较小 故修改的比较小

-Xmx256M

vim /usr/local/elasticsearch-5.3.1/config/elasticsearch.yml

1.10机器上的配置如下:

cluster.name: bigdata#集群名字,所有节点保持一致

node.name: node-1#节点名字,保持唯一性

path.data: /home/elk/data#数据目录 需要自行创建

path.logs: /home/elk/logs #日志目录 需要自行创建

bootstrap.memory_lock: false#关闭内存锁定 可以使用swap,生产上内存多可用true,限制swap的使用

bootstrap.system_call_filter: false

network.host: 0.0.0.0#设置绑定ip

http.port: 9200 #端口

discovery.zen.ping.unicast.hosts: ["192.168.1.10","192.168.1.9"]#集群节点ip

discovery.zen.minimum_master_nodes: 2 #这个参数来保证集群中的节点知道其它N个有master资格的节点

http.cors.enabled: true#配置为haad插件配置

http.cors.allow-origin: "*"#配置为haad插件配置

1.9机器上的配置如下:

cluster.name: bigdata

node.name: node-2

path.data: /home/elk/data

path.logs: /home/elk/logs

bootstrap.memory_lock: false

bootstrap.system_call_filter: false

network.host: 0.0.0.0

http.port: 9200

discovery.zen.ping.unicast.hosts: ["192.168.1.10","192.168.1.9"]

discovery.zen.minimum_master_nodes: 2

http.cors.enabled: true

http.cors.allow-origin: "*"

启动es集群

cd /usr/local/elasticsearch-5.3.1/

nohup ./bin/elasticsearch &

浏览器测试成功

下面安装插件elasticsearch-head

安装node.js环境和npm环境,grunt环境

安装node.js

wget/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz

tar -zxf node-v4.4.7-linux-x64.tar.gz -C /usr/local/elasticsearch-5.3.1/plugins/

vim /etc/profile 增加环境变量

PATH=$PATH:/usr/local/elasticsearch-5.3.1/plugins/node-v4.4.7-linux-x64/bin

PATH=$PATH:/usr/local/elasticsearch-5.3.1/plugins/npm-4.6.1/bin

测试

[elk@master ]$ node --version

v4.4.7

安装npm

wget/mirrors/npm/v4.6.1.tar.gz

tar zxfv4.6.1.tar.gz -C/usr/local/elasticsearch-5.3.1/plugins/

cd /usr/local/elasticsearch-5.3.1/plugins/npm-4.6.1/

node cli.js install npm -gf#安装npm

安装grunt

安装grunt命令行工具grunt-cli npm install -g grunt-cli

安装grunt及其插件 npm install grunt --save-dev

wget/mirrors/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2

tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2

下载安装head

cd /usr/local/elasticsearch-5.3.1/plugins/

git clone git:///mobz/elasticsearch-head.git

cd elasticsearch-head

npm install

npm install grunt --save

然后启动head

nohup grunt server &

浏览器访问192.168.1.10:9100

安装kibana

tar -zxvf kibana-5.3.1-linux-x86.tar.gz -C /usr/local/

cd /usr/local/kibana-5.3.1-linux-x86

vi config/kibana.yml

server.port: 5601

server.host: "192.168.1.10"

elasticsearch.url: http://192.168.1.10:9200

kibana.index: ".kibana.yml"

nohup ./bin/kibana & #启动kibana

4,部署zk,kafka,logstash集群 (生产用3个以上节点为好)

192.168.1.6zk kafka logstash

192.168.1.7zk kafka logstash

安装zookeeper

cd /home/elk/

tar zxf zookeeper-3.4.11.tar.gz -C /usr/local/

cd /usr/local/zookeeper-3.4.11/

cp conf/zoo_sample.cfg conf/zoo.cfg

vim conf/zoo.cfg#修改配置

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/local/zookeeper-3.4.11/zkdata#目录需要创建

dataLogDir=/usr/local/zookeeper-3.4.11/zkdatalog #目录需要创建

clientPort=2181 #端口

server.1=192.168.1.6:2888:3888 #测试上用两台机器,生产上最好用3台

server.2=192.168.1.7:2888:3888

echo "1" > /usr/local/zookeeper-3.4.11/zkdata/myid#1.6机器上

echo "2" > /usr/local/zookeeper-3.4.11/zkdata/myid#1.7机器上

两台同时启动zk

./bin/zkServer.sh start

./bin/zkServer.sh status #查看zk集群状态

[elk@zk1.7 zookeeper-3.4.11]$ ./bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg

Mode:follower

[elk@zk1.6 zookeeper-3.4.11]$ ./bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg

Mode:leader

安装kafka

cd /home/elk/

tar zxf kafka_2.12-1.0.0.tgz -C /usr/local/

cd /usr/local/kafka_2.12-1.0.0/

vim config/server.properties

broker.id=1 #集群id号

port=9092#端口

host.name=192.168.1.6 #本机ip

work.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

log.dirs=/usr/local/kafka_2.12-1.0.0/kafka-logs#日志地址

num.partitions=4

num.recovery.threads.per.data.dir=1

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1

log.retention.hours=1

log.segment.bytes=1073741824

log.retention.check.interval.ms=300000

zookeeper.connect=192.168.1.6:2181,192.168.1.7:2181#zk集群地址

zookeeper.connection.timeout.ms=6000

group.initial.rebalance.delay.ms=0

机器1.7上的配置只需改动下面两项,其他与1.6的配置保持一致

broker.id=2

host.name=192.168.1.7

启动kafka

nohup bin/kafka-server-start.sh config/server.properties&

测试两台机器kafka是否正常

在1.6机器上执行

创建消息主题 bin/kafka-topics.sh --create --zookeeper 192.168.1.6:2181 --replication-factor 1 --partitions 2 --topic kafkatest

消费消息 bin/kafka-console-consumer.sh --zookeeper 192.168.1.6:2181 --topic kafkatest --from-beginning

在1.7机器上执行

生产消息bin/kafka-console-producer.sh --broker-list 192.168.1.6:9092 --topic kafkatest

在这里输入,192.168.1.6终端上显示出来,kafka功能就正常

安装logstash

cd /home/elk/

tar zxf logstash-5.3.1.tar.gz -C /usr/local/

cd /usr/local/logstash-5.3.1/

vim config/jvm.options #调整内存

-Xms256m

-Xmx256m

vim config/logstash_in_filebeat.conf

input {

beats {

port => 5044

}

}

output {

kafka {

bootstrap_servers => "192.168.1.6:9092,192.168.1.7:9092"

topic_id => "kafkatest"

}

}

两个机器配置一致

启动logstash

nohup ./bin/logstash -f config/logstash_in_filebeat.conf &

5,安装filebeat

在1.5机器上

cd /home/elk/

tar zxf filebeat-5.3.1-linux-x86_64.tar.gz -C /usr/local/

cd /usr/local/filebeat-5.3.1-linux-x86_64/

vim filebeat.yml

filebeat.prospectors:

- input_type: log

paths:

- /usr/local/nginx/logs/nginx.log

multiline.pattern: ^\[

multiline.negate: true

multiline.match: after

output.logstash:

hosts: ["192.168.1.6:5044"]

启动filebeat

nohup ./filebeat -c filebeat.yml > /dev/null &

6,安装转发层的logstash

在192.168.1.8

cd /home/elk/

tar zxf logstash-5.3.1.tar.gz -C /usr/local/

cd /usr/local/logstash-5.3.1/

vim config/jvm.options #调整内存

-Xms256m

-Xmx256m

vim config/logstash_to_es.conf

input {

kafka {

bootstrap_servers => "192.168.1.6:9092,192.168.1.7:9092"

topics => ["kafkatest"]

}

}

output {

elasticsearch {

hosts => ["192.168.1.10:9200"]

index => "kafkatest-%{+YYYY.MM.dd}"

flush_size => 20000

idle_flush_time => 10

template_overwrite => true

}

}

启动转发

nohup ./bin/logstash -f config/logstash_to_es.conf &

登陆浏览器kibana

192.168.1.10:5601

到此整个系统已完成,剩下就是kibana的配置使用了

7,测试过程中遇到的错误总结

1、启动 elasticsearch 如出现异常 can not run elasticsearch as root

解决方法:创建ES 账户,修改文件夹 文件 所属用户 组

2、启动异常:ERROR: bootstrap checks failed

system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:

bootstrap.memory_lock: false

bootstrap.system_call_filter: false

3、启动后,如果只有本地可以访问,尝试修改配置文件 elasticsearch.yml

中network.host(注意配置文件格式不是以 # 开头的要空一格, : 后要空一格)

为 network.host: 0.0.0.0

默认端口是 9200

注意:关闭防火墙 或者开放9200端口

4、ERROR: bootstrap checks failed

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]

解决方法:切换到root用户,编辑limits.conf 添加类似如下内容

vi /etc/security/limits.conf

添加如下内容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

5、max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解决方法:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf

修改如下内容:

* soft nproc 1024

#修改为

* soft nproc 2048

6、max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决方法:切换到root用户修改配置sysctl.conf

vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

并执行命令:

sysctl -p

然后,重新启动elasticsearch,即可启动成功。

本文转自super李导51CTO博客,原文链接:/superleedo/2070227,如需转载请自行联系原作者

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。