搭建ELK+Filebead+zookeeper+kafka实验

news2024/12/26 3:32:17

一、ELK+Filebead+zookeeper+kafka架构

第一层:数据采集层(Filebeat)

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

第二层:消息队列层(kafka+zookeeper集群)

  • 原始日志发送到kafka+zookeeper集群上后,会进行集中存储,此时filebead是消息的生产者,存储的消息可以随时被消费。

第三层:数据分析层(Logstash)

  • logstash作为消费者,回去kafka+zookeeper集群节点时实拉去原始日志,然后将获取到的原始日志根据规则进行分析、格式化处理,最后将格式化的日志转发至Elasticsearch集群中。

第四层:数据持久化存储(Elasticsearch集群

  • Elasticsearch集群接收到logstash发送过来的数据后,执行写入磁盘,建立索引等操作,最后将结构化数据存储到Elasticsearch集群上。

第五层:数据查询,展示层(kibana)

  • kibana是一个可视化的数据展示平台,当有数据检索请求时,它从Elasticsearch集群上读取数据,然后进行可视化出图和多维度分析.

二、部署实验

主机名ip地址所属集群安装软件包
filebead192.168.247.20数据采集级层filebead+apache
kafka1192.168.247.21kafka+zookeeper集群kafka+zookeeper
kafka2192.168.247.22kafka+zookeeper集群kafka+zookeeper
kafka3192.168.247.23kafka+zookeeper集群kafka+zookeeper
logstash192.168.247.60数据处理层logstash
node1192.168.247.70ES集群Eslasticsearch+node+phantomis+head
node2192.168.247.80ES集群+kibana展示Elasticsearch+node+phantomis+head+kibana

1、安装kafaka+zookeeper集群(192.168.247.21、192.168.247.22、192.168.247.23)

1.1 安装zookeeper集群

  1. 关闭防火墙和安全机制
  2. 下载安装依赖环境
//关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
 
//安装 JDK
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
 
  1. 安装软件
  2. 修改配置文件
方法一:下载安装包
官方下载地址:https://archive.apache.org/dist/zookeeper/
 
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
 
方法二:或者直接将软件包上传到/opt目录下。
 
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7

修改配置文件
cd /usr/local/zookeeper-3.5.7/conf
cp zoo_sample.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.5.7/data       
#●修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
dataLogDir=/usr/local/zookeeper-3.5.7/1ogs    
#●添加,指定存放日志的目录,目录需要单独创建
clientPort=2181      #客户端连接端口
 
#添加集群信息
server.1=192.168.247.21:3188:3288
server.2=192.168.247.22:3188:3288
server.3=192.168.247.23:3188:3288
 
  1. 拷贝配置好的 Zookeeper 配置文件到其他机器上
  2. 在每个节点上创建数据目录和日志目录
  3. 设置三台机器的myid
//拷贝配置好的 Zookeeper 配置文件到其他机器上
scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.247.22:/usr/local/zookeeper-3.5.7/conf/
scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.247.23:/usr/local/zookeeper-3.5.7/conf/

//在每个节点上创建数据目录和日志目录
mkdir /usr/local/zookeeper-3.5.7/data
mkdir /usr/local/zookeeper-3.5.7/logs

//在每个节点的dataDir指定的目录下创建一个 myid 的文件
echo 1 > /usr/local/zookeeper-3.5.7/data/myid
echo 2 > /usr/local/zookeeper-3.5.7/data/myid
echo 3 > /usr/local/zookeeper-3.5.7/data/myid
  1. 配置 Zookeeper 启动脚本
  2. 设置开机自启
  3. 分别启动 Zookeeper
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

//	设置开机自启
chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper

//分别启动 Zookeeper
service zookeeper start

//查看当前状态
service zookeeper status

1.2 部署 kafka 集群

  1. 安装软件
  2. 修改配置文件
方法一:下载安装包
官方下载地址:http://kafka.apache.org/downloads.html

cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2.13-2.7.1.tgz

方法二:或者直接将软件包上传到/opt目录下。
cd /opt/
tar zxvf kafka_2.13-2.7.1.tgz
mv kafka_2.13-2.7.1 /usr/local/kafka
  • kafka1配置文件修改
//修改配置文件
cd /usr/local/kafka/config/
cp server.properties{,.bak}

vim server.properties
broker.id=0    ●21行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 
listeners=PLAINTEXT://192.168.247.21:9092    ●31行,指定监听本机的IP和端口
log.dirs=/usr/local/kafka/logs        #60行,kafka运行日志存放的路径,也是数据存放的路径


zookeeper.connect=192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181    ●123行,配置连接Zookeeper集群地址
  • kafka2配置文件修改
//修改配置文件
cd /usr/local/kafka/config/
cp server.properties{,.bak}

vim server.properties
broker.id=1    ●21行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 
listeners=PLAINTEXT://192.168.247.22:9092    ●31行,指定监听本机的IP和端口
log.dirs=/usr/local/kafka/logs        #60行,kafka运行日志存放的路径,也是数据存放的路径


zookeeper.connect=192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181    ●123行,配置连接Zookeeper集群地址
  • kafka3配置文件修改
//修改配置文件
cd /usr/local/kafka/config/
cp server.properties{,.bak}

vim server.properties
broker.id=2    ●21行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 
listeners=PLAINTEXT://192.168.247.23:9092    ●31行,指定监听本机的IP和端口
log.dirs=/usr/local/kafka/logs        #60行,kafka运行日志存放的路径,也是数据存放的路径


zookeeper.connect=192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181    ●123行,配置连接Zookeeper集群地址
  1. 修改环境变量
  2. 配置 Zookeeper 启动脚本
  3. 设置开机自启,分别启动 Kafka
//修改环境变量
vim /etc/profile
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin

source /etc/profile

//配置 Zookeeper 启动脚本
vim /etc/init.d/kafka
#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/usr/local/kafka'
case $1 in
start)
	echo "---------- Kafka 启动 ------------"
	${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
;;
stop)
	echo "---------- Kafka 停止 ------------"
	${KAFKA_HOME}/bin/kafka-server-stop.sh
;;
restart)
	$0 stop
	$0 start
;;
status)
	echo "---------- Kafka 状态 ------------"
	count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
	if [ "$count" -eq 0 ];then
        echo "kafka is not running"
    else
        echo "kafka is running"
    fi
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac


//设置开机自启
chmod +x /etc/init.d/kafka
chkconfig --add kafka

//分别启动 Kafka
service kafka start

//查看端口
netstat -antp |grep 9092

1.2.1 Kafka 命令行操作

创建topic

kafka-topics.sh --create --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181 --replication-factor 2 --partitions 3 --topic test

#--zookeeper:定义zookeeper集群服务器地址,如果有多个ip以逗号分隔。
#--replication-factor:定义分区副本,1代表但副本,建议为2
#--partitions: 定义分区数
#--topic :定义topic名称

查看当前服务器中的所有topic

kafka-topics.sh --list --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181

查看某个 topic 的详情

kafka-topics.sh --describe --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181

发布消息

kafka-console-producer.sh --broker-list 192.168.247.21:9092,192.168.247.22:9092,192.168.247.23:9092  --topic test

消费消息

kafka-console-consumer.sh --bootstrap-server 192.168.247.21:9092,192.168.247.22:9092,192.168.247.23:9092 --topic test --from-beginning

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

修改分区数

kafka-topics.sh --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181 --alter --topic test --partitions 6

删除 topic

kafka-topics.sh --delete --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181 --topic test

2、部署Filebead(192.168.247.20)

  1. 关闭防火墙
  2. 安装httpd服务,并启动
systemctl stop firewalld.service
setenforce 0

//安装httpd服务
yum -y install httpd

systemctl start httpd.service 
  1.  安装 Filebeat
  2. 设置 filebeat 的主配置文件
安装 Filebeat
#上传软件包 filebeat-6.6.0-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.6.0-linux-x86_64.tar.gz
mv filebeat-6.6.0-linux-x86_64/ /usr/local/filebeat


2.设置 filebeat 的主配置文件
cd /usr/local/filebeat

vim filebeat.yml

  1. 启动服务
./filebeat -e -c filebeat.yml

3、部署ES服务(192.168.247.70  192.168.247.80)

3.1 安装JDK

java -version										#如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

3.2 安装ES服务

配置本地解析,上传安装包安装并启动

配置本地解析
echo "192.168.247.70 node1" >> /etc/hosts
echo "192.168.247.80 node2" >> /etc/hosts

#上传elasticsearch-5.5.0.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm 
#加载系统服务
systemctl daemon-reload    
systemctl enable elasticsearch.service

修改配置文件

#修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

查看配置文件,创建数据目录

grep -v "^#" /etc/elasticsearch/elasticsearch.yml
(4)创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

(5)启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200

3.3 安装 Elasticsearch-head 插件

编译安装node

#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y

cd /opt
tar zxvf node-v8.2.1.tar.gz

cd node-v8.2.1/
./configure
make && make install

安装 phantomjs(前端的框架)

#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

安装 Elasticsearch-head 数据可视化工具

#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install

修改 Elasticsearch 主配置文件

vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true				#开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"			#指定跨域访问允许的域名地址为所有

//重启es
systemctl restart elasticsearch

启动 elasticsearch-head 服务

cd /usr/local/src/elasticsearch-head/
npm run start &

> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

3.4  Kiabana 部署

1.安装 Kiabana
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm

2.设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://192.168.247.70:9200" 
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"

3.启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service

netstat -natp | grep 5601

4、部署logstash(192.168.247.60)

  1. 安装Java环境
  2. 安装logstash
//安装Java环境
yum -y install java
java -version

//安装logstash
#上传软件包 logstash-5.5.1.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm                           
systemctl start logstash.service                      
systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
  1. 在 Logstash 组件所在节点上新建一个 Logstash 配置文件
cd /etc/logstash/conf.d/

vim kafka.conf
input {
    kafka {
        bootstrap_servers => "192.168.10.17:9092,192.168.10.21:9092,192.168.10.22:9092"  #kafka集群地址
        topics  => "httpd"     #拉取的kafka的指定topic
        type => "httpd_kafka"  #指定 type 字段
        codec => "json"        #解析json格式的日志数据
		auto_offset_reset => "latest"  #拉取最近数据,earliest为从头开始拉取
		decorate_events => true   #传递给elasticsearch的数据额外增加kafka的属性数据
    }
}

output {
  if "access" in [tags] {
    elasticsearch {
      hosts => ["192.168.10.15:9200"]
      index => "httpd_access-%{+YYYY.MM.dd}"
    }
  }
  
  if "error" in [tags] {
    elasticsearch {
      hosts => ["192.168.10.15:9200"]
      index => "httpd_error-%{+YYYY.MM.dd}"
    }
  }
  
  stdout { codec => rubydebug }
}

#启动 logstash
logstash -f kafka.conf

三、验证

访问192.168.247.20 apache,生成日志

 

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

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

相关文章

文件拷贝【 使用字节流完成文件的复制(支持一切文件类型的复制)】

需求: 把某个视频复制到 E:\\videocopy\\new.mp4 思路: 根据 数据源 创建字节输入流对象根据 目的地 创建字节输出流对象读写数据,复制视频释放资源 可以拷贝 视频 ,图片 ,文本.txt 等文件 package com.csdn.d2_byte_…

Linux grep命令

①grep命令——过滤文件 这是txt.txt的内容 通过grep管道符查找gcc内容在txt.txt文件中 查找gcc所处行位置,加上-n 查找有多个相同内容的数据 ②wc命令——数量统计 统计数据如图: ③管道符——左边结果作为右边输入 如下图所示统计txt.txt文件"-&…

连续性数据进行Meta荟萃分析

Meta荟萃分析(也称Meta分析,元分析,异质性分析等),其是一种综合各种文献结论,进而汇总综合评价的方法,Meta分析常用于医学、心理学、教育学、生态学等专业领域。通俗地看,Meta分析是…

物 理 层

二、物理层 1、物理层的基本概念 物理层的作用:尽可能的屏蔽掉传输媒体和通信手段的差异,使物理层上面的数据链路层感觉不到这些差异,使其只需要考虑如何完成本层的协议和服务 1.1、物理层的主要任务 机械特性:指明接口所用的接线器的形状…

【计算机视觉】1. 计算机视觉基础理论知识和框架(Basic Concepts)

什么是计算机视觉? 一、什么是计算机视觉二、二个研究维度三、研究挑战3.1 像素与语义之间的GAP3.2 视觉变化3.3 光照变化3.4 尺度变化3.5 形态变化3.6 背景复杂3.7 遮挡3.8 内外 四、计算机视觉框架4.1 计算机视觉基础4.2 深度学习算法理论基础4.3 深度学习算法 五、计算机视…

SpringBoot3与IDE中配置JDK17

概述 SpringBoot3需要JDK17的支持,不再支持JDK8。 如果要运行SpringBoot3的项目,根据使用的IDE,需要的配置不同。 配置说明 1. SpringToolSuite4 如果使用的是SpringToolSuite4(STS),比较简单&#xf…

接入网技术

接入网 接入网是指骨干网络到用户或企业之间的所有设备。其长度一般为几百米到几公里,因而形象地被称为“最后一公里”。接入网地接入方式包括铜线(普通电话线)接入、基于双绞线的ADSL技术、基于HFC网(光纤和同轴电缆(有线电视电缆)混合网)的Cable Modem技术、光纤接入…

「聊设计模式」之职责链模式(Chain of Responsibility)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 设计模式是解决软件开发中常见问题的可复用解决方案。其中…

一篇文章教你Pytest快速入门和基础讲解,一定要看!

前言 目前有两种纯测试的测试框架,pytest和unittestunittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口pytest是基于unittest开发的另一款更高级更好用的单元测试框架出去面试也好,跟别…

爬虫工作者必备:使用爬虫ip轻松获得最强辅助

在进行网络数据爬取时,爬虫ip成为了爬虫工作者们的得力辅助。通过使用爬虫ip,可以实现IP地址的伪装和分布式请求,有效规避访问限制和提高爬取效率。本文将为爬虫工作者们分享关于使用爬虫ip的知识,帮助您轻松获取最强辅助&#xf…

【JavaEE】多线程案例-单例模式

文章目录 1. 前言2. 什么是单例模式3. 如何实现单例模式3.1 饿汉模式3.2 懒汉模式4. 解决单例模式中遇到的线程安全问题4.1 加锁4.2 加上一个判断解决频繁加锁问题4.2 解决因指令重排序造成的线程不安全问题 1. 前言 单例模式是我们面试中最常考到的设计模式。什么是设计模式呢…

Linux 用户注意!GNOME 45 将影响所有扩展!

GNOME 45 是一次重要的升级,但对扩展的影响并不令人满意! 每当 GNOME 升级,总会有一些扩展遭遇问题,这点并不新鲜。但如今,到了 GNOME 45,每个扩展都将面临问题! 那么,究竟是什么原…

Lua学习笔记:探究package

前言 本篇在讲什么 理解Lua的package 本篇需要什么 对Lua语法有简单认知 对C语法有简单认知 依赖Visual Studio工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉 ♠ 一级…

怒刷LeetCode的第8天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:双指针和排序 ​编辑第二题 题目来源 题目内容 解决方法 方法一:双指针 方法二:递归 方法三:快慢指针 方法四:栈 第三题 题目来源 题目内容 解决方法…

Python实现查询一个文件中的pdf文件中的关键字

要求,查询一个文件中的pdf文件中的关键字,输出关键字所在PDF文件的文件名及对应的页数。 import os import PyPDF2def search_pdf_files(folder_path, keywords):# 初始化结果字典,以关键字为键,值为包含关键字的页面和文件名列表…

数据分析三剑客之一:Pandas详解

目录 1 Pandas介绍 2 Pandas的安装与导入 2.1 Pandas模块安装 2.2 Pandas模块导入 3 pandas数据结构及函数 3.1 Series结构 3.1.1 ndarray创建Series对象 3.1.2 dict创建Series对象 3.1.3 标量创建Series对象 3.1.4 位置索引访问Series数据 3.1.5 标签索引访问Series…

华为云HECS安装docker

1、运行安装指令 yum install docker都选择y,直到安装成功 2、查看是否安装成功 运行版本查看指令,显示docker版本,证明安装成功 docker --version 或者 docker -v 3、启用并运行docker 3.1启用docker 指令 systemctl enable docker …

【Linux基础】第七章:搜索查找-find查找文件或者目录

find命令是根据文件属性进行查找的,如文件名,文件大小,所有者,所有组,是否为空,访问时间,修改时间等。 基本格式: find path [options] 先定位到etc 目录下 cd /etc1.按照文件名查找…

成集云 | 金蝶EAS集成聚水潭ERP(金蝶EAS主管库存)| 解决方案

源系统成集云目标系统 方案介绍 金蝶EAS是一款全球首款融合TOGAF标准SOA架构的企业管理软件,专门为大中型企业设计,以“创造无边界信息流”为产品设计理念,支持云计算、SOA和动态流程管理的整合技术平台。 聚水潭是一款以SaaS ER…