大数据系统之监控系统(二)Flume的扩展

  一些需求是原生Flume无法满足的,因此,基于开源的Flume我们增加了许多功能。

EventDeserializer的缺陷

  Flume的每一个source对应的deserializer必须实现接口EventDeserializer,该接口定义了readEvent/readEvents方法从各种日志源读取Event。

flume主要支持两种反序列化器:

(1)AvroEventDeserializer:解析Avro容器文件的反序列化器。对Avro文件的每条记录生成一个flume Event,并将基于avro编码的二进制记录存入event body中。

(2)LineDeserializer:它是基于日志文件的反序列化器,以“\n”行结束符将每行化分为一条日志。

当日志记录本身被分割成多行时(比如堆栈异常日志),就不能满足这种要求。

针对这种情况,针对实际项目重新实现了日志的解析。源码参看https://github.com/bigdatafly/flume里的FileEventReader。

  题外话,最近翻看了morphlines,日志解析还可以用morphlines来实现。

  另外,这里还有个需要注意的地方:LineDeserializer有一个参数(maxLineLength)用于定义一个日志行的最长字符数。如果某条日志超过这个长度,将不再读取。而一条日志占据多行情况下,该值需要适当增大,因为像异常日志的堆栈长度明显比普通日志长不少,这里你可以设置为8192。

ExecSource的缺陷

  ExecSource tail -F 适合固定文件日志的读取,最大问题不支持文件断点续传的功能。为此,在源码的基础上实现了flume-filetailsource。

源码参看https://github.com/bigdatafly/flume里的FileTailSource.java

SpoolingDirSource的缺陷

  用于监控文件目录变化的,但是会有以下两个问题:一是文件不能写,只能读。二是延迟比较高,需要等待日志定期归档。项目中没采用此方式。

  这里有个小插曲,由于之前已定制了source/sink的缘故。原以为deserializer也可以用同样的方式进行定制。并在agent的deserializer配置中指定定制过的deserializer的完全限定名。但经过验证后发现,这条路走不通,会报错(貌似从flume官网上也找不到对deserializer定制的介绍)。因此,只能在源码上进行扩展,然后编译源码,重新生成jar。

从源码里你会发现为什么在第三方包内扩展deserializer是行不通的。参看org.apache.flume.serialization.EventDeserializerType,你就会一目了然:

 1 public enum EventDeserializerType {
 2 LINE(LineDeserializer.Builder.class),
 3 AVRO(AvroEventDeserializer.Builder.class),
 4 OTHER(null);
 5 private final Class<? extends EventDeserializer.Builder> builderClass;
 6 EventDeserializerType(Class<? extends EventDeserializer.Builder> builderClass) {
 7 this.builderClass = builderClass;
 8 }
 9 public Class<? extends EventDeserializer.Builder> getBuilderClass() {
10 return builderClass;
11 }
12 }  

  必须显式在这里定义deserializer的枚举,然后指定其builder的Class实例,并在agent里的deserializer配置项中填写你这里的枚举名称才行。

系统的管理问题

  Flume的启动加载配置文件的方式有两种:conf配置文件方式和Zookeeper方式。Flume对conf或者Zookeeper进行监控。当配置信息发生变化时,重新初始化配置参数,并进行重启。目前系统,flume参数统一存储在Zookeeper上。通过翻看源码,发现解决这个问题需要重写大量的源码,任务巨大,目前还在思考结合实际情况如何巧妙的解决这个问题。

  实际项目实施中,整个flume的架构,分为两层agent和collector。

源码参看https://github.com/bigdatafly/flume

时间: 2024-07-30 20:30:14

大数据系统之监控系统(二)Flume的扩展的相关文章

大数据系统之监控系统(一)

一个稳定可靠的系统离不开监控,我们不仅监控服务是否存活,还要监控系统的运行状况.运行状况主要是对这些组件的核心metrics采集.抓取.分析和报警. 一.监控的数据 监控的日志数据一般包括: v APP.PC.Web 等系统运行Log:采用Flume-NG搜集 v 用户日志 : 采用Flume-NG搜集 v 后端Server(SOA)日志:采用Flume-NG搜集 v 大数据组件的Metrics:JMX和HTTP v MYSQL等数据库日志:CANAL 不同公司有不同的设计要求,这方面都不多说了

Zabbix监控系统二:配置邮件报警

在zabbix的使用中,最重要的一点就是完善的报警机制,作为监控平台,需要时刻关注机器和服务的运行状态,更重要的是发现故障之后需要及时的报警给相关人员,早点发现问题,将隐患消除在未然阶段.这样才能保证服务的稳定运行.报警的方式是多种多样的,微信.短信和邮件报警是我们比较常见的方式. 邮件报警的配置主要划分为一下几个步骤: 1.在zabbix服务端配置邮件发送脚本和修改zabbix服务端配置文件; 2.在zabbix前端控制台进行相关设置: 实验环境 Zabbix监控服务器.客户端都已经部署完成,

庖丁解牛之监控系统(二)

欢迎大家加入运维开发讨论交流群来交流,群号 365534424 关于扩展性的定义 可伸缩性(可扩展性)是一种对软件系统计算处理能力的设计指标,高可伸缩性代表一种弹性,在系统扩展成长过程中,软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长,实现高吞吐量和低延迟高性能. 可伸缩性和纯粹性能调优有本质区别, 可伸缩性是高性能.低成本和可维护性等诸多因素的综合考量和平衡,可伸缩性讲究平滑线性的性能提升,更侧重于系统的水平伸缩,通过廉价的服务器实现分布式

python-Django监控系统二次开发Nagios

1.Nagios安装 yum install -y nagios.i686 yum install -y nagios-plugins-all.i686 安装完后会在apache的配置文件目录下/etc/httpd/conf.d/产生一个外部的配置文件nagios.conf service httpd start service nagios start default user nagiosadmin password nagiosadmin 2.配置文件生成器 Django前期的收集主机信息

基于Flume的美团日志收集系统(二)改进和优化

问题导读: 1.Flume-NG与Scribe对比,Flume-NG的优势在什么地方? 2.架构设计考虑需要考虑什么问题? 3.Agent死机该如何解决? 4.Collector死机是否会有影响? 5.Flume-NG可靠性(reliability)方面做了哪些措施? 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日

大数据处理系列之(二)系统过载保护

前言:前段时间在网上看到腾讯后台开发总监bison分享的一篇文章<浅谈过载保护>,读来受益匪浅. 刚好自己也在处理系统请求过载的问题,把自己的一些心得体会总结出来拿来与大家一起探讨. 在bison的文章中谈到:对于延时敏感的服务,当外部请求超过系统处理能力,如果系统没有做相 应保护,可能导致历史累计的超时请求达到一定的规模,像雪球一样形成恶性循环,由于系统处理的每个 请求都因为超时而无效,系统对外呈现的服务能力为0,且这种情况不能自动恢复.我们的系统就是要尽 量避免这种情况的出现,下面将详细来

JAVA实战教程_JAVA案例开发之JAVA开发微信二维码大数据系统02

hello,上一次我们上传了第一个课时的视频,现在当然是上传第二个视频咯. 视频简介:本视频是关于JAVA实战教程,JAVA开发微信二维码大数据系统.这个JAVA开发案例可以协助一些从零基础开始学习JAVA,正处于理论走完实践的路程上的初学者能接触到实际开发项目过程中,在实践当中巩固自己的JAVA方面的知识外,更能在项目案例当中学到解决在JAVA学习或者实践当中遇上问题的一些解决方式.仅供参考!自设交流群:457036818,欢迎一起加入交流. PS:该案例共十个课时,本小节为第二课时 课程原地

Cacti+Nagios监控系统(二):安装Cacti

一.设置mysql,创建Cacti数据库和账号 mysql -u root -p mysql> create database cactidb; mysql> GRANT ALL ON cactidb.* TO [email protected] IDENTIFIED BY '123456'; mysql> flush privileges; mysql> quit 二.安装rrdtool yum -y install rrdtool  rrdtool-devel  rrdtool

容器领域的十大监控系统对比(上)

容器监测环境有多种形态和大小.有些是开源的,而另一些则是商业性质的.有些可以借助平台一键部署(例如在Rancher容器管理平台的应用目录中一键部署这些监控应用),而另一些则需要手动配置.有些是通用的,有些是专门针对容器环境的.有些托管在公有云中,而另一些则需要在自己的集群主机上安装. 在本文中,我将对容器领域的10个监控解决方案进行全面的分析对比.监控解决方案的数量之多令人望而生畏.新的解决方案不断涌现,同时现有的解决方案不断发展.我没有深入研究每个解决方案,而是采取了high-level的对比