ELK+kafka集群搭建

环境部署:
es1-192.168.120.128-Elasticsearch5.6/zookeeper2.11-1.1.0/kafka_2.11-1.1.0
es2-192.168.120.129-Elasticsearch5.6/zookeeper2.11-1.1.0/kafka_2.11-1.1.0
es3-192.168.120.130-Elasticsearch5.6/zookeeper2.11-1.1.0/kafka_2.11-1.1.0
logstash-192.168.120.131-Logstash5.6.9
kibana-192.168.120.132-kibana5.6.9
filebeat-192.168.120.133-Filebeat5.6.7
环境说明:需要关闭防火墙

[root@es-1 ~]# systemctl stop firewalld
[root@es-1 ~]# systemctl disable firewalld

软件包链接:
链接:https://pan.baidu.com/s/1sQ5fcfWXPMT1pHiSEgQ2Vg
提取码:durp

搭建kafka集群

1、安装java

[root@es-1 ~]# yum install -y java-1.8.0
[root@es-1 ~]# java -version

2、下载安装kafka****(kafka_2.11-1.1.0****)

[root@es-1 ~]# cd /opt/elk/
[root@es-1 elk]# ls
kafka_2.11-1.1.0.tgz       
[root@es-1 elk]# tar -xvf kafka_2.11-1.1.0.tgz

3、配置zookeeper

[root@es-1 ~]# mkdir /opt/elk/kafka/zookeeper/{data,logs} -p
[root@es-1 ~]# echo 1 > /opt/elk/kafka/zookeeper/data/myid                #集群其他服务器需要改动
[root@es-1 ~]# cd /opt/elk/kafka_2.11-1.1.0/config/

[root@es-1 config]# vim zookeeper.properties

#客户端连接端口


maxClientCnxns=0

#zk存放数据的目录,zk 需要有一个叫做myid的文件也是放到(必须)这个目录下

dataDir=/opt/elk/kafka/zookeeper/data                 

dataLogDir=/opt/elk/kafka/zookeeper/logs

clientPort=2181

#最大客户端连接数

maxClientCnxns=20

#是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔

tickTime=2000

#此配置表示,允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

initLimit=10

#此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

syncLimit=5

#server.myid=ip:followers_connect to the leader:leader_election # server 是固定的,myid 是需要手动分配,第一个端口是follower是链接到leader的端口,第二个是用来选举leader 用的port

server.1=192.168.120.128:2888:3888

server.2=192.168.120.129:2888:3888

server.3=192.168.120.130:2888:3888

4、配置kafka

[root@es-1 ~]# cd /opt/elk/kafka_2.11-1.1.0/config/

[root@es-1 config]# vim server.properties

#每个server需要单独配置broker id,如果不配置系统会自动配置。

broker.id=0 ##集群其他服务器需要改动

#消费者的访问端口,logstash或者elasticsearch

listeners=PLAINTEXT://192.168.120.128:9092 ##集群其他服务器需要改动

#接收和发送网络信息的线程数

num.network.threads=3

#服务器用于处理请求的线程数,其中可能包括磁盘I/O。

num.io.threads=8

#套接字服务器使用的发送缓冲区(SO_SNDBUF)

socket.send.buffer.bytes=102400

#套接字服务器使用的接收缓冲区(SO_RCVBUF)

socket.receive.buffer.bytes=102400

#套接字服务器将接受的请求的最大大小(防止OOM)。

socket.request.max.bytes=104857600

#以逗号分隔的目录列表,其中存储日志文件。

log.dirs=/usr/local/kafka/logs #此目录要先创建,不会自动创建。(如果不行就关闭此选项)

num.partitions=1

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

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1
zookeeper.connect=192.168.120.128:2181,192.168.120.129:2181,192.168.120.130:2181

zookeeper.connection.timeout.ms=6000

group.initial.rebalance.delay.ms=0
[root@es-1 ~]# mkdir -p /usr/local/kafka/logs/

5、配置集群其他节点
打包es1的/opt/elk目录

[root@es1 opt]# for i in {129,130}
> do 
> scp /opt/elk.tar [email protected].$i:/opt/
> done

es2、es3解压/opt/elk.tar,修改zookeeper的myid,kafka的broker.id和listeners

6、启动kafka 集群(顺序是先启动zk ,然后再启动kafka )
①启动zk(如果启动失败,则有可能配置文件出错)

[root@es-1 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/zookeeper-server-start.sh zookeeper.properties >>/dev/null 2>&1 &

[root@es-2 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/zookeeper-server-start.sh zookeeper.properties >>/dev/null 2>&1 &

[root@es-3 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/zookeeper-server-start.sh zookeeper.properties >>/dev/null 2>&1 &

②验证是否正确

[root@es-1 ~]# yum -y install nc              

\#使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。

[root@es-1 ~]# echo ruok|nc 127.0.0.1 2181

imok[root@es-1 ~]#

[root@es-1 ~]# echo conf | nc 127.0.0.1 2181

clientPort=2181

dataDir=/opt/elk/kafka/zookeeper/data/version-2

dataLogDir=/opt/elk/kafka/zookeeper/logs/version-2

tickTime=2000

maxClientCnxns=20

minSessionTimeout=4000

maxSessionTimeout=40000

serverId=1

initLimit=10

syncLimit=5

electionAlg=3

electionPort=3888

quorumPort=2888

peerType=0

echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
echo kill | nc 127.0.0.1 2181 ,关掉server
echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相

③启动kafka

[root@es-1 ~]#nohup /opt/elk/kafka_2.11-1.1.0/bin/kafka-server-start.sh /opt/elk/kafka_2.11-1.1.0/config/server.properties >>/dev/null 2>&1 &

[root@es-2 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/kafka-server-start.sh /opt/elk/kafka_2.11-1.1.0/config/server.properties >>/dev/null 2>&1 &

[root@es-3 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/kafka-server-start.sh /opt/elk/kafka_2.11-1.1.0/config/server.properties >>/dev/null 2>&1 &

④检测kafka

[root@es-1 bin]# /opt/elk/kafka_2.11-1.1.0/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

Created topic "test".

[root@es-1 ~]# /opt/elk/kafka_2.11-1.1.0/bin/kafka-topics.sh --zookeeper 192.168.205.155:2181 --list

test

安装Elasticsearch

1、安装java

[root@es-1 ~]# yum install -y java-1.8.0
[root@es-1 ~]# java -version

2、导入Elasticsearch PGP密钥

[root@es-1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

3、建立rpm包的repo

[root@es-1 ~]# vim /etc/yum.repos.d/elasticsearch.repo 

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

4、安装elasticsearch

[root@es-1 ~]# yum -y install elasticsearch

5、编辑配置文件(省略号代表有其他内容,但是不用修改)

[root@es-1 ~]# vim /etc/elasticsearch/elasticsearch.yml

# ---------------------------------- Cluster -----------------------------------
…………
#cluster.name: my-application
cluster.name: ELK               #起名三个节点要一致
…………
# ------------------------------------ Node ------------------------------------
…………
#node.name: node-1
node.name: es-1             #节点名:三个节点不一致
…………
# ---------------------------------- Network -----------------------------------
……
#network.host: 192.168.0.1
network.host: 192.168.120.128       #当前IP地址
#
# Set a custom port for HTTP:
#http.port: 9200                    #端口号:默认9200
……
# --------------------------------- Discovery ----------------------------------
…………
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.zen.ping.unicast.hosts: ["192.168.120.128","192.168.120.129","192.168.120.130"]
#集群节点IP地址

…………

6、启动、添加开机自启

[root@es-1 ~]# systemctl daemon-reload          #重载所有修改过的配置文件(刷新配置)
[root@es-1 ~]# systemctl start elasticsearch        #开启服务
[root@es-1 ~]# systemctl enable elasticsearch       #设置开机自启动
[root@es-1 ~]#  systemctl status elasticsearch     #检查状态

7、查看端口状态

[root@es-1 ~]# netstat -ntlt
tcp6       0      0 192.168.205.155:9200    :::*                    LISTEN     
tcp6       0      0 192.168.205.155:9300    :::*                    LISTEN    

#9200是默认端口
#9300是集群通信端口

8、其他节点配置(es2、es3)
和es-1步骤相同。不同之处为配置文件node.name:、network.host:

9、相关命令
检查Elasticsearch是否运行

[root@es-1 ~]# curl -X GET "192.168.120.128:9200/"

查询集群状态

[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cat/nodes'  #任选一台机器执行
#带*号的是自动选举出来的master

[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cat/nodes?v'

[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cluster/state/nodes?pretty'
{
  "cluster_name" : "ELK",           #名字
  "nodes" : {
    "fkzXpqmxTkCFdYOUqkWw4g" : {            #ID值
      "name" : "es-3",                      #node名字
      "ephemeral_id" : "c0tVVqFvRUq9vBY0FAGW2Q",        #id
      "transport_address" : "192.168.205.157:9300", #集群通讯地址
      "attributes" : { }
    },
    "4ZbLhzt6Q5GK4kyICnYWHg" : {            #ID值
      "name" : "es-2",                      #node名字
      "ephemeral_id" : "E28qTcY_QxWHuZkENO9-gQ",        #id
      "transport_address" : "192.168.205.156:9300", #集群通讯地址
      "attributes" : { }
    },
    "SVXe8qm9RACCRl1Zb1qs8w" : {            #ID值
      "name" : "es-1",                      #node名字
      "ephemeral_id" : "w19b7MK_RO221SrwarV8Cg",        #id
      "transport_address" : "192.168.205.155:9300", #集群通讯地址
      "attributes" : { }
    }
  }
}

查询集群中的master

[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cluster/state/master_node?pretty'
[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cat/master?v'

查询集群的健康状态

[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cat/health?v'
[root@es-1 ~]# curl -XGET 'http://192.168.120.128:9200/_cluster/health?pretty'

10、相关文件路径
/etc/elasticsearch/elasticsearch.yml —主配置文件
/etc/elasticsearch/jvm.options —jvm参数配置文件
/etc/elasticsearch/log4j2.properties ----日志配置文件
/etc/sysconfig/elasticsearch —系统配置文件
/usr/share/elasticsearch/bin —二进制脚本文件
/var/lib/elasticsearch —在节点上分配的每个索引/分片的数据文件的位置。
/var/log/elasticsearch —日志文件位置

/usr/share/elasticsearch/plugins —插件目录
/etc/elasticsearch/scripts —脚本文件位置

logstash部署

1、安装java

[root@logstash ~]# yum install -y java-1.8.0
[root@logstash ~]# java -version

2、导入Elasticsearch PGP密钥

[root@ logstash ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

3、建立rpm包的repo

[root@ logstash ~]# vim /etc/yum.repos.d/logstash.repo 

[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
4、安装logstash
[root@logstash ~]# yum -y install logstash

5、添加配置文件logstash.conf (只是简单配置看出效果,后续更新使用)

[root@logstash ~]# cd /etc/logstash/conf.d/
[root@logstash conf.d]# vim logstash.conf   #新增配置文件logstash.conf,文件名可自己定义
input {
  kafka {
    bootstrap_servers => "192.168.120.128:9092,192.168.120.129:9092,192.168.120.130:9092"
    topics => ["credit"]            ##和filebeat配置文件对应的
#    group_id => "test-consumer-group"
#    codec => "plain"
#    consumer_threads => 1
    decorate_events => true

  }
}

output {
  elasticsearch {
    hosts => ["192.168.120.128:9200","192.168.120.129:9200","192.168.120.130:9200"]
    index => "logs-%{+YYYY.MM.dd}"
    workers => 1
  }
}

6、启动、添加开机自启

[root@logstash ~]# systemctl start logstash
[root@logstash ~]# systemctl enable logstash
[root@logstash ~]# systemctl status logstash

7、检测配置文件是否正确(出现OK正确)

[root@logstash ~]# /usr/share/logstash/bin/logstash -t --path.settings /etc/logstash/  --verbose
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK

安装kibana

1、导入kabana 密钥

[root@ kibana ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2、建立rpm 包的repo

[root@ kibana ~]# vim /etc/yum.repos.d/kibana.repo

[kibana-5.x]

name=Kibana repository for 5.x packages

baseurl=https://artifacts.elastic.co/packages/5.x/yum

gpgcheck=1

gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch

enabled=1

autorefresh=1

type=rpm-md

3、安装kibana

[root@kibana ~]# yum -y install kibana

4、修改配置文件/etc/kibana/kibana.yml

[root@kibana ~]# vim /etc/kibana/kibana.yml

# Kibana is served by a back end server. This setting specifies the port to use.

#server.port: 5601 ##默认端口

…………

#server.host: "localhost"

server.host: "192.168.120.132" #本机IP

…………

#elasticsearch.url: "http://localhost:9200"

elasticsearch.url: http://192.168.120.128:9200#es的地址

…………

5、启动、添加开机自启

[root@kibana ~]# systemctl start kibana
[root@kibana ~]# systemctl enable kibana
[root@kibana ~]# systemctl status kibana

6、添加nginx 反向代理

[root@kibana ~]# yum -y install epel-release

[root@kibana ~]# yum -y install nginx httpd-tools

7、更改nginx 配置文件(删除默认的配置文件,之后重新编写自己的配置文件)

[root@kibana ~]# vim /etc/nginx/nginx.conf
[root@kibana ~]# cd /etc/nginx/conf.d/
[root@kibana conf.d]# vim kibana.conf
server {
        listen 80;
        server_name kibana;
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/kibana-user;
        location / {
                proxy_pass http://192.168.205.161:5601;    
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}

8、生成页面登录用户认证文件

[root@kibana ~]# htpasswd -cm /etc/nginx/kibana-user kibana
New password: 
Re-type new password: 
Adding password for user kibana

9、启动、开机自启动
[root@kibana ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kibana ~]# systemctl start nginx
[root@kibana ~]# systemctl enable nginx
[root@kibana ~]# systemctl status nginx

10、浏览器登录kibana

你可能感兴趣的:(ELK)