《信息通信技术》是中国联合 络通信集团有限公司主管、主办的国内外公开发行的中英文科技期刊(CN11-5650/TN,ISSN1674-1285),2007年12月正式创刊。本刊旨在反映国内外信息通信技术最新研究成果,提供信息通信技术交流平台,推广先进信息通信业务和应用,为我国建设信息 会和创新型国家服务。
【摘要】为了满足大数据监控告警系统具备灵活告警及实时动态更新各类配置的需求,在深入研究各大数据监控告警系统架构的基础上,提出一种基于Flink+QLExpress新架构的处理海量数据的实时监控告警系统。首先通过Canal采集数据,然后利用聚合程序聚合数据后推送至Kafka,利用Flink从Kafka数据源获取源数据,并通过Flink SQL技术实现数据清洗及过滤,得到满足阈值条件的初级告警数据,最后通过QLExpress技术实现告警数据的二级过滤、告警信息的格式化及推送。结果表明此架构通过引入Flink SQL和QLExpress能够实现告警口径、告警阈值、告警格式及推送方式的动态更新与发布,增强了告警的实时性、灵活性及便利性,提升了运维效率。
【关键词】海量数据;告警系统;Flink;Flink SQL;QLExpress;Canal
引言
随着物联 、移动互联 的发展及信息技术向各行业的深入渗透,随之而来的是海量数据的存储、计算和分析等问题,而海量数据的处理给运维监控系统的核心告警系统带来了极大的挑战。目前的海量数据监控告警系统通常采用Kafka+Flink模式,此模式不够灵活。前人对海量数据流处理的研究多集中在Flink技术上,在实际生产过程中应用Flink来处理海量日志,提升数据处理效率及能力,提高告警的及时性。但是如上传统模式的监控告警系统无法动态更新告警口径、阈值、格式及信息推送方式等,往往需要通过更新版本代码的方式实现告警口径等的增加或修改。
现有的大数据监控告警系统的实现方式可以概括为如下四类[1-3]。一是直接基于Flink实现监控告警,对于数据的获取方式采用传统方式,Flink作为实时流计算引擎对数据进行处理分析得到中间结果数据,然后与阈值进行比较,符合阈值条件的发送告警信息;二是Kafka作为消息中间件,其不同Topic的数据作为Flink的数据源,Flink负责依据预设的指标进行数据处理及过滤,并将结果写入Redis[4],Promethues从Redis拉取数据,Grafana根据数据进行图表展示;三是利用基于QLExpress规则引擎的监控告警系统,可以实现灵活预警、配置动态发布与更新,但是无法承载海量数据的实时分析及处理;四是基于Flink的实时计算平台的设计与实现,使用Flink提供的SQL语法功能实现配置的动态更新,搭建了一个可视化的实时计算平台,但未将其合理地运用到监控告警系统中。因此,前人对告警系统的研究多集中在Flink或者QLExpress上,而对Flink+QLExpress技术模式处理海量数据的研究较少,还有待深入。
1 核心技术
1.1 Canal技术
Canal是阿里开源的基于MySQL数据库增量日志解析,提供增量数据订阅和消费,类似MySQL的一个Slave,实现数据的同步与备份,进而达到数据采集的目的。其工作原理图如图1所示。
1)Canal模拟MySQL Slave的交互协议,将自己装扮为一个MySQL Slave,并将dump协议转发至MySQL Master。
2)MySQL Master接收到Slave的转出请求后,开始将二进制日志推送给Slave,即Canal。
3)Canal解析二进制日志为自己支持的数据类型,后续可通过加工处理后作为不同的对象的源数据,如MySQL、Kafka、Elasticsearch、Hbase等。
Canal适用的场景如下:1)数据同步,如实现在线、离线数据库之间的数据同步。2)数据消费,如对所关注的数据库表产生的变化,实现数据增量搜索。3)数据脱敏,如将线上动态数据导入到其他存储结构,实现数据的脱敏。
1.2 Kafka技术
Apache Kafka最初是由LinkedIn研发的一个分布式的发布—订阅消息系统[5-6],为处理实时数据提供一个统一、高通量、低等待的平台。Kafka是一个分布式系统,由通过高性能TCP 络协议进行通信的服务器和客户端组成,可部署在内部以及云环境中的裸机硬件、虚拟机和容器上。Kafka集群可以在一个指定的时间内保存所有发布上来的消息,当超过指定的时间后消息就会被系统丢弃以释放空间。Kafka的性能不会受数据量大小的影响,因此可以保存大量的数据。
1.3 Flink及Flink SQL技术
Flink是一个针对流数据和批数据的分布式处理引擎[7-10],所要处理的场景主要是流数据,会把所有任务当做流来处理。因此,Flink可以提供数据处理的通用方案,使得由相同或相关的组件和API搭建框架的处理需求得以简化。同时,Flink可以支持本地快速迭代,可以定制化内存管理。所以,Flink的特点是处理大数据速度快,能满足大数据背景下应用实时计算平台的需求。
Flink是一个真正的流式处理,其可以按照元组逐个分发数据,做到对数据的单条处理,而不需要再流处理汇总执行计算。其支持大规模计算能力,能够在数千个节点上并发运行,具有强大的吞吐量和延迟特性,提供了数据分布、数据通信以及容错机制等功能。同时,Flink提供多种灵活的窗口函数及更高抽象层的API,使开发者可以更便捷地编写分布式任务。
Flink SQL是面向用户的API层[11],是降低用户使用实时计算门槛而设计的一套符合标准SQL语义的开发语言,开发者可以直接在代码中书写SQL实现一些查询操作。Flink的SQL支持基本查询语法,常见的算子包括SELECT、WHERE、DISTINCT、GROUP BY、UNION、UNION ALL、JOIN等。同时,Flink SQL提供大量的内置函数,常见的内置函数包括比较函数、逻辑函数、算术函数、字符串处理函数、时间函数,也支持使用者自定义函数实现其他计算。Flink实现了SQL标准的Apache Calcite(Apache开源 SQL解析工具),语法易读易书写,开发者只需关注业务逻辑。而且Flink内置很多优化规则,简化了研发的复杂度,通过SQL能在高层应用上实现真正的批流一体。
1.4 QLExpress技术
QLExpress是一个开源的类Java语法的规则引擎[12-13],作为一个嵌入式规则引擎在应用程序中使用。该规则引擎是一种动态脚本解析引擎,用Java语言来编写脚本,支持自定义运算符、自定义函数、宏定义、拓展操作等,可以简化业务规则,从而使得规则的定义变的灵活。其实现原理主要包括定义规则、解析规则、执行规则三个步骤,编译过程是一个实现了完整的词法分析、语法分析、语义分析、编译指令、指令执行的过程,类似Java语言中Class文件的编译过程。
QLExpress规则引擎被应用在各类场景中,其特性如下。1)线程安全:在引擎运算过程中产生的所有临时变量都是ThreadLocal类型;2)执行效率高:将耗时长的脚本编译过程缓存在本地,运行时临时变量的创建使用缓冲池技术实现,其性能与Groovy性能相当;3)弱类型脚本语言:同JavaScript及Groovy的语法类似,其运行速率慢于强类型脚本语言,但其大大增强了业务实现及配置的灵活度;4)安全控制:通过相关运行参数的配置防止死循环及恶意调用等异常情况的发生。
2 系统设计
目前,大数据监控告警系统采用的方案通常为下述三种方案:方案一是采用Filebeat+Kafka+Flink+告警的架构,无法实现告警口径的动态更新及与业务代码逻辑的解耦;方案二是采用Filebeat+Kafka+Storm[14]+QLExpress+告警的架构,Storm流式处理采用ACK机制,对每个消息进行全链路跟踪,失败或超时进行重发,每次需要一个ACK机制,无法实现真正的流处理,相比Flink存在一定的劣势;方案三是Filebeat+Kafka+Flink+QLExpress+告警的架构,该架构几近完美,其中Filebeat是一种容器日志采集利器,读取的对象是日志文件,对于MySQL的二进制文件无法读取,不适用于对源数据存储于MySQL的系统。
2.1 数据采集
数据采集模块包括数据源及采集工具。数据源一般是MySQL数据库,存储的是通过平台产生的实时交易数据,如能力的基本信息(能力名称、版本 、交易接收时间、交易处理结束时间等)、交易响应码(平台返回码、业务返回码等)、主子服务的关联关系字段等。Canal采用高可用模式,即一个Canal实例采集多个日志库数据,实现源数据的采集。
2.2 数据聚合
数据聚合模块包括聚合程序及消息中间件。聚合程序用于将Canal采集得到的数据进行主子服务的聚合、所需字段的获取及整理,然后将聚合结果推送至Kafka的某个Topic。
2.3 数据处理
数据处理模块包括数据获取、数据清洗及过滤。首先进行数据获取,Flink将Kafka作为数据源,读取Topic的数据,将Kafka的Json格式的数据注册为一个实体并存入自定义表中;然后进行数据清洗及过滤,从Redis中读取已存入的Flink SQL脚本,通过该SQL脚本进行一次过滤,得到1分钟粒度的告警数据,即初级告警数据,然后从Redis中读取已存入的QLExpress脚本,通过QLExpress脚本对初级告警数据进行二次过滤。如上两个脚本是程序首次启动后会从数据存储模块获取,同时写入Redis中,后续只需从Redis中获取即可。
2.4 告警推送
告警推送模块包括告警信息格式化及告警推送。采用QLExpress技术进行告警信息格式化及实现告警推送,该技术支持Java语法,简单易学,告警配置人员能够快速配置告警脚本。QLExpress脚本中先对告警数据进行格式转换,转为用户能够清晰可见的文字描述,然后调用微信API、钉钉API进行数据推送,运维人员只需关注对应的钉钉群或者微信群获取告警信息,如图3所示。同时,该告警系统支持告警外呼功能,即通过电话方式将告警信息通知到当日值班人员,同时外呼告警历史可查询。
2.5 数据存储
2.6 管理控制台
管理控制台模块包含大数据告警SQL管理(脚本管理)及告警日志管理,前者管理数据处理模块中使用FLink SQL数据清洗、过滤脚本及QLExpress告警推送脚本,后者用于告警历史数据的查看。
3 应用效果
基于此新架构的监控告警系统已应用在中国联通天擎项目中,实现对海量能力交易数据的实时分析及处理,完成能力异常调用的实时监控告警,极大提升了告警及时性,增强了告警配置的灵活性,目前已取得了显著的成效,主要体现在以下几个方面:1)每分钟处理的数量达到261万+条;2)可实现秒级告警;3)告警准确率达到100%;4)处理的应用系统量达2 000+个;5)节省运维成本达到120人/年,由8人年降低至2人年;6)告警配置速率提升24倍,由2天降低至2小时。
4 结语
参考文献
[1] 孟小峰,慈祥.大数据管理:概念、技术与挑战[J].计算机研究与发展,2013,50(1):146-169
[2] 王珊,王会举,覃雄派,等.架构大数据:挑战、现状与展望[J].计算机学 ,2011,34(10):1741-1752
[3] 程学旗,靳小龙,王元卓,等.大数据系统和分析技术综述[J].软件学 ,2014,25(9):1889-1908
[4] 张俊,廖雪花,余旭玲,等.关系型数据库内存化存储模型研究[J].计算机工程与应用,2021,57(19):123-128
[5] 吴璨,王小宁,肖海力,等.分布式消息系统研究综述[J].计算机工程与应用,2019,46(6A):1-5,34
[6] 徐晶,许炜.消息中间件综述[J].计算机工程与应用,2005,31(16):73-76
[7] 李梓杨,于炯,卞琛,等.基于负载感知的数据流动态负载均衡策略[J].计算机应用,2017,37(10):2760-2766,2772
[8] 代明竹,高嵩峰.基于Hadoop、Spark及Flink大规模数据分析的性能评价[J].中国电子科学研究院学 ,2028,13(2):149-155
[9] 李梓杨,于炯,卞琛,等.基于流 络的Flink平台弹性资源调度策略[J].通信学 ,2019,40(8):85-101
[10] 汪志峰,赵宇海,王国仁.异构Flink集群中负载均衡算法研究与实现[J].南京大学学 (自然科学),2021,57(1):110-120
[11] 王玉真.基于Flink的实时计算平台的设计与实现[D].南昌:南昌大学,2020:29-40
[12] 王李军,陶明亮,张曙,等.面向业务规则引擎研究[J].计算机工程,2007,33(24):52-56
[13] 费廷伟,刘淑芬,屈志勇,等.Java反射驱动的规则引擎技术研究[J].计算机应用,2010,30(5):1324-1330
[14] 孙大为,张广艳,郑纬民.大数据流式计算:关键技术及系统实例[J].软件学 ,2014,25(4):839-86
陈 丽:硕士,工程师。主要从事能力开放平台运维工作,研究方向为智能化运维平台的建设,曾获得“最佳新人”奖及联通集团科技进步二等奖。
杨大龙:本 科,工程师,研究方向为运行维护,致力于运维产品的设计与体验。曾获联通集团科技创新奖一等奖。
高中纤:本科,从事电信行业产品研发设计,主要研究在大数据场景下的运维自动化、智能化方向,致力于运维智能监控告警和服务治理等项目的设计与研究。
张 伟:本科,中国联通软件研究院能力开放运营项目经理,主要从事能力开放平台及能力运营体系的研究,所负责项目曾多次荣获联通集团科技创新一等奖。
校审:王钐杉
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!