日志收集分析平台

19 篇文章 5 订阅

项目描述

搭建nginx web静态网页,收集访问日志access.log,对access.log做数据清洗,获取所需的流量信息,并存入数据库以达到数据的持久化

项目环境

centos7机器共3台,nginx1.20、filebeat7.17、kafka2.12、zookeeper3.6、python3.6、mariadb5.5

项目步骤

1、使用nginx搭建一个web页面
2、搭建kafka集群,搭建zookeeper集群
3、部署filebeat,收集日志吐到kafka
4、编写消费者脚本,取出日志并做数据清洗
5、最后将收集到的流量存入数据库

架构图

在这里插入图片描述

项目原理

1.负载均衡

负载均衡的作用
负载均衡就是优化资源使用,最大吞吐量,最小化响应时间并且避免任何单一资源的过载,简单来说就是做流量分摊,避免某一台服务器的流量过大

怎么做负载均衡
我使用DNS做负载均衡,主要是因为它实现比较灵活、方便,简单易行,成本低,修改 etc下的 hosts 文件,添加域名映射

DNS做负载均衡:一个域名可以解析成多个ip地址,一般来说会以轮询的方式去解析成各个ip。但是如果其中一个服务器挂了,DNS不会立马将这个ip地址去掉,还是会解析成挂掉的ip,可能会造成访问失败。虽然客户端有重试机制,但是还是会影响用户体验

DNS解析的步骤:
1、找浏览器里面的缓存
2、找本地hosts文件 (Linux下的/etc/hosts文件)
3、找本地域名服务器(Linux下的/etc/resolv.conf文件)

还可以使用nginx做负载均衡

2.web应用

搭建nginx服务,这里只是搭建一个静态页面,用来做测试,用户访问这个nginx页面,生成访问日志access.log

3.kafka

消息中间件
消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。

常见的消息中间件:ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka 这三款。

kafka采取的通信模式
发布订阅

kafka的常见用途
日志收集、业务解耦、流量削峰

用kafka做日志统一收集的好处
1、故障发生时方便定位问题
2、日志的集中管理,后续需要日志的程序直接到kafka获取即可,尽可能减少日志处理对nginx的影响

常见名词
broker:节点
topic:主题
消费者订阅了哪个topic,就可以消费哪个topic里的资源
partition:分区
提高吞吐量,提高并发
replica:副本
就是完整的分区备份

broker数量如果和replica一致,则可以坏掉n-1台机器

leader和follower
leader只有一个,follower可以有多个
生产者和消费者只和leader打交道,leader再根据ISR同步给follower
生产者跟任何一台broker连接都可以,broker会返回当前请求副本的leader的信息,最后生产者再跟leader交互

kafka如何保证高可用
多个broker+多个partition+多个replica

ISR: in-sync-replica 列表集合,即需要同步的follower的集合
如果说6个副本, 1个leader 5 follower
有一条消息来了,leader怎么知道要同步哪些副本呢?
1、根据ISR来,如果一个follower挂了,那就从这个列表里删除了
2、如果一个follower卡住了或者同步过慢,它也会从ISR里删除
3、如果有一个机器宕机了,后续启动之后想要重新加入ISR,必须得同步到High Watermark最高水位线才行

如何保证数据的一致性
保证生成数据一致性
producer可以通过request.required.acks设置,ack可以为0,1,-1
ack=0 生产者不需要接受响应,发完就发下一条
ack=1(默认) leader收到就会给生产者发送响应,然后再发下一条
ack=-1 ISR列表中的每一个副本都接收到,才给生产者响应,才会发送下一条

0最快但不安全,1中等,-1最慢但最安全

保证消费数据一致性
引入了High Watermark 机制,只能消费ISR列表里偏移量最少的副本消息数量

为什么还要用filebeat / 生产者
filebeat是轻量级日志采集器,用来将nginx里面收集的日志送给kafka,这里的filebeat充当了生产者的身份

消费者
同一个消费组,里面的消费者同一时刻只能消费一个partition,那么消费者怎么知道自己消费到哪里了,下次从哪里开始消费?

消费者消费的时候,会记录自己的消费偏移量,消费偏移量可以保存在本地,也可以保存在kafka里面,在kafka里面有一个topic叫__consumer__offsets用来记录消费偏移量

数据存储
1、文件夹:<topic_name>-<分区号>
2、每一个partition的数据都是由很多个segment存储的,每一个segment由一个index和log文件组成
3、分出多个segment便于数据处理

kafka可以按照两个维度清理数据:
1、按大小
2、按时间
任意一个条件满足,都可以触发日志清理

4.zookeeper

ZooKeeper 为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。

我这里使用zk,主要是用于管理kafka

zk管理kafka
1、保存kafka的元数据,topic,partiton,replia
2、选举kafka controller,通过抢占的方式选举,选举出的kafka controller管理kafka副本的leader和follower的同步、选举

zk的选举
一致性算法,少数服从多数原则,票数过半的当选为leader

操作
客户端连接任意一台zk都可以操作,但是数据新增修改等事务操作必须在leader上运行,客户端如果连接到follower上进行事务操作,follower会返回给leader的ip,最终客户端还是在leader上操作;如果进行查询操作,可以直接连接follower进行查询操作

zk中的leader和follower
follower:查询和选举
leader:数据的写入、修改和同步

数据的同步
1、只要过半的节点同步完成,就表示数据已经写入完成
2、zookeeper不是强一致性,它属于最终一致性

zk的正常使用
1、zk集群中,节点存活数必须要过半,集群才能正常使用
2、zk集群的节点数,一般来说都设置成奇数,方便选举leader

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值