基于filebeat+kafka+ELK的大数据日志收集系统

日志收集系统简介

日志收集是大数据的基石。

许多公司的业务平台每天都会产生大量的日志数据。收集业务日志数据,供离线和在线的分析系统使用,正是日志收集系统的要做的事情。高可用性,高可靠性和可扩展性是日志收集系统所具有的基本特征。

常用的日志收集系统对比

FlumeLogstashFilebeat
内存
cpu
背压敏感协议
插件需要额外支持
功能支持多种输入、多种输出支持多种输入、多种输出,支持数据转换,支持实时解析支持多种输入、多种输出
轻重重量级重量级轻量级
过滤能力可以支持分区、拦截器过滤能力强大过滤能力弱
稳定性一台服务器支持多个进程,挂掉后需要手动启动一台服务器只能有一个进程,挂掉后需要手动启动非常稳定
集群分布式集群单节点
二次开发一般

背压敏感协议:当接收端繁忙时,会通知收集端降低传输速率,并在正常后恢复速度

日志收集系统架构

在这里插入图片描述

  1. 应用程序产生日志信息,通过log4j2输出到磁盘上的两个日志文件中(app-log-服务名.log和error-log-服务名.log)
  2. filebeat会监听这个两个日志文件,日志中的新数据会被整合打包推送到kafka中
  3. kafka作为一个负载缓冲和临时存储的作用,将数据推送到logstash
  4. logstash用来做日志的筛选和过滤,把需要日志推送到``elasticsearchhdfs`中
  5. elasticsearch存放3个月内的日志信息,并为数据可视化提供数据来源
  6. hdfs存放所有的日志信息
  7. 使用kibana进行数据可视化

架构设计考虑

将从可用性,可靠性,可扩展性和兼容性等方面,对上述的架构做细致的解析

可用性

对日志收集系统来说,可用性指固定周期内系统无故障运行总时间。要想提高系统的可用性,就需要消除系统的单点,提高系统的冗余度。下面来看看在可用性方面的考虑。

filebeat死掉

filebeat死掉分为两种情况:机器死机或者filebeat进程死掉。

对于机器死机的情况来说,由于产生日志的进程也同样会死掉,所以不会再产生新的日志,不存在不提供服务的情况。

对于filebeat进程死掉的情况来说,确实会降低系统的可用性。对此,我们有下面三种方式来提高系统的可用性。

  1. 所有的filebeat都被keepalived监控,如果进程死掉会被立即重启,以提供服务。
  2. 其次对于无法重启的filebeatkeepalived在多次尝试后会发出报警,短信或者邮件的形式提醒人工处理。
  3. 日志是直接通过log4j2直接输入到磁盘上的,保证不会丢失。
kafka死掉

由于kafka提供的是对等的且无差别的服务,并且kafka以集群部署。所以当某个kafka无法提供服务时,数据发送到其它可用的kafka上面。所以整个服务不受影响。

logstash死掉

同上

es和hdfs正常关闭

出于维护等原因,eshdfs可能会临时关闭,logstash可以随时修改过滤、筛选方式和输出方式,以停止对eshdfs的访问

es和hdfs异常停机或不可访问

假如eshdfs异常停机或不可访问,此时logstash无法继续写入。由于我们使用了kafka,数据会临时保存在kafka中,继续提供服务。当eshdfs恢复服务以后,再发送到eshdfs上。可以提供较好的容错性。

logstash变慢

如果logstash处理速度变慢(比如机器load过高)或者filebeatkafka之间的网络变慢,可能导致日志发往logstash的速度变慢。对于这种情况并无关系,filebeat是从磁盘上提取数据,数据不会丢失,logstash前有kafka做削峰和缓存,避免logstash压力过大

hdfs变慢

Hadoop上的任务较多且有大量的读写操作时,Hdfs的读写数据往往变的很慢。由于每天,每周都有高峰使用期,所以这种情况非常普遍。同样的,hdfs变慢后,logstash也会变慢,由kafka进行削峰

可靠性

对日志收集系统来说,可靠性是指在数据流的传输过程中,保证日志的可靠传递,最终被持久化到指定位置

对于这套系统来说,日志一开始就持久化在硬盘上,filebeat会保证每条日志都进入kafkakafka集群通过设置多副本,使topic可以进行复制副本,某一个节点宕机后不会影响整体的生产和消费。同时kafka的确认机制保证在Logstash处理失败的时候,数据不会被消费或者丢失,最终持久化到eshdfs中。

同时我们也可以在log4j2中将重要的日志单独输出到一个log文件中,如果系统出现重大故障时,可以方便的进行人工核对。

可扩展性

对日志收集系统来说,可扩展性是指系统能够线性扩展。当日志量增大时,系统能够以简单的增加机器来达到线性扩容的目的。

需要在设计的每一层,都可以做到线性扩展地提供服务。下面将对每一层的可扩展性做相应的说明。

filebeat层

对于filebeat这一层来说,每个机器部署一个filebeat,可以水平扩展,不受限制。一个方面,filebeat收集日志的能力受限于机器的性能,正常情况下一个filebeat可以为单机提供足够服务。另一方面,如果机器比较多,可能受限于下游提供的服务。

kafka层

kafka的性能极佳,不会成为系统的性能瓶颈,并且可以通过集群水平扩展。

logstash、es、hdfs层

logstasheshdfs都是分布式系统,可以做到线性扩展

系统监控

发送速度,拥堵情况,写入速度

通过kafka的监控,就可以直观的看到日志写入量和写出量,通过kafka队列的堆积可以直观的反应出拥堵情况

在这里插入图片描述

日志大小监控

对于重要的日志,每个小时都监控日志大小周同比是否有较大波动,并给予提醒,这个报警可以有效的发现异常的日志,及时给予了对方反馈,帮助他们及早修复自身系统的异常。

异常日志监控

通过kibana的x-pack插件中watcher功能,对日志实现监控,并提供警报的能力。

同时kibana还可以提供图形展示、报表统计、安全认证、监控跟踪

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值