设为首页 收藏本站
查看: 1362|回复: 0

[经验分享] ELK+filebeat+kafka+zookeeper构建海量日志分析平台

[复制链接]

尚未签到

发表于 2019-1-8 09:38:19 | 显示全部楼层 |阅读模式
  

  海量日志分析平台,由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

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,即可启动成功。
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660617-1-1.html 上篇帖子: 分布式服务Dubbo+Zookeeper安全认证 下篇帖子: CentOS 7 安装Mesos+Marathon+Zookeeper集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表