ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)

 

ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台

参考:http://www.tuicool.com/articles/R77fieA

我在做ELK日志平台开始之初选择为ELK+Redis直接构建,在采集nginx日志时一切正常,当我采集我司业务报文日志类后,logstash会报大量的redis connect timeout。换成redis cluster后也是同样的情况后,就考虑对消息中间件进行替换重新选型,经过各种刷文档,决定选用kafka来替换redis。根据网上找的一篇参考文档中的架构图如下:

注:由于环境有限,在对该架构图中的elasticsearch集群与logstash转发层进行了合并在一台服务器上。

架构解读 : (整个架构从左到右,总共分为5层)(本文将第三层以下的进行了合并,无elasticsearch集群)

第一层、数据采集层

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

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

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

第三层、数据转发层

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

第四层、数据持久化存储

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

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

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

一、环境准备

操作系统环境:(测试环境统一为centos7;正式线上环境:采集层、处理缓存层为centos6.5,转发层、持久层、检索展示层为centos7)(本文以实验环境进行撰写)

服务器角色分配:

主机IP

角色

所属服务层

部署服务

192.168.11.11

日志生产

采集层

filebeat

192.168.11.12

日志缓存

数据处理层、缓存层

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环境变量

[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、系统调优

[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后需要创建

4.2、配置logstash的启动脚本

[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(正式环境不需要,测试环境内存较小需要更改,将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(双机集群缓存处理层,正式环境建议三台)

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

注:在另外一台配置文件相同,只需要将myid重置为2

[webapp@localhost conf]$ echo 2 > /data/webapp/zookeeper-3.4.9/zookeeper/myid

2、启动zookeeper服务(在两台服务器中都启动)

[webapp@localhost zookeeper-3.4.9]$ bin/zkServer.sh start

2.1、查看两台zookeeper集群状态

[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

注:两台集群配置只需要将broker.id、host.name进行修改,其它一致。

[webapp@localhost config]$ vim server.properties

broker.id=2

host.name = 192.168.11.13

4、启动kafka集群(在两台服务器中都启动)

[webapp@localhost kafka_2.11-0.10.1.1]$ bin/kafka-server-start.sh -daemon config/server.properties

4.1、创建消息主题

[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、测试消息生产与消费

在主机192.168.11.13上进行消息消费

[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

在主机192.168.11.12上进行消息生产:

[webapp@localhost kafka_2.11-0.10.1.1]$ bin/kafka-console-producer.sh --broker-list 192.168.11.11:9092 --topic ecplogs

在此终端中输入数据,会在192.168.11.13终端上进行显示出来。那么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启动脚本(如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: ^请

  multiline.negate: true

  multiline.match: after

output.logstash:

  hosts: ["192.168.11.13:5044"]

注解:该配置文件格式参照yml型,multiline.x配置项为多行合并规则,如无,可以不用配置

3、启动filebeat

[webapp@localhost filebeat-5.2.0-linux-x86_64]$ nohup ./filebeat -c filebeat.yml > /dev/null &

(四)各环节服务器启动与数据追踪

1、启动192.168.11.12/13服务器上的logstash

[webapp@localhost ~]$ /data/webapp/logstash-5.2.0/bin/start-logstash.sh

2、在192.168.11.12/13终端上进行日志消费测试

[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

注:如果配置正常,该两终端中会都会源源不断的输出/data/logs/ecplog.log的日志数据。

3、启动192.168.11.14服务器上的logstash+es+kibana

4、测试es数据索引

[webapp@localhost ~]$ curl "http://192.168.11.14:9200/ecplogs-2017.02.09"

注:如果配置正常,curl出来的是有数据的,而非404类

5、通过web展示,访问http://192.168.11.14:5601

6、Kibanad页面配置(略)

 

 

转载于:https://www.cnblogs.com/delgyd/p/elk.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring回滚事务类型

Spring默认抛出了未检查unchecked异常(继承自 RuntimeException的异常)或者 Error才回滚事务,其他异常不会触发回滚事务。

操作系统:Win10操作系统内置的备份功能介绍

今天给大家分享Win10操作系统内置的系统备份功能,感兴趣的可以了解一下!。 Win10的备份:由“旧版备份与还原”、“还原点”和“文件历史记录”三个部分组成。 旧版备份与还原:主要用于系统备份与还原 还原点:还原点 文…

spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

如上: 当我们需要在事务控制的service层类中使用try catch 去捕获异常后,就会使事务控制失效,因为该类的异常并没有抛出,就不是触发事务管理机制。怎样才能即使用try catch去捕获异常,而又让出现异常后spring回滚呢&am…

电脑软件:推荐一款本地文档搜索神器,赶快下载试试吧!

1、前言大家在日常办公的时候,经常会涉及各种各样的文档,时间久了文件会越来越多,有时候需要快速找到一个半年前文档可能会耗费你的大量时间,毕竟每个人的大脑记忆都是有限的,不可能每个细节都能够靠大脑记忆&#xff…

JVM系列(一):JVM基本概念知识笔记

今天开始给大家分享JVM系列知识,欢迎大家一起学习交流共同进度! 1、什么是JVM? JVM即Java虚拟机,可以理解为一种抽象计算机,它拥有一个指令集,在运行时操作各种内存区域。JVM对Java语言一无所知&#xff0…

配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件...

配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件 首先maven环境变量: 变量名:MAVEN_HOME 变量值:E:\apache-maven-3.2.3 变量名:Path 变量值:;%MVN_HOME…

电脑技巧:Win10任务管理器知识介绍,赶快来看一看吧

Win10操作系统的任务管理器应该是大家比较熟悉的软件,尤其是在你的电脑卡掉的时候,不得不打开任务管理器,结束掉进程卡死的进程,然后电脑就可以恢复正常使用,任务管理器作为Windows操作系统上一款使用频率非常高的软件…

[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...

本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Action粒度的权限管理(在线demo,全部源码) 在线Demo: 地址:http://218.60.8.35:1234/ 服务器&a…

电脑软件:推荐八款电脑必备效率软件

目录 1、PowerToys 微软官方效率神器 2、Ditto 剪切板神器 3、AnyTXT Searcher 文本搜索神器 4、Everything 文件检索神器 5、Monitorian 屏幕亮度调节神器 Monitorian 是一款超级实用的屏幕亮度调节工具,可以在任务栏以滑杆的方式调节屏幕亮度,且…

JVM系列(二):JVM中类加载器相关知识笔记

今天继续给大家分享JVM相关的知识,欢迎互相沟通交流! 1、什么是类的加载和类的卸载 JVM虚拟机运行的文件是class文件,它是由我们的Java程序编译后产生的文件。 类的加载:JVM虚拟机将指定的class文件读取到内存里,并…

JVM系列(三):双亲委派机制笔记

今天给大家分享JVM系列之双亲委派机制相关的知识。 1、Java类加载的过程 Java类的加载过程是动态的,它不会一次性把程序所有的类全部加载后再运行,而是先保障程序运行的基础类加载到JVM虚拟机当中,其他的类,一般是再需要的时候才…

Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库

安全起见,数据库的访问多半是要做限制的,所以就有一个直接的问题是,往往多数时候,在别的机器上(比如自己本地),是不能访问数据库的,给日常使用造成了很大不便。所以前几天做了个需求…

运维安全:微软远程桌面修改默认远程端口

远程桌面是网络管理员必备的技能,今天给大家聊聊Windows本身就自带的远程桌面功能,如何修改远程的默认端口(3389),让你的远程服务器更加安全。 下面给大家介绍一下如何修改远程桌面的默认端口,具体步骤如下…

Android Studio如何导出可供Unity使用的aar插件详解

前言 项目之前使用Eclipse导出的jar文件来做与Android交互,最近因为工作需要需使用Android Studio的aar文件,网上参考了部分文章,也结合自己的理解重新整理一下具体的方法,通过写一个测试Demo来表述Android Studio创建aar的过程与…

JVM系列(四):沙箱安全机制笔记

今天主要给大家分享JVM的沙箱安全机制笔记 1、沙箱机制的概念 Java安全模型的核心就是Java沙箱(sandbox)。 沙箱机制就是将Java代码限定只能在虚JVM虚拟机中特定的运行范围,并且严格限制代码对本地系统资源访问,通过这样的方式来保证对Java代码的有效隔…