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 http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/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 install yum -y install bzip2-x86_64
安装配置jdk环境
打开网页 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载jdk-8u151-linux-x64.tar.gz (不低于1.8版本)
tar zxf jdk-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/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.3.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/1.0.0/kafka_2.12-1.0.0.tgz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
1
2
3
4
5
6
7
8
9
|
ls -l /home/elk/
总用量 446664
-rw-r--r-- 1 elk elk 33702280 4月 20 2017 elasticsearch-5.3.1. tar .gz
-rw-r--r-- 1 elk elk 8769043 4月 20 2017 filebeat-5.3.1-linux-x86_64. tar .gz
-rw-r--r-- 1 elk elk 189736377 2月 1 19:30 jdk-8u151-linux-x64. tar .gz
-rw-r--r-- 1 elk elk 44352403 11月 1 13:39 kafka_2.12-1.0.0.tgz
-rw-r--r-- 1 elk elk 38732760 4月 20 2017 kibana-5.3.1-linux-x86_64. tar .gz
-rw-r--r-- 1 elk elk 94117217 4月 20 2017 logstash-5.3.1. tar .gz
-rw-rw-r--. 1 elk elk 36668066 11月 9 02:24 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.9 elasticsearch
192.168.1.10 elasticsearch elasticsearch-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 https://npm.taobao.org/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 https://npm.taobao.org/mirrors/npm/v4.6.1.tar.gz
tar zxf v4.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 https://npm.taobao.org/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://github.com/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.6 zk kafka logstash
192.168.1.7 zk 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
num.network.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博客,原文链接: http://blog.51cto.com/superleedo/2070227,如需转载请自行联系原作者
ELK+filebeat+kafka+zookeeper构建海量日志分析平台相关推荐
- ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)
ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台 参考:http://www.tuicool.com/articles/R77fieA 我在做ELK日志平台开始之初选择为 ...
- 视频教程-【2019精品课】构建ELK海量日志分析平台-ELK
[2019精品课]构建ELK海量日志分析平台 10年一线开发及项目管理经验,6年以上大数据项目架构.实施.开发与运维经验,骨灰级大数据玩家,对Hadoop.Storm.Spark.Flink.Kyli ...
- ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自: http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志. ...
- ELK+Filebeat+Kafka+ZooKeeper+Grafana大数据日志收集与分析平台
一.ELK与EFK架构 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安 ...
- ES学习构建EKL海量日志分析平台
下往上看 1.Gateway代表ES数据持久化概念,ES建立索引默认存储在内存,ES只有当内存不足或关闭重新启动的情况下才持久化到磁盘里面,支持多种Gateway. 2.lucene Director ...
- ELK(ElasticSearch+Logstash+ Kibana)搭建实时日志分析平台
来源:http://www.cnblogs.com/zclzhao/p/5749736.html 一.简介 ELK 由三部分组成elasticsearch.logstash.kibana,elasti ...
- 搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
27.6 安装kibana 27.7 安装logstash 27.8 配置logstash 27.9 kibana上查看日志 27.10 收集nginx日志 27.11 使用beats采集日志 本文是 ...
- ELK实时日志分析平台环境部署--完整记录
在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...
- 揭秘魅族日志分析平台的建设
大家好,今天给大家带来的是我们魅族日志分析平台的建设. 在这之前,先跟大家简单的自我介绍下 ,我是2014年加入魅族的,现在主要负责的是云平台和日志平台的研发. 今天分享的内容主要有四大部分: Ø ...
- CentOS 6.8下ELK+filebeat+redis 日志分析平台
转载来源 :ELK+filebeat+redis 日志分析平台 :https://www.jianshu.com/p/bf2793e85d18 一.简介 ELK Stack是软件集合Elasticse ...
最新文章
- 前滴滴出行产品经理刘飞:写给产品经理的说明书(上)
- Linux下开启/关闭防火墙命令
- C 常见的面试知识点(下)
- PaperNotes(12)-Autoregressive Quantile networks for generative modeling
- Python开发者必知的 11 个 Python GUI 库,你用过几个?
- 深度学习- 激活函数总结(Sigmoid, Tanh, Relu, leaky Relu, PReLU, Maxout, ELU, Softmax,交叉熵函数)
- 据说学编程的计算这题不超1分钟!
- 微信小程序云开发教程-微信小程序的JS高级-全局数据读写
- java基础总结07-异常
- 华为交换机怎么关闭信息提示_iPhone 关闭支付宝自动扣费服务提示“无法解约”怎么办?...
- flask web开发是前端还是后端_后端开发该不该学前端开发?
- 网页设计课程设计报告
- 15.3,python中扫描条形码和二维码
- 无界鼠标 (Mouse without Borders)简单使用教程
- 什么是pisa测试_PISA测试是什么?
- oracle 归档日志 重做日志,Oracle的重做日志和归档日志
- Android手机的USB
- 嵌入式微处理器详述(1)---什么是嵌入式微处理器
- 解析Excel获取单元格数据
- 简单易学的机器学习算法——梯度提升决策树GBDT
热门文章
- Java核心技术读书笔记(2013-01-11)
- ASP.NETSpring.NETNHibernate最佳实践(七)——第3章人事子系统(4)人事子系统小结...
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- 【OpenCV学习笔记】【函数学习】十四(cvSeq的用法说明(功能很多,按照需求使用))
- leetcode刷题日记- 重复叠加字符串匹配
- 前端调用3dmax模型转换.gltf格式
- 广色域图片Android,Android Q将支持广色域照片
- nsis打包php项目加环境,NSIS制作安装文件全攻略(一) zz
- python3中input输入浅谈_对Python3中的input函数详解
- Apache Flink 进阶(六):Flink 作业执行深度解析