SpringBoot+ELK+Kafaka

ELK由Elasticsearch、Logstash和Kibana三部分组件组成。

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。

kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

原理

 

SpringBoot+ELK+Kafaka_第1张图片

 

 

搭建Elasticsearch

Elasticsearch安装

Elasticsearch安装

 

1.下载ElasticSearch

[root@localhost 20190903]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.tar.gz

SpringBoot+ELK+Kafaka_第2张图片

2. 创建加压目录

 

[root@localhost local]# mkdir elasticsearch

3.解压elasticsearch-6.3.2.tar.gz

[root@localhost elasticsearch]# tar -xvf elasticsearch-6.3.2.tar.gz -C /usr/local/elasticsearch

4. 修改配置

[root@localhost config]# vi elasticsearch.yml

network.host: 192.168.126.139       #你自己的服务器ip

http.port: 9200                    #端口号

SpringBoot+ELK+Kafaka_第3张图片

5.启动

[root@localhost bin]# ./elasticsearch –d

6.测试

[root@localhost elasticsearch-6.3.2]# curl http://192.168.126.193:9200

出现问题:

SpringBoot+ELK+Kafaka_第4张图片

 

主要是由于jvm内存不足引起的。

/usr/local/elasticsearch/elasticsearch-6.3.2/config中找到jvm.options

[root@localhost config]# vi jvm.options

修改成:

-Xms512m

-Xmx512m

默认是
-Xms1g

-Xmx1g

SpringBoot+ELK+Kafaka_第5张图片

 

[root@localhost bin]# ./elasticsearch

SpringBoot+ELK+Kafaka_第6张图片

 

出现上面的问题:

因为,root不允许直接启动。需要创建新用户和并且给用户授权。

(1)以root用户来创建新的用户 , groupadd 添加一个用户组

[root@localhost /]# groupadd elk

(2)添加一个用户,-g是在用户组下 -p是密码(用户为elk,密码elk)

[root@localhost /]# useradd elk -g elk -p elk

(3)进入es的安装目录

[root@localhost elasticsearch]# cd /usr/local/elasticsearch

(4)给用户elk授权

[root@localhost elasticsearch]# chown -R elk:elk elasticsearch-6.3.2/

(5)切换到 elk用户

[root@localhost elasticsearch]# su elk

[elk@localhost bin]$ ./elasticsearch

SpringBoot+ELK+Kafaka_第7张图片

 

[2019-09-06T18:56:32,329][INFO ][o.e.x.s.a.s.FileRolesStore] [vYAPqA0] parsed [0] roles from file [/usr/local/elasticsearch/elasticsearch-6.3.2/config/roles.yml]

[2019-09-06T18:56:33,142][INFO ][o.e.x.m.j.p.l.CppLogMessageHandler] [controller/9584] [Main.cc@109] controller (64 bit): Version 6.3.2 (Build 903094f295d249) Copyright (c) 2018 Elasticsearch BV

[2019-09-06T18:56:33,591][DEBUG][o.e.a.ActionModule       ] Using REST wrapper from plugin org.elasticsearch.xpack.security.Security

[2019-09-06T18:56:33,855][INFO ][o.e.d.DiscoveryModule    ] [vYAPqA0] using discovery type [zen]

[2019-09-06T18:56:34,886][INFO ][o.e.n.Node               ] [vYAPqA0] initialized

[2019-09-06T18:56:34,886][INFO ][o.e.n.Node               ] [vYAPqA0] starting ...

[2019-09-06T18:56:35,165][INFO ][o.e.t.TransportService   ] [vYAPqA0] publish_address {192.168.126.139:9300}, bound_addresses {192.168.126.139:9300}

[2019-09-06T18:56:35,196][INFO ][o.e.b.BootstrapChecks    ] [vYAPqA0] bound or publishing to a non-loopback address, enforcing bootstrap checks

ERROR: [2] bootstrap checks failed

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

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

切换到root用户

[elk@localhost bin]$ su root

设置vm.max_map_count

[root@localhost bin]# sysctl -w vm.max_map_count=262144

SpringBoot+ELK+Kafaka_第8张图片

 

检查配置是否生效

[root@localhost bin]# sysctl -a | grep "vm.max_map_count"

SpringBoot+ELK+Kafaka_第9张图片

 

再次启动报如下所示错误:

[2019-09-06T19:05:18,204][INFO ][o.e.b.BootstrapChecks    ] [vYAPqA0] bound or publishing to a non-loopback address, enforcing bootstrap checks

ERROR: [1] bootstrap checks failed

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

 

SpringBoot+ELK+Kafaka_第10张图片

报错max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]是因为操作系统安全检测配置影响的,需要切换到root用户下做如下配置:

[root@localhost bin]# cd /etc/security/

先做一个配置备份

[root@localhost security]#  cp limits.conf limits.conf.bak

然后编辑limits.conf增加如下配置:

# elasticsearch config start

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

# elasticsearch config end

在次启动:

[elk@localhost bin]$ ./elasticsearch

SpringBoot+ELK+Kafaka_第11张图片

 

 

[2019-09-06T19:13:14,612][INFO ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [vYAPqA0] publish_address {192.168.126.139:9200}, bound_addresses {192.168.126.139:9200}

[2019-09-06T19:13:14,612][INFO ][o.e.n.Node               ] [vYAPqA0] started

6.测试验证

[root@localhost ~]# ps -ef|grep elasticsearch

SpringBoot+ELK+Kafaka_第12张图片

 

http://192.168.126.193:9200/

SpringBoot+ELK+Kafaka_第13张图片

 

开机自启配置

(1)在/etc/init.d/目录下创建elasticsearch自启动脚本

[root@localhost ~]# cd /etc/init.d/

[root@localhost init.d]# vi elasticsearch

SpringBoot+ELK+Kafaka_第14张图片

 

注意:红色地方的配置。

Elasticsearch内容如下所示:

#!/bin/sh
#chkconfig: - 85 15
#description: elasticsearch
#author: fab
 

export JAVA_HOME=/usr/java/jdk1.8.0_211
export JAVA_BIN=/usr/java/jdk1.8.0_211/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

case "$1" in
start)
    cd /usr/local/elasticsearch
    chown -R elk:elk elasticsearch-6.3.2/
    sysctl -w vm.max_map_count=262144
    sysctl -a | grep "vm.max_map_count"
    su elk<

 

(2)修改执行权限

[root@localhost init.d]# chmod +x elasticsearch

(3)增加elasticsearch服务到系统服务中

[root@localhost init.d]# chkconfig --add elasticsearch

(4)设置开机启动elasticsearch服务

[root@localhost init.d]# chkconfig elasticsearch on

(5)自动重启测试

[root@localhost init.d]# reboot

Connection closed by foreign host.

Disconnected from remote host(192.168.126.139) at 11:59:21.

Type `help' to learn how to use Xshell prompt.

[root@localhost ~]# jps

 

Elasticsearch-head插件安装

参考:

https://blog.csdn.net/weixin_40898389/article/details/82776682

在安装elasticsearch—head插件首先需要安装node。

1.在线下载node-v8.11.2-linux-x64.tar.xz

[root@localhost node]# wget https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz

2.解压node-v8.11.2-linux-x64.tar.xz

[root@localhost node]# xz -d node-v8.11.2-linux-x64.tar.xz

第一步解压之后如下所示:

SpringBoot+ELK+Kafaka_第15张图片

 

 [root@localhost node]# tar -xvf node-v8.11.2-linux-x64.tar

SpringBoot+ELK+Kafaka_第16张图片

 

3.创建软连接

[root@localhost node]# ln -s /usr/local/node/node-v8.11.2-linux-x64/bin/node /usr/local/bin/node

[root@localhost node]# ln -s /usr/local/node/node-v8.11.2-linux-x64/bin/npm /usr/local/bin/npm

4.验证

[root@localhost node]# node –v

出现如下所示表示安装node成功

SpringBoot+ELK+Kafaka_第17张图片

 

5. 使用git安装elasticsearch-head

[root@localhost 20190903]# yum install -y epel git

[root@localhost 20190903]# yum install -y npm

[root@localhost 20190903]#git clone git://github.com/mobz/elasticsearch-head.git

[root@localhost 20190903]# cd elasticsearch-head

//设定nodejs安装软件的代理服务器

[root@localhostelasticsearch-head]# npm config set registry https://registry.npm.taobao.org

[root@localhost elasticsearch-head]# npm install

 [root@localhost elasticsearch-head]# npm run start

> elasticsearch-head@0.0.0 start /usr/20190903/elasticsearch-head

> grunt server

>> Local Npm module "grunt-contrib-jasmine" not found. Is it installed?

(node:35271) ExperimentalWarning: The http2 module is an experimental API.

 

Running "connect:server" (connect) task

Waiting forever...

Started connect web server on http://localhost:9100

SpringBoot+ELK+Kafaka_第18张图片

 

6.验证在浏览器输入

http://192.168.126.139:9100/

SpringBoot+ELK+Kafaka_第19张图片

 

搭建Logstash

Logstash安装

1.下载安装包logstash-6.3.2.tar.gz

[root@localhost 20190903]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz

2.解压安装包logstash-6.3.2.tar.gz

[root@localhost 20190903]# tar -zxvf logstash-6.3.2.tar.gz -C /usr/local/logstash/

3.进入解压后的bin目录

[root@localhost 20190903]#cd /usr/local/logstash/logstash-6.3.2/bin

4. 编写配置文件

这个文件不存在需要重新创建。

 [root@localhost bin]# vim logstash.conf

 

input {
  beats {
    port => 5044
  }
     kafka {
        bootstrap_servers => ["192.168.126.139:9092"]
        group_id => "test-consumer-group"
        auto_offset_reset => "latest"
        consumer_threads => 5
        decorate_events => true
        topics => ["user_consumer"]
        type => "bhy"
     }

}
output {
  elasticsearch {
    hosts => ["http://192.168.126.139:9200"]
    index => "memberservice-%{+YYYY.MM.dd}"
  }
}

 

5.启动logstash

[root@localhost bin]# ./logstash -f logstash.conf

如下图所示表示开启lostash成功

SpringBoot+ELK+Kafaka_第20张图片

SpringBoot+ELK+Kafaka_第21张图片

6.创建一个软连接,每次执行命令的时候不用在写安装路劲(默认安装在/usr/local下)

[root@localhost bin]# ln -s /usr/local/logstash/logstash-6.3.2/bin/logstash /usr/local/bin/

执行logstash的命令

 

 

[root@localhost bin]# logstash -e 'input { stdin { } } output { stdout {} }'

7.验证是logstash是否启动

[root@localhost ~]# ps -ef|grep logstash

 

 

开机自启动配置

1.在目录/etc/init.d中创建logstash服务

[root@localhost init.d]# vi logstash

#!/bin/sh
#chkconfig: - 85 15
#description: logstash
#author: fab
 

#logstash安装目录
logstash_HOME=/usr/local/logstash/logstash-6.3.2
export logstash_HOME

case "$1" in
start)
	cd $RABBIT_HOME/bin
    logstash -f logstash.conf
!
    echo "logstash startup"
    ;;  
stop)
    es_pid=`ps aux|grep logstash | grep -v 'grep logstash' | awk '{print $2}'`
    kill -9 $es_pid
    echo "logstash stopped"
    ;;  
restart)
    cd $RABBIT_HOME/bin
    logstash -f logstash.conf
!
    echo "logstash startup"
    ;;  
*)
    echo "start|stop|restart"
    ;;  
esac

exit $?

 

2.修改kibana可执行权限

[root@localhost init.d]# chmod +x logstash

3.将kibana服务添加系统服务中

[root@localhost init.d]# chkconfig --add logstash

4.设置开机启动kibana服务

[root@localhost init.d]# chkconfig logstash on

5.查看是否设置成功

 [root@localhost init.d]# chkconfig --list logstash

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。

      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。

      欲查看对特定 target 启用的服务请执行

      'systemctl list-dependencies [target]'。

 

logstash               0:关 1:关 2:开 3:开 4:开 5:开 6:关

6.开机测试

[root@localhost init.d]# reboot

[root@localhost bin]# ps -elf|grep logstash

 

搭建Kibana

Kibana

1.下载安装包kibana-6.3.2-linux-x86_64.tar.gz

 [root@localhost 20190903]#wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz

2.解压kibana-6.3.2-linux-x86_64.tar.gz

[root@localhost 20190903]# tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz -C /usr/local/kibana/

3.进入解压后的目录

[root@localhost 20190903]# cd /usr/local/kibana/ kibana-6.3.2-linux-x86_64/

4.修改配置文件kibana.yml

[root@localhost kibana-6.3.2-linux-x86_64]# cd config/

[root@localhost config]# vi kibana.yml

SpringBoot+ELK+Kafaka_第22张图片

 

修改成自己的Elasticsearch的IP地址。

5.启动Kibana

[root@localhost kibana-6.3.2-linux-x86_64]# cd bin

后台启动

[root@localhost bin]# ./kibana &

6.验证

[root@localhost bin]# ps -ef|grep kibana

SpringBoot+ELK+Kafaka_第23张图片

SpringBoot+ELK+Kafaka_第24张图片

 

 

出现如上图所示的问题:主要是有与Elasticsearch和Kibana的版本不一致导致的。

在启动kibana之后出现如下图所示问题:

SpringBoot+ELK+Kafaka_第25张图片

 

需要修改kibana的配置文件(/usr/local/kibana/kibana-6.3.2-linux-x86_64/config/kibana.yml)和首先启动Elasticserarch。

SpringBoot+ELK+Kafaka_第26张图片

 

在上图所示的红色标记的地方修改成自己的elasticserarch的主机地址既可。

在浏览器输入:

http://192.168.126.139:5601/

SpringBoot+ELK+Kafaka_第27张图片

 

开机自启动配置

1.在目录/etc/init.d中创建kibana服务

[root@localhost init.d]# vi kibana

脚本如下所示:

#!/bin/sh
#chkconfig: - 85 15
#description: kibana
#author: fab
 

#kibana安装目录
KIBANA_HOME=/usr/local/kibana/kibana-6.3.2-linux-x86_64
export KIBANA_HOME

case "$1" in
start)
	cd $RABBIT_HOME/bin
    kibana
!
    echo "kibana startup"
    ;;  
stop)
    es_pid=`ps aux|grep kibana | grep -v 'grep kibana' | awk '{print $2}'`
    kill -9 $es_pid
    echo "kibana stopped"
    ;;  
restart)
    cd $RABBIT_HOME/bin
    kibana
!
    echo "kibana startup"
    ;;  
*)
    echo "start|stop|restart"
    ;;  
esac

exit $?

 

2.修改kibana可执行权限

[root@localhost init.d]# chmod +x kibana

3.将kibana服务添加系统服务中

[root@localhost init.d]# chkconfig --add kibana

4.设置开机启动kibana服务

[root@localhost init.d]# chkconfig kibana on

5.查看是否设置成功

 [root@localhost init.d]# chkconfig --list kibana

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。

      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。

      欲查看对特定 target 启用的服务请执行

      'systemctl list-dependencies [target]'。

 

kibana           0:关 1:关 2:开 3:开 4:开 5:开 6:关

6.开机测试

[root@localhost init.d]# reboot

[root@localhost bin]# ps -elf|grep kibana

 

搭建kafka

由于kafka依赖于zookeeper所以应首先安装zookeeper。

Zk安装

1.下载zk

从官网下载:

http://apache.mirror.colo-serv.net/zookeeper/zookeeper-3.4.14/

2.创建zk安装目录

[root@localhost local]# mkdir zk

3.解压zookeeper-3.4.14

[root@localhost 20190903]# tar -zxvf /usr/20190903/zookeeper-3.4.14.tar.gz -C /usr/local/zk

4.修改配置文件

(1)在zk的安装目录下创建2个文件,一个data,一个logs

[root@localhost zk]# mkdir data

[root@localhost zk]# mkdir logs

(2)备份配置文件

[root@localhost conf]# cp zoo_sample.cfg zoo_sample.cfg.bak

[root@localhost conf]# mv  zoo_sample.cfg zoo.cfg

(3)修改配置文件如下图红色部分所示

SpringBoot+ELK+Kafaka_第28张图片

#指定zk存放数据文件夹的目录为

 

dataDir=/usr/local/zk/data

#指定zk存放日志文件夹的目录为

dataLogDir=/usr/local/zk/logs

5.设置zk自动重启

(1)改系统环境变量,把zk的启动命令加入到系统环境变量中

[root@localhost conf]# vim /etc/profile

SpringBoot+ELK+Kafaka_第29张图片

 

(2) 使profile配置生效

[root@localhost conf]# source  /etc/profile

6.启动zk

[root@localhost zk]# zkserver.sh start

 

此时,即表明zk已经成功启动。

我们还可以使用zkServer.sh status命令来查看zk的运行状态。

 

Kafka安装

Kafka安装

1.下载kafka安装包

 [root@localhost 20190903]# wget http://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz

2.创建kafka安装目录

[root@localhost local]# mkdir kafka

3.解压安装包

[root@localhost 20190903]#tar -zxvf /usr/20190903/kafka_2.11-2.1.0.tgz -C /usr/local/kafka

4. 在kafka安装目录下创建一个目录kafka-logs用于kafka存放文件

[root@localhost kafka]# mkdir kafka-logs

5. 修改kafka配置

(1)修改server.properties配置文件

SpringBoot+ELK+Kafaka_第30张图片

 

修改zk连接地址

 

修改日志位置

SpringBoot+ELK+Kafaka_第31张图片

 

6.启动kafka

 [root@localhost bin]# ./kafka-server-start.sh -daemon /usr/local/kafka/kafka_2.11-2.1.0/config/server.properties

使用jps命令检查是否启动成功,如图表示启动成功:

 

7.通过Logstach测试Kafka

 

SpringBoot+ELK+Kafaka_第32张图片

 

开机自启动配置

1.在目录/etc/init.d中创建kafka服务

[root@localhost init.d]# vi kafka

脚本如下所示:

#!/bin/sh
#
# chkconfig: 345 99 01
# description: Kafka
#
# File : Kafka
#
# Description: Starts and stops the Kafka server
#


KAFKA_HOME=/usr/local/kafka/kafka_2.11-2.1.0
export KAFKA_HOME
# See how we were called.
case "$1" in

  start)
    echo "Starting Kafka:"
	cd $KAFKA_HOME/bin
	./kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
    ;;

  stop)
    echo "Stopping Kafka: "
	es_pid=`ps aux|grep kafka | grep -v 'grep kafka' | awk '{print $2}'`
    kill -9 $es_pid
    ;;  
  restart)
    echo "restart Kafka: " 
	cd $KAFKA_HOME/bin
	./kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
    ;;
  *)
    echo "Usage: cassandra {start|stop|restart}"
    ;;

esac

 

2.修改kafka服务可执行权限

[root@localhost init.d]# chmod +x kafka

3.将kafka服务添加系统服务中

[root@localhost init.d]# chkconfig --add kafka

4.设置开机启动kafka服务

[root@localhost init.d]# chkconfig kafka on

5.查看是否设置成功

 [root@localhost init.d]# chkconfig --list kafka

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。

      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。

      欲查看对特定 target 启用的服务请执行

      'systemctl list-dependencies [target]'。

 

kafka             0:关 1:关 2:开 3:开 4:开 5:开 6:关

6.开机测试

[root@localhost init.d]# reboot

[root@localhost bin]# ps -elf|grep kafka

 

SpringBoot+ELK+Kafaka_第33张图片

 

 

验证SpringBoot+ELK+Kafka

 

修改Logstach配置文件

在Logstach中创建的/usr/local/logstash/logstash-6.3.2/bin目录下创建logstash.conf配置文件

input {
  beats {
    port => 5044
  }
     kafka {
        bootstrap_servers => ["192.168.126.139:9092"]
        group_id => "test-consumer-group"
        auto_offset_reset => "latest"
        consumer_threads => 5
        decorate_events => true
        topics => ["user_consumer"]
        type => "bhy"
     }

}
output {
  elasticsearch {
    hosts => ["http://192.168.126.139:9200"]
    index => "memberservice-%{+YYYY.MM.dd}"
  }
}

 

 

创建Springboot项目

 (1) 创建Springboot项目,添加web以及Kafka依赖

       

            org.springframework.boot

            spring-boot-starter-web

       

       

            org.springframework.kafka

            spring-kafka

       

       

            org.springframework.boot

            spring-boot-starter-test

            test

       

(2)修改yml文件

spring:

  kafka:

    producer:

      bootstrap-servers: 192.168.126.139:9092

      key-serializer: org.apache.kafka.common.serialization.StringSerializer

      value-serializer: org.apache.kafka.common.serialization.StringSerializer

(3)编写控制类,实现消息的发送

@RestController

public class KafkaController {

 

    @Resource

    private KafkaTemplate kafkaTemplate;

 

    @RequestMapping("/sendMsgToKafka")

    public String sendMsgToKafka() {

            kafkaTemplate.send("user_consumer", "dm", "hello,kafka!---->");

        return "发送消息到Kafka完毕";

    }

 

}

 

启动

启动Elasticsearch、启动Kibana、启动Logstash、启动Springboot项目。

验证

ES中显示:

SpringBoot+ELK+Kafaka_第34张图片

工程中显示:

SpringBoot+ELK+Kafaka_第35张图片

Kibana中显示:

 

 

SpringBoot+ELK+Kafaka_第36张图片

 

 

 

你可能感兴趣的:(Elasticsearch,Logstash,Kibana)