ELK+Filebead+zookeeper+kafka

目录

一、日志分析平台

二、ELK+Filebeat+Kafka+Zookeeper架构

三、ELK+Filebeat+Kafka+Zookeeper

本实验基于ELK已经搭好的情况下

1.3台安装zookeeper

(1)解压安装zookeeper软件包

(2)修改Zookeeper配置配置文件

(3) 设置myid号以及启动脚本

(4)3台机器启动zookeeper

2.安装kafka

(1)修改配置文件

(2)将相关命令加入到系统环境当中

(3)启动kafka

四、Kafka 命令行操作

1.创建topic

2.测试topic

五、配置数据采集层filebeat

1. 定制日志格式

2.上传、解压安装包

3.修改配置文件filebeat.yml

4.启动filebeat

5.在kafka上创建一个话题nginx-es

6.修改logstash的配置文件

7.验证网页


一、日志分析平台

        随着业务量的增长,每天业务服务器将会产生上亿条的日志,单个日志文件达几个GB,这时发现用Linux自带工具,cat grep awk 分析越来越力不从心了,而且除了服务器日志,还有程序报错日志,分布在不同的服务器,查阅繁琐。

待解决的问题:

① 大量不同种类的日志成为了运维人员的负担,不方便管理;
② 单个日志文件巨大,无法使用常用的文本工具分析,检索困难;
③ 日志分布在多台不同的服务器上,业务一旦出现故障,需要一台台查看日志。

二、ELK+Filebeat+Kafka+Zookeeper架构

ELK+Filebead+zookeeper+kafka_第1张图片

这个架构图从左到右,总共分为5层,每层实现的功能和含义

第一层、数据采集层
数据采集层位于最左边的业务服务器集群上,在每个业务服务器上面安装了filebeat做日志收集,然后把采集到的原始日志发送到Kafka+zookeeper集群上。

第二层、消息队列层
原始日志发送到Kafka+zookeeper集群上后,会进行集中存储,此时,filbeat是消息的生产者,存储的消息可以随时被消费。

第三层、数据分析层
Logstash作为消费者,会去Kafka+zookeeper集群节点实时拉取原始日志,然后将获取到的原始日志根据规则进行分析、清洗、过滤,最后将清洗好的日志转发至Elasticsearch集群。

第四层、数据持久化存储
Elasticsearch集群在接收到logstash发送过来的数据后,执行写磁盘,建索引库等操作,最后将结构化的数据存储到Elasticsearch集群上。

第五层、数据查询、展示层
Kibana是一个可视化的数据展示平台,当有数据检索请求时,它从Elasticsearch集群上读取数据,然后进行可视化出图和多维度分析。

三、ELK+Filebeat+Kafka+Zookeeper

 ip地址 所属集群 安装软件包
192.168.22.128 Elasticsearch Elasticsearch集群
192.168.22.126 Elasticsearch Elasticsearch集群
192.168.22.228 Logstash 数据转发
192.168.22.168 kafka+zookeeper kafka+zookeeper
192.168.22.186 kafka+zookeeper kafka+zookeeper
192.168.22.196 kafka+zookeeper kafka+zookeeper
192.168.22.206 filebeat 配置数据采集层

本实验基于ELK已经搭好的情况下

1.3台安装zookeeper

Zookpeer下载地址:apache-zookeeper-3.7.1-bin.tar.gz

(1)解压安装zookeeper软件包

cd /opt

tar zxf apache-zookeeper-3.7.1-bin.tar.gz  解包
mv apache-zookeeper-3.7.1-bin /usr/local/zookeeper-3.7.1 #将解压的目录剪切到/usr/local/
cd /usr/local/zookeeper-3.7.1/conf/
cp zoo_sample.cfg zoo.cfg  备份复制模板配置文件为zoo.cfg

(2)修改Zookeeper配置配置文件

cd /usr/local/zookeeper-3.5.7/conf    #进入zookeeper配置文件汇总

ls 后可以看到zoo_sample.cfg模板配置文件

cp zoo_sample.cfg zoo.cfg 复制模板配置文件为zoo.cfg

vim zoo.cfg

tickTime=2000     
通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒

initLimit=10      
Leader和Follower初始连接时能容忍的最多心跳数( tickTime的数量),这里表示为10*2s 

syncLimit=5     
Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer

dataDir=/usr/local/zookeeper-3.7.1/data       
修改,指定保存Zookeeper中的数据的目录,目录需要单独创建

dataLogDir=/usr/local/zookeeper-3.7.1/1ogs    
添加,指定存放日志的目录,目录需要单独创建

clientPort=2181       
客户端连接端口

#添加集群信息
server.1=192.168.22.168:3188:3288
server.2=192.168.22.186:3188:3288
server.3=192.168.22.196:3188:3288

把配置好的文件发送给另外2台机器

scp zoo.cfg [email protected]:/usr/local/zookeeper-3.5.7/conf

scp zoo.cfg [email protected]:/usr/local/zookeeper-3.5.7/conf

创建数据目录和日志目录

mkdir /usr/local/zookeeper-3.7.1/data
mkdir /usr/local/zookeeper-3.7.1/logs

ls /usr/local/zookeeper-3.7.1/ 查看是否创建

(3) 设置myid号以及启动脚本

到这里就不要设置同步了,下面的操作,做好一台机器一台机器的配置。

echo 1 >/usr/local/zookeeper-3.7.1/data/myid
node1上配置

echo 2 >/usr/local/zookeeper-3.7.1/data/myid
node2上配置

echo 3 >/usr/local/zookeeper-3.7.1/data/myid
node3上配置

(4)3台机器启动zookeeper

3台节点需要执行的脚本

配置启动脚本,脚本在开启启动执行的目录中创建

vim /etc/init.d/zookeeper

#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
    echo "----------zookeeper启动----------"
    $ZK_HOME/bin/zkServer.sh start
;;
stop)
    echo "---------- zookeeper停止-----------"
    $ZK_HOME/bin/zkServer.sh stop
;;
restart)
    echo "---------- zookeeper 重启------------"
    $ZK_HOME/bin/zkServer.sh restart
;;
status)
    echo "---------- zookeeper 状态------------"
    $ZK_HOME/bin/zkServer.sh status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac

cd /usr/local/zookeeper-3.7.1/bin

在节点1服务操作

chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper       加入到系统管理

service zookeeper start  启动服务

service zookeeper status  查看状态后是follower
 

在节点2服务操作

chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper        加入到系统管理

service zookeeper start  启动服务

service zookeeper status  查看状态后 是 leader     第二台启动的,是leader

在节点3服务操作

chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper       加入到系统管理

service zookeeper start  启动服务

service zookeeper status  查看状态后 是 follower

2.安装kafka

tar zxf kafka_2.13-2.7.1.tgz

mv kafka_2.13-2.7.1 /usr/local/kafka

(1)修改配置文件

cd /usr/local/kafka/config/

cp server.properties server.properties.bak
vim server.properties

192.168.22.168

21行 broker.id=0

31行 listeners=PLAINTEXT://192.168.22.168:9092

123行 zookeeper.connect=192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181

192.168.22.186

21行 broker.id=0

31行 listeners=PLAINTEXT://192.168.22.186:9092

123行 zookeeper.connect=192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181

192.168.22.196

21行 broker.id=0

31行 listeners=PLAINTEXT://192.168.22.196:9092

123行 zookeeper.connect=192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181

(2)将相关命令加入到系统环境当中

vim /etc/profile   末行加入
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin

source /etc/profile

(3)启动kafka

cd /usr/local/kafka/config/
kafka-server-start.sh -daemon server.properties
netstat -antp | grep 9092

四、Kafka 命令行操作

创建topic

kafka-topics.sh --create --zookeeper 192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181 --replication-factor 2 --partitions 3 --topic test
–zookeeper:定义 zookeeper 集群服务器地址,如果有多个 IP 地址使用逗号分割,一般使用一个 IP 即可
–replication-factor:定义分区副本数,1 代表单副本,建议为 2
–partitions:定义分区数
–topic:定义 topic 名称
查看当前服务器中的所有 topic

kafka-topics.sh --list --zookeeper 192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181
查看某个 topic 的详情

kafka-topics.sh  --describe --zookeeper 192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181
发布消息

kafka-console-producer.sh --broker-list 192.168.22.168:9092,192.168.22.186:9092,192.168.22.196:9092  --topic test
消费消息

kafka-console-consumer.sh --bootstrap-server 192.168.22.168:9092,192.168.22.186:9092,192.168.22.196:9092 --topic test --from-beginning
 

–from-beginning:会把主题中以往所有的数据都读取出来

修改分区数

kafka-topics.sh 
--zookeeper 192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181 --alter --topic test --partitions 6

删除 topic

kafka-topics.sh 
--delete --zookeeper 192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181 --topic test

1.创建topic

pwd
/usr/local/kafka/bin

kafka-topics.sh --create --zookeeper \
> 192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181 \
> --partitions 3 \
> --replication-factor 2 \
> --topic test
Created topic test.

kafka-topics.sh 
--describe --zookeeper 192.168.100.168:2181

2.测试topic

发布消息

kafka-console-producer.sh 
--broker-list 192.168.22.168:9092,192.168.22.186:9092,192.168.22.196:9092 --topic test

kafka-console-producer.sh --broker-list 192.168.22.186:9092 --topic test

消费消息

kafka-console-consumer.sh --bootstrap-server 192.168.22.186.9092 –topic test --from-beginning

li

a

v

五、配置数据采集层filebeat

1. 定制日志格式

vim /etc/nginx/nginx.conf

log_format  json '{"@timestamp":"$time_iso8601",'
                           '"@version":"1",'
                           '"client":"$remote_addr",'
                           '"url":"$uri",'
                           '"status":"$status",'
                           '"domain":"$host",'
                           '"host":"$server_addr",'
                           '"size":$body_bytes_sent,'
                           '"responsetime":$request_time,'
                           '"referer": "$http_referer",'
                           '"ua": "$http_user_agent"'
               '}';

    access_log  /var/log/nginx/access.log  json;

2.上传、解压安装包

cd /opt  
tar zxf filebeat-6.5.4-linux-x86_64.tar.gz  解压
mv filebeat-6.5.4-linux-x86_64 /usr/local/filebeat   剪切位置

ls /usr/local 

3.修改配置文件filebeat.yml

cd /usr/local/filebeat

vim filebeat.yml

- type: log            21行,指定log类型,从日志文件中读取消息
  enabled: true        24行,开启日志收集功能,默认为false
  paths:               27行

  - /var/log/httpd/access_log    28行,指定监控的日志文件

tags:["access"]               29行

fields:                       31行
   enable                     32行 
paths:                        33行 
  - /var/log/httpd/error_log  34行

tags: ["error"]  35行

output.kafka:   153行

enable: true    154行

hosts: ["192.168.22.168:9092,192.168.22.186:9092,192.168.22.196:9092"]

4.启动filebeat

./filebeat -c filebeat.yml &  后台启动
netstat -natp | grep filebeat

5.在kafka上创建一个话题nginx-es

kafka-topics.sh --create --zookeeper 
192.168.22.168:2181,192.168.22.186:2181,192.168.22.196:2181 
--replication-factor 1 --partitions 1 –topic nginx-es

6.修改logstash的配置文件

vim /etc/logstash/conf.d/nginxlog.conf

input{
kafka{
    topics=>"nginx-es"

   #codex=>"json"

  decorate_events=>true

 bootstrap_servers=>"192.168.22.168:9092,192.168.22.186:9092,192.168.22.196:9092"

}

}

output {
 elasticsearch {
 hosts=>["192.168.22.128:9200"]

 index=>'nginx-%{+YYYY-MM-dd}'

}

}

systemctl restart logstash

7.验证网页

ELK+Filebead+zookeeper+kafka_第2张图片

ELK+Filebead+zookeeper+kafka_第3张图片

ELK+Filebead+zookeeper+kafka_第4张图片

你可能感兴趣的:(服务器,kafka,java-zookeeper,elk)