欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

kafka收集日志实现日志可视化

终极管理员 知识笔记 84阅读

文章目录 1.1 安装zookeeper集群1.2 Zookeeper 配置1.2 安装kafka集群1.3 部署filebeat服务1.4 部署logstash1.5 部署es和kibana服务1.6 配置kibana ui界面1.7 对nginx进行日志分析
Filebeat采集日志kafka topic存起来日志->logstash去kafka获取日志进行格式转换->elasticsearch->kibana

虚拟机Ubuntu - 安装虚拟机

1.1 安装zookeeper集群

准备三台机器安装zookeeper高可用集群
zoo1 192.168.64.101
zoo2 192.168.64.102
zoo3 192.168.64.103

虚拟机Ubuntu - 修改IP地址
虚拟机Ubuntu - 修改主机名

1、zookeeper简介
zookeeper就是动物园管理员他是用来管hadoop大象、Hive(蜜蜂)、pig(小猪)、kafka消息系统的管理员 Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeperZookeeper是一个分布式的、开源的程序协调服务是 hadoop 项目下的一个子项目。他提供的主要功能包括配置管理、名字服务、分布式锁、集群管理。
Zookeeper主要作用在于:

节点选举Master节点主节点挂了之后从节点就会接手工作 ,并且保证这个节点是唯一的这就是首脑模式从而保证集群的高可用统一配置文件管理只需部署一台服务器可以把相同的配置文件同步更新到其他服务器。比如修改了Hadoop,Kafka,redis统一配置等发布与订阅消息类似于消息队列,发布者把数据存在znode节点上订阅者会读取这个数据集群管理 集群中保证数据的一致性Zookeeper的选举机制>过半机制安装的台数奇数台(否则无法过半机制)多得好处在于可靠性高,但是过的话会导致通信延时长

2、zookeeper角色

leader 领导者follower 跟随者observer 观察者leader 负责发起选举和决议的更新系统状态follower 接收客户端的请求给客户端返回结果在选主的过程参与投票observe 接收客户端的连接同步leader状态不参与选主 1.2 Zookeeper 配置

虚拟机Ubuntu - Zookeeper安装配置

解压文件:

[rootzoo1 ~]#mkdir /opt
[rootzoo1 ~]#tar zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/
[rootzoo1 ~]#mv /opt/apache-zookeeper-3.8.0-bin/ /opt/zookeeper

在/opt/zookeeper/目录下创建数据文件目录和日志文件目录

[rootzoo1 ~]# mkdir /opt/zookeeper/zkData
[rootzoo1 ~]# mkdir /opt/zookeeper/zkLog

复制配置文件并修改

[rootzoo3 ~]# cd /opt/zookeeper/conf/
[rootzoo3 conf]# cp zoo_sample.cfg zoo.cfg
[rootzoo3 conf]# mkdir -p /opt/zookeeper/zkLog
[rootzoo3 conf]# vim zoo.cfg

在原有配置基础上修改内容如下

dataDir/opt/zookeeper
dataLogDir/opt/zookeeper/zkLog
server.1192.168.40.190:2188:3888
server.2192.168.40.191:2188:3888
server.3192.168.40.192:2188:3888

注意ip地址改为自己设置的

启动zookeeper需要安装JDK

虚拟机Ubuntu - JDK安装配置

启动zookeeper

[rootzoo1 conf]# cd /opt/zookeeper/
[rootzoo1 zookeeper]# echo 1 > myid
[rootzoo1 ~]#cd /opt/zookeeper/bin && nohup ./zkServer.sh start …/conf/zoo.cfg &

权限问题Permission deniedsudo chmod 777 -R /opt/zookeeper

测试zookeeper

[rootzoo3 ~]# cd /opt/zookeeper/bin/
[rootzoo3 ~]#./zkCli.sh -server 127.0.0.1:2181

创建节点以及和它关联的字符串

[zk: 127.0.0.1:2181(CONNECTED) 1] create /test “lucky”

获取刚才创建的节点信息

[zk: 127.0.0.1:2181(CONNECTED) 2] get /test
“lucky”

修改节点信息

[zk: 127.0.0.1:2181(CONNECTED) 4] set /test “luckylucky”
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test
“luckylucky”

1.2 安装kafka集群

1、kafka介绍
Kafka 是一种高吞吐量的分布式发布订阅消息系统即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。采用生产者消费者模型

zookeeper在kafka中的作用
管理broker、consumer创建Broker后向zookeeper注册新的broker信息实现在服务器正常运行下的水平拓展。

2、相关术语
BrokerKafka集群包含一个或多个服务器这种服务器被称为broker
Topic每条发布到Kafka集群的消息都有一个类别这个类别被称为Topic。物理上不同Topic的消息分开存储逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处
PartitionPartition是物理上的概念每个Topic包含一个或多个Partition.
Producer负责发布消息到Kafka broker
Consumer消息消费者向Kafka broker读取消息的客户端。

3、安装kafka单节点

在zoo3上部署kafka服务解压压缩包到指定目录

[rootzoo3 ~]# tar -xzf kafka_2.13-3.1.0.tgz
[rootzoo3 ~]#cd kafka_2.13-3.1.0

修改config目录下vi server.propertie文件

[rootzoo3]# cd /root/kafka_2.13-3.1.0/config
[rootzoo3 config]# vim server.properties

listenersPLAINTEXT://192.168.64.102:9092 zookeeper.connect192.168.64.101:2181,192.168.64.102:2181,192.168.64.103:2181

备注
zookeeper.connect是指定zookeper集群地址
listenersPLAINTEXT://192.168.40.192:9092 这个ip写的是部署kafka机器的ip

启动kafka:

[rootzoo3 config]# cd /root/kafka_2.13-3.1.0/bin && ./kafka-server-start.sh -daemon …/config/server.properties

登录zookeeper客户端查看/brokers/ids

[rootzoo3 ~]# cd /opt/zookeeper/bin/
[rootzoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids

显示如下
[0]

生产者和消费者测试

1创建主题主题名是 quickstart-events
[rootzoo3 config]# cd /root/kafka_2.13-3.1.0/bin
[rootzoo3 bin] ./kafka-topics.sh --create --topic quickstart-events --bootstrap-server 192.168.40.192:9092

2查看topic
[rootzoo3 bin]# ./kafka-topics.sh --describe --topic quickstart-events --bootstrap-server 192.168.40.192:9092

3topic写入消息
[rootzoo3 bin]# ./kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.40.192:9092
> hello
> welcome

4打开新的终端从topic读取信息
[rootzoo3]# cd /root/kafka_2.13-3.1.0/bin
[rootzoo3 bin]# ./kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.40.192:9092
显示如下

4.安装kafka高可用集群
假如现在有两台服务器192.168.40.192,192.168.40.190
kafka的安装与配置如上,两台服务器唯一不同的地方就是配置文件中的broker.id和listeners监听的主机ip
[rootzoo3 ~]# scp -r kafka_2.13-3.1.0 192.168.40.190:/root/
修改192.168.40.190机器config目录下server.propertie文件
[rootzoo1 ~]# cd kafka_2.13-3.1.0/config/
[rootzoo1 config]# vim server.properties
broker.id1
listenersPLAINTEXT://192.168.40.190:9092

启动kafka
[rootzoo1]# cd /root/kafka_2.13-3.1.0/bin && ./kafka-server-start.sh -daemon …/config/server.properties

登录zookeeper客户端查看/brokers/ids
[rootzoo3 ~]# cd /opt/zookeeper/bin/
[rootzoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids
显示如下
[0,1]

把zoo2加入到kafka集群
[rootzoo3 ~]# scp -r kafka_2.13-3.1.0 192.168.40.191:/root/
修改192.168.40.190机器config目录下server.propertie文件
[rootzoo2 ~]# cd kafka_2.13-3.1.0/config/
[rootzoo2 config]# vim server.properties
broker.id2
listenersPLAINTEXT://192.168.40.191:9092

启动kafka
[rootzoo2]# cd /root/kafka_2.13-3.1.0/bin && ./kafka-server-start.sh -daemon …/config/server.properties

登录zookeeper客户端查看/brokers/ids
[rootzoo3 ~]# cd /opt/zookeeper/bin/
[rootzoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids
显示如下
[0,12]

1.3 部署filebeat服务

在zoo2上部署

filebeat是轻量级的日志收集组件

zoo2安装nginx利用filebeat采集nginx日志
[rootzoo2 ~]# yum install nginx -y
[rootzoo2 ~]# service nginx start
请求nginx
[rootzoo2 ~]# curl 192.168.40.191

Kafka集群创建topic用来存放日志数据
[rootzoo3]# cd /root/kafka_2.13-3.1.0/bin
[rootzoo3 bin]# ./kafka-topics.sh --create --topic test-topic --bootstrap-server 192.168.40.192:9092,192.168.40.191:9092,192.168.40.190:9092

安装filebeat服务
[rootzoo2 ~]# tar zxvf filebeat-7.13.1-linux-x86_64.tar.gz -C /opt/
[rootzoo2 ~]# cd /opt/filebeat-7.13.1-linux-x86_64/
[rootzoo2 filebeat-7.13.1-linux-x86_64]# ./filebeat modules enable nginx

配置filebeat_nginx.yml 记得注释kafka version不然报错

vim filebeat_nginx.ymlfilebeat.modules:- module: nginx  access:    enabled: true    var.paths: [/var/log/nginx/access.log*]  error:    enabled: true    var.paths: [/var/log/nginx/error.log*] #----------------------------------Kafka output--------------------------------#output.kafka:  enabled: true  hosts: [192.168.40.192:9092, 192.168.40.190:9092,192.168.40.191:9092]  topic: test-topic #kafka的topic需要提前创建好上面步骤已经创建过了  required_acks: 1  #default  compression: gzip #default  max_message_bytes: 1000000 #default  codec.format:    string: %{[message]}

启动filebeat
[rootzoo2 filebeat-7.13.1-linux-x86_64]# nohup ./filebeat -e -c filebeat_nginx.yml &
请求nginx
[rootzoo2 ~]# curl 192.168.40.191
#查看kafka topic是否有日志数据
[rootzoo3]# cd /root/kafka_2.13-3.1.0/bin
[rootzoo3 bin]# ./kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server 192.168.40.192:9092,192.168.40.190:9092,192.168.40.191:9092

1.4 部署logstash

在zoo2上部署
logstash是日志收集组件但是占用的资源较多一般都是用来对日志格式进行转换
[rootzoo2 ~]# cd /opt/
[rootzoo2 opt]# wget [rootzoo2 opt]# tar zxvf logstash-7.9.2.tar.gz
[rootzoo2 opt]# cd logstash-7.9.2/config
[rootzoo2 config]# vim nginx.conf
input{
kafka {
bootstrap_servers > [“192.168.40.192:9092,192.168.40.190:9092 ,192.168.40.191:9092”]
auto_offset_reset > “latest”
consumer_threads > 3
decorate_events > true
topics > [“test-topic”]
codec > “json”
}
}
output {
elasticsearch {
hosts > [“192.168.40.191:9200”]
index > “kafkalog-%{YYYY.MM.dd}” # 这里定义的index就是kibana里面显示的索引名称
}
}

备注bootstrap_servers > [“192.168.40.192:9092,192.168.40.190:9092”]指定kafka集群地址
hosts > [“192.168.40.191:9200”]指定es主机地址

启动logstash服务
[rootzoo2 config]# cd …/bin
[rootzoo2 bin]# nohup ./logstash -f …/config/nginx.conf >> logstash.log &

1.5 部署es和kibana服务

在zoo2上部署

elasticsearch是一个实时的分布式的可扩展的搜索引擎它允许进行全文本和结构化搜索以及对日志进行分析。它通常用于索引和搜索大量日志数据也可以用于搜索许多不同种类的文档。elasticsearch具有三大功能搜索、分析、存储数据

安装es服务
[rootzoo2]# mkdir /es_data
[rootzoo2 ~]# chmod 777 /es_data
[rootzoo2 ~]# yum-config-manager --add-repo [rootzoo2 ~]# yum install docker-ce -y
[rootzoo2 ~]# systemctl start docker
[rootzoo2 ~]# systemctl enable docker
[rootzoo2 ~]# docker load -i elasticsearch.tar.gz
[rootzoo2 ~]#docker run -p 9200:9200 -p 9330:9300 -itd -e “discovery.typesingle-node” --name es -v /es_data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:7.9.2

kibana是一个基于Web的图形界面用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据。Kibana功能众多在“Visualize” 菜单界面可以将查询出的数据进行可视化展示“Dev Tools” 菜单界面可以让户方便地通过浏览器直接与 Elasticsearch 进行交互发送 RESTFUL对 Elasticsearch 数据进行增删改查。。它操作简单基于浏览器的用户界面可以快速创建仪表板dashboard实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编码或者额外的基础架构几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

安装kibana服务
[rootzoo2 ~]# docker load -i kibana.tar.gz
[rootzoo2 ~]# docker run -p 5601:5601 -it -d --link es -e ELASTICSEARCH_URL --name kibana kibana:7.9.2
修改kibana配置文件
[rootzoo2 ~]# docker exec -it kibana /bin/bash
[rootzoo2 ~]# vi config/kibana.yml
elasticsearch.hosts: [ “ ]
[rootzoo2 ~]# docker restart kibana

1.6 配置kibana ui界面

Kibana添加索引

需要再次curl访问nginx才会产生数据

回到kibana首页点击Discover查看日志

1.7 对nginx进行日志分析

标签:
声明:无特别说明,转载请标明本文来源!