您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于Storm的实时报警服务的设计与实现
y信息疼术2016年第12期文章编号=1009-2552(2016)12-0162-05DOI:10.13274/j.cnki.hdzj.2016.12.036基于Storm的实时报警服务的设计与实现马庆祥,刘钊远(西安邮电大学计算机学院,西安710061)摘要:为检测系统日志和业务日志中的各种错误信息,提出了一种基于Storm的实时报警服务。该服务通过Scribe实时收集持续大流量的日志数据,采用分布式消息系统Kafka缓存,然后经Storm分析过滤、匹配报警规则。实验结果表明,该服务可以及时发现故障问题并发送报警信息,确保系统和业务的稳定运行。关键词:报警服务;实时流处理技术;Storm中图分类号:TP311.52文献标识码:ADesignandimplementationofrealtimealarmservicebasedonStormMAQing-xiang,LIUZhao-yuan(SchoolofComputerScienceandTechnology,Xi’anUniversityofPostsandTelecommunications,Xi’an710061,China)Abstract:Inordertodetecttheerrormessagesinthelogandlogofthesystem,areal-timealarmservicebasedonStormisproposed.TheservicecollectsthelogdataofcontinuouslargeflowthroughScribe,usesthedistributedmessagesystemKafkacache,andthenanalyzesandfiltersandmatchesthewarningrulesbyStorm.Theexperimentalresultsshowthattheservicecanfindfaultintimeandsendalarminformationtoensurethestableoperationofthesystemsandservices.Keywords:alertingservice;real-timestreamprocessing;Storm0引言随着互联网的迅速发展,企业的应用程序和平台都产生了海量的日志数据,这些日志数据为系统的运行和维护提供了丰富的信息。在服务器正常运行期间,往往需要根据系统日志和业务日志来监控系统和业务的运行状态。根据日志数据的分析结果及时发现系统故障或者定位业务问题,为系统的稳定运行和后期优化提供指导,保障业务正常服务。大数据时代,如何对持续大流量的实时日志数据进行分析并快速响应,是一项巨大的挑战。Storm是由Twitter开源的分布式实时计算系统,使处理无限流数据成为可能。随着实时流处理技术的发展,Storm使用的业务领域和场景越来越广泛,诸如实时分析、在线机器学习、持续计算、远程分布式调用等等。目前国内也涌现出了许多实时处理平台和解决方案,比如奇虎360实时平台、新浪实时分析平台、腾讯的实时计算平台、阿里巴巴团队的JStorm等—162—等。而且Storm可以很方便的集成现有的各种技术,例如Kestrel、Kafka、Hbase等。最值得关注的是Storm的处理速度惊人,在Twitter内部集群测试的结果是Storm单节点每秒钟能完成100多万条信息的处理,满足了用户对性能和时效的双重需求,弥补了Hadoop在实时处理、个性化查询等方面的不足。文中结合流式计算框架Storm与消息队列系统Kafka提出一种基于Storm的实时报警服务的设计方案,其优势主要体现在海量日志的存储、处理和实时分析,通过用户配置的关键字、报警阈值和报警规则等过滤条件,实时监控系统日志和业务日志,据此产生错误日志报警信息,实现对错误日志的监控应用。文章首先分析了实时流处理技术,然后阐述了报警服务的设计方案,最后剖析了报警服务各个模收稿日期:2015-12-02作者简介:马庆祥(1989-),男,硕士,研究方向为大数据应用研究。块的功能,对企业海量实时日志处理和监控平台建设具有一定的指导意义。1实时流处理相关技术该实时报警服务米用Scribe+Kafka+Storm的实时流处理构建方案。在这个构建方案中,Scribe负责采集日志数据,实时监测日志文件的变化;Kafka则是充当连接Scribe和Storm的纽带,用于对数据进行缓存;整个系统的核心处理模块由Storm担任,用于对采集上来的数据分析过滤、实时处理。下面将对这三种技术做详细的阐述。1.1日志收集系统ScribeScribe是Facebook开源的日志收集系统,在Fa-cebook内部以及国内多家互联网公司都得到了广泛的应用。它能够从各种日志源上收集日志,之后存储在外部存储系统中,以便于进行集中统计、分析处理。它为日志的“分布式收集,统一处理”提供了一套完整的解决方案,具有可扩展、高容错的优点。Scribe最引人注目的特点是容错性好,当后端的存储系统崩溃时,Scribe会将数据写到本地磁盘上,当存储系统恢复正常后,Scribe将日志重新加载到存储系统中,很好地避免了数据的丢失。Scribe的架构图如图1所示。Application通过ThriftPRC远程传输到MessageQueue中,然后异步的由多个进程从队列中取出数据推送到外部存储系统中,完成数据的收集工作。1.2分布式消息系统KafkaKafka是Linkedln公司开源的高吞吐量的发布-订阅消息系统,是一个分布式的,可划分的,冗余备份的持久性的日志服务系统,主要用于处理海量的、活跃的流式数据,具备良好的容错能力,同时支持online和offline的场景。Kafka的架构图如图2所示。Kafka主要由Producer、Broker和Consumer三部分组成。Producer负责收集数据并发送到Broker,Broker用于数据的中间缓存和分发,数据的订阅消费则交由Consumer完成。Kafka是显式分布式架构,可以有多个Producer、Broker和Consumer同时存图2Kafka的架构图在,完成消息的发布和订阅。多个Broke协同合作,Producer和Consumer部署在各个业务逻辑中分别担任数据生产者和数据消费者的角色,三者又通过分布式服务框架Zookeeper管理协调、请求和转发。1.3实时计算系统StormStorm是一个开源的、分布式的、容错的实时计算系统。基于Hadoop为开发者提供了Map、Reduce原语,降低了并行处理的复杂性。类似的,Storm为大数据实时计算提供了Spout、Bolt等优美的原语,简化了面向庞大数据流的处理机制。Storm之于实时处理,就好比Hadoop之于批处理。Storm还包括如下特性:①高可靠性。Storm的ack机制可以保证Spout发出的每条消息都能在一个指定的时间内被“完全处理”,其事务机制可以保障消息的准确性。②可扩展性。Storm支持灵活的水平扩展,计算任务可以在多个线程、进程和服务器之间并行进行;当某一级处理单元速度达不到要求,可以直接配置并发数提高性能。Storm集群中有两种节点:一个主节点Nimbus和多个工作节点Supervisor。Nimbus负责资源分配和资源调度,并且监控状态。Supervisor负责监听Nimbus分配给自己的任务,启动和停止属于自己管理的Worker进程。Nimbus和Supervisor之间依靠Zookeeper通f目,并且Nimbus和Supervisor都是快速失败和无状态的,其元数据存储在Zookeeper中,随时宕机重启,使得Storm具有非常高的稳定性。Zookeeper用于协调集群中的不同组件,Storm使用Ze-roMQ传送消息,JZMQ是ZeroMQ的JavaBinding。Storm的基本体系框架图如图3所示。2系统设计与实现针对日志数据实时处理的需求,提出一种基于Storm的实时报警服务,它是一个基于设定关键字的实时报警服务,统计分析某一段时间间隔内设定关键字出现的次数,如若超出设置的报警阈值,则报警到相应的报警组。一163—图3Storm的架构图只需简单的配置一些报警信息,就可以实现对相应日志的监控;并且支持动态加载报警配置信息,用户可以根据需求随时更改报警配置,Topology会在tick时间内加载并更新报警配置,并依据新的配置信息完成报警服务。2.1整体框架设计米用Scribe+Kafka+Storm的实时流处理框架。日志数据会在产生的第一时间被收集并发送到日志转发服务Scribe上,然后由日志转发服务Scribe将其推送到消息缓存队列Kafka对应的Topic中,防止数据的采集端(Scribe)和处理端(Storm)处理速度不一致时数据的丢失。运行在Storm中的Topology会读取Kafka中的数据进行分析,并将分析的结果持久化到数据库中。推送引擎主动获取数据库中的数据,将处理结果推送到Web端展示给用户。整体架构图如图4所示。图4整体架构图2.2主要处理流程设计实时报警服务的主要处理流程是将流入到Storm的日志数据进行分析处理的一个过程,Storm分析处理的流程图如图5所示。Storm将流入系统中的日志信息进行关键字命中检查,筛选出符合要求的日志信息,并将其下发。过滤白黑名单。白名单是不做处理的日志信息,以便提供系统处理效率。黑名单是用户配置的敏感信息,比如fatalerror等,当检测到黑名单里面设置的敏感信息时,马上发送QAlarm重度报警。白黑名单可以随时添加或删除,即时生效。——164——图5Storm分析处理的流程图分类统计时间£内设定关键字出现的次数,然后匹配预先设定好的报警阈值,以及报警规则,对于符合报警要求的关键字给相应报警组发送邮件/短信通知。用户设定的报警配置以及历史报警记录存入数据库,以便在Web端展示,方便用户查询。2.3实时报警服务实现2.3.1日志实时收集模块日志实时收集模块是指通过Scribe收集各个集群的系统日志和业务日志数据,并通过Kafka将其输入到Storm系统中。Scribe可以从不同的数据源(集群中的服务器,作为Scribe的客户端)收集日志,然后将日志数据存入中央存储系统(Kafka),以供计算系统(Storm)处理日志数据。各个数据源通过thrift向Scribe服务端传输日志数据,每条日志数据记录*ifcate-gory(cluster_name+host_name+topology_name)和一个message(日志行信息)组成;在后端,Scribe将不同category的数据存放在不同的目录中,以便于将不同的日志数据分别发送到Kafka的不同Topic中。Kafka作为一个独特的消息系统,数据从Pro-吴键字、黑白名单、报警阈值、报警规则、报警组可以根据用户具体需求随时更戚,木Mi薪提交Topology,即时生效E-mail/SMSZookeeperSuper\¥ducer推送到Broker,Broker负责持久化数据,承担消息的中间缓存和分发的角色,不同的消息存放于不同的Topic,Consumer端采用拉取的方式消费数据,本系统中日志消费方,即Storm中的Topology。Kafka完成将流式日志数据传递给Storm实时分析系统的任务。2.3.2日志实时处理模块日志实时处理模块是整个实时报警服务的核心模块,具体实现米用Storm实时处理框架。通过统计时间£内的设定关键字出现次数,如若达到阈值则报警。通过设计Storm的Topology来实现对输入数据流的分析处理,在Topology中,流是一个不间断的无界的连续tuple,通过在Topology的各个bolt里面不断的分析处理,将日志数据进行过滤筛选。实时处理模块的Topology逻辑图如图6所示。KafkaSpout完成数据接入工作,订阅某个Topic的数据,并通过nextTuple()
本文标题:基于Storm的实时报警服务的设计与实现
链接地址:https://www.777doc.com/doc-6020506 .html