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主要作用在于:
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
[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、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
[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
[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]
在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
在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 &
在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
Kibana添加索引
需要再次curl访问nginx才会产生数据
回到kibana首页点击Discover查看日志
1.7 对nginx进行日志分析