自适应数据采集组件设计
2020-08-06刘永芬陈志安赖晓燕
刘永芬 陈志安 赖晓燕
摘要:数据采集作为数据分析的基础起着重要的作用。文章针对现有的大数据信息采集技术方案中存在的采集设备性能数据不可配置、采集容量小等问题,提出了一种性能好、可配置、自适应的数据采集解析方案。该方案可以适配多种网络拓扑及多厂家设备,最大限度地提高数据采集规模,还可以自动调整采集策略,以避免出现单源采集阻塞问题,保证整个采集平台的有效运行。
关键词:自适应;数据采集;组件设计
中图分类号;TP39 文献标识码:A 文章编号:1006-8228(2020)07-63-04
0引言
在大数据时代,人们的日常生活都离不开网络,各内容提供商及其所使用的设备每天都会产生海量数据。设备上的数据类型多种多样,不仅有与设备运行信息相关的数据,也有与企业、用户相关的数据,如软/硬件系统日志数据、设备接口流量数据、用户上网行为数据等,这些数据中蕴藏着丰富的信息等着我们去挖掘。因此,我们通过不同的数据采集技术获取数据是进行数据挖掘的先决条件。
所有设备都在采集平台的管控中,为了监控所有设备的健康状态及统计设备接口的流量信息,需要每隔一定时间(假设:x分钟)采集所有设备的CPU、内存、温度、以及设备接口的相关指标数据。假设,有m台设备是属于跨公网采集,有k台设备的接口数大于250,这两类设备的采集速度会明显慢于常规的采集速度。典型的数据采集场景网络拓扑描述如图1所示。
拓扑图是典型的数据采集场景,使用常规的采集方案可能存在如下问题:当m+k的值大于采集线程并发数时,可能导致整个采集组件阻塞。当管理的设备规模变大时(n>=3000),采集组件在x分钟内可能无法采集完所有设备的数据。当管理的设备中的一部分设备间断性的出现协议不可达现象,常规的采集组件会在采集这类设备时消耗掉一部分性能,最终可能导致无法采集所有设备的数据。
综上所述,现有的一些网管产品的性能采集模块存在如下几个问题:采用硬编码方式來采集设备性能数据,其不可配置,可扩展性差;采集功能与业务处理功能耦合在一起,不利于采集性能的优化;采集容量太小,5分钟只能采集600-700台设备;单设备采集阻塞会导致后续采集计划挂起(即单节点阻塞效应)。本文提出了一种高性能(5分钟采集3000台设备性能数据)、可配置的采集组件设计方法,以支持不同粒度的采集器配置,包括厂商、型号、设备、指标等,从而达到采集指标与采集指令可配置。采集模块支持多协议以及节点粒度的采集反馈机制,并向上层业务模块反馈异常。基于反馈信息自动调整采集策略自适应采集数据,通过采集日志监控调试。
1相关术语
简单网络管理协议(SNMP):由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象嘲。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。SNMP用于简化网络设备的管理,每个网络设备上都有一个SNMP代理,该代理有两个作用:负责响应采集平台的SNMP请求(被动型);将设备上的一些重要事件主动发动给目标采集平台(主动型)。
设计模式是对面向对象设计中反复出现的问题的解决方案。设计模式的出现和广泛应用为实现软件高内聚和低耦合提供了有效的方法。观察者模式是一种能够有效降低软件模块间耦合度的设计模式,它的采用将有利于设计者敏捷的构建信息系统。
数据采集指由采集平台(请求方)利用网络技术(如SNMP协议)或爬虫技术嘲从目标数据源获取数据的过程,采集过程涉及几个关键要素,包括用于提供采集指令的配置与加载的配置器;表示采集的目标设备(应用)的采集节点;体现采集结点某一属性信息的采集指标;采集组件与采集结点交互时所使用的通信协议;采集器与采集结点通信时所用的信令,即采集指令;采集器的采集动作结束时对外通告的消息事件;用于解析采集结果的数据处理对象的采集解析器。
2采集方案设计
2.1总体流程
采集组件主要有三部分内容:采集规则配置、采集核心、采集结果解析。采集规则配置模块的主要任务是加载已配置的采集规则,提供采集规则配置服务,配置信息在下一采集周期即可生效。采集核心的主要任务是发起采集任务。采集任务包括:准备待采集结点、采集、采集结束时现场清理;采集监控功能提供线程级别日志、采集异常事件即时反馈给监控模块。采集结果解析模块的主要任务是解析采集结果,将解析结果通告相关业务模块。
采集主流程如图2所示,各逻辑步骤具体描述如下:
Step1采集平台的定时调度组件按时启动采集任务;
Step2采集器获取待采集的目标节点列表,并根据每个采集目标节点的特征信息获取相应的采集指令;
Step3配置器根据指定的匹配规则返回相关指标的采集指令列表;
Step4采集器根据Step3返回的采集指令列表,向目标采集节点发起采集动作(发送请求);
Step5目标采集节点收到请求后,进行内部处理并返回响应采集数据或返回异常信息;
Step6采集器需要根据收到的反馈信息自动调整采集策略。如果采集成功,则向采集到的数据送入中,同时提供采集上下文给采集器;如果返回异常信息,则直接向采集器提供采集上下文及异常信息;
Step7解析器从Ring Buffer中获取采集回来的原始数据,并进行相应的解析处理。
2.2核心模块设计
2.2.1采集规则设计
为了方便表述,我们采用UML方式描述。如图3所示,每个采集结点目标(collectTarget)必定与某个目标规则(TargetRule)实例关联,否则采集工作线程不会对CollectTarget发起数据采集业务。TargetRule告诉采集工作线程使用哪个采集器获取CollectTarget的哪些指标;同时也告诉采集结果处理线程使用哪个解析器处理采集结果。
在上述模型中,TargetRule\CollectorParserPair\IndicatorRule中都可以指定采集器与解析器等,这样设计的目的是为了批量配置,但同时就存在配置值的优先级问题。因此对于不同模型中的相同属性值,本设计做如下优先级约定:
IndicatorRule>CollectorParserPair>TargetRule
每个采集目标节点CollectTarget都需要关联一个采集规则TargetRule,这里就存在一个关联(搜索)规则,而搜索规则设计是否合理将决定搜索效率的高低。本文采用完全匹配规则与最长匹配规则相结合的方式,默认使用完全匹配规则,可通过采集组件全局参数配置接口实时切换关联(搜索)规则。
如果出现特殊场景,同一厂商同一类型但不同型号的设备可能采用不同的采集规则,因此采集规则配置模板也需要支持这种场景,解决方法有如下两种。
(1)在预处理阶段识别出这种特殊型号的设备,然后设置一个可唯一标识的matchValue值,同时提供一个新的TargetRule配置信息即可。
(2)关联(搜索)规则不使用“完全匹配规则”,而使用新的“最长匹配规则”:CollectTarget的matchValue可直接设置为systemOid或vendor.type.serials.model;TargetRule的matchPattem可取值為systemOid或vendor.type.serials,model的一部分全部;TargetRule集合中,TargetRule,matchPattem与CollectTarget.matchValue值匹配部分最长的TargetRule即为与CollectTarget匹配的最优采集规则。
基于以上分析,本设计同时提供两种关联(搜索)规则:完全匹配规则、最长匹配规则。默认使用完全匹配规则,但可通过采集组件全局参数配置接口实时切换关联(搜索)规则。
2.2.2并发采集机制设计
(1)采集主线程如图4所示,包括如下关键步骤:
Stepl数据准备:获取待采集的目标结点CollectTarget列表(设置mmchValue、定位TargetRule、创建相应的CollectComext、创建并发计数器CountDownLatch);
Step2启动采集线程:创建CollectWorker实例并提交至线程池,线程结束时并发计数器减1;
Step3并发采集全部结束或采集超时:取消未结束的采集线程、记录采集日志。
(2)采集工作线程CollectWorker的工作线程如图5所示,主要包括以下步骤:
Stepl检测目标结点的协议可达性,若协议不可达则生成采集异常事件上报给采集监控模块并结束线程;
Step2根据TargetRule的配置信息调用相应的Collector实例获取目标结点的指标数据;
Step3记录单结点采集耗时,基于观察者模式将生成的CollectEvent实例分发给事件订阅者;
Step4并发计数器减1,结束线程。
2.3主要数据结构
2.3.1采集目标信息配置表
采集目标信息配置表用于设置信息采集(抓取)目标节点的基本信息,如服务器IP,采集结果解析规则(正则表达式)等;本配置表是采集组件正常运行的基础。
2.3.2采集指标配置表
采集指标配置表主要用于指明想从采集目标节点上获取哪些关键信息,我们把这些关键信息统称为指标,如节点的内存利用率、CPU利用率等实时状态信息都可以作为采集指标。
3总结
数据采集对采集平台来说是一个重要的基础功能模块。本方案所设计的数据采集组件具备高性能、采集动态自适应、通用性等特点,在各种类型的应用系统中均可以使用。在不增加硬件资源的情况下,本方案提供的设计组件能够在指定的采集周期内,顺利甚至提前采集完成指定规模网络设备的数据,而且不会因为某网络设备的问题而影响对其他设备的采集,数据采集器具备自动调整能力以适应不同的采集环境,实现设备采集的高内聚和低耦合。