翟友钧,赵旦谱,台宪青
(1. 江苏物联网研究发展中心,江苏 无锡 214135;2. 中国科学院大学,北京 100049;3. 中国科学院电子学研究所,北京 100190; 4.中国科学院电子学研究所 苏州研究院,江苏 苏州 215121)
在大数据分析场景中,丰富、全面、优质的数据源是决策支持的重要前提。数据越多越全面,得出的分析结果越准确。但冗余的数据会加大分析难度,提高计算分析工作量,降低决策支持准确性。目前,固定频率采集策略被广泛应用,但不是高频就是低频,无法兼顾降低采集数据量冗余与保证采集信息精度。
针对分布式集群中的计算机资源状态信息,本文设计了一种面向主动安全的动态采集策略,通过与固定频率采集策略的对比,通过反复验证证明,该策略可以有效降低信息冗余并保证采集精度,同时还保证了对系统资源的低占用。
当前对于动态采集频率的研究中,以采集目标是否平滑作为动态采集变频依据[2]。集群中的计算机资源状态信息具有连续变化的特点[3],其平滑程度与系统是否正常并无确定关系[4]。因此需要根据其特点,制定动态采集变频依据,在系统正常运行时降低采集频率,异常时提高采集频率。
集群中可通过10种状态信息共计164项,对计算资源、存储资源、操作系统、网络状态进行刻画。从这个角度出发,可以将这些状态信息分为4种,如表1所示。
表1 计算系统全量状态信息分类
其中,只有阈值与系统是否正常具有紧相关性的状态信息才可以作为动态采集的变频依据。经过筛选,在164项可采集状态信息中,能刻画系统状态是否正常的有49项。这49项状态信息又可以分为以下3类。
1.1.1系统资源使用情况统计信息
这类信息统计刻画了集群中的资源使用情况,在系统正常运行时,其数值应处于一个正常阈值内;当超出这个阈值,则表明系统可能存在问题。属于该类别的状态信息共计6项,如表2所示。
1.1.2系统中某状态资源统计信息
这类状态信息记录的对象主体本身是系统正常组成的一部分,在系统正常运行时因处于较低水平(为0或几乎为0);如果这类状态信息记录到了较高水平的数值,则表明系统可能处于异常状态。属于该类别的状态信息共计8项,如表3所示。
表2 系统资源使用情况统计信息
表3 系统中某状态资源统计信息
1.1.3网络状态异常引起的报文失效统计信息
这类状态信息记录的对象主体是各类网络协议中传输失效的报文数,当网络状态正常时,其数值应当处于一个较低水平(为0或几乎为0);如果记录到了较高
水平的数值,则表明系统网络可能处于异常状态。属于该类别的状态信息共计35项,如表4所示。
本文将上述49项状态信息作为动态采集的变频依据。
表4 网络状态异常引起的报文失效统计信息
在现有动态采集策略中,不同采集对象的采集频率进行同步调整。其优势是实现方便,适用于采集对象种类少、采集对象之间关系简单的系统。在计算机系统中,信息采集种类多、采集对象之间具有相关性,可以依此在不同种类的异常发生时,对不同的采集对象进行分组变频。与现有动态采集策略相比,这种策略可以在保证采集精度的同时,进一步降低数据冗余。
变频策略设计如图1所示。当属于变频依据的某类状态信息记录到异常数值,改变其所属整类状态信息的采集频率;同时依据状态信息之间的关联关系,改变具有相关性的其他类状态信息的采集频率;对不具有相关性的其他类状态信息不改变采集频率。
本文所设计的动态采集策略,需要在大数据分布式环境中进行部署与实现。在高并发时,避免系统异常与提高采集频率形成相互影响是本课题必须要解决的问题。
1.3.1并发模型——协程
在Linux分布式环境中,通常使用多进程并发模型。这种并发模型的缺点是服务器的性能会随着连接数的增多而变差。本文在进行动态采集策略的部署与实现时,从底层采用了一种新的并发模型——协程(Coroutine),如图2所示。协程十分轻量,可以在一个进程中执行数以十万计的协程依旧保持高性能;一个进程有数千个线程,其CPU会忙于上下文切换,性能急剧下降。执行协程只需要极少的栈内存(大概是4~5 KB),线程栈的默认大小为1 MB。创建它们的初始内存成本很低廉(传统POSIX线程需要1~8 MB内存),并可以根据需要动态增长和缩减占用的资源。这使得goroutine会从4 096 B的初始栈内存占用开始按需增长或缩减内存占用,而无需担心资源的耗尽。
图1 动态采集变频策略
图2 协程并发模型
图5 动态采集策略实现
1.3.2采集方法——procfs与psutil
本文通过利用procfs(process file system)实现计算资源状态信息的采集。采集方法如图3所示。在Linux系统启动时,会动态生成一个伪文件系统,用于通过内核访问进程信息。内核中的所有信息及可调整参数都被以文件实体的形式映射到一个目录树中,本文使用gopsutil对procfs下文件进行调用,实现计算资源状态信息的采集。
本方法好处在于:procfs不是一个真的的文件系统,只占用有限的内存,不占用存储空间;计算资源状态信息由操作系统内核动态映射到文件中,无需占用额外的系统资源。
图3 采集方法
1.3.3动态采集策略实现
Telegraf由golang实现,其底层架构采用协程并发模型,通过gopsutil读取procfs实现对系统状态资源的采集,满足系统资源低占用的要求。但其采集频率由配置文件设置,改变采集频率需要重启生效,没有使用动态采集策略。其系统架构如图4所示:采集器启动时,从配置文件Config中读取采集间隔及其他配置参数并使其生效;Input插件从采集目标源中获取采集对象数据;Processor插件和Aggregator插件对Input插件得到的数据进行处理和聚合;Output插件将采集数据传输到数据存储目标(数据库)中。
图4 Telegraf架构
本文通过对其进行源码改编,实现了所提出的动态采集策略。如图5所示:当Input插件从采集目标源获取采集数据后,根据上文提出的变频依据判别集群运行状态是否正常、是否需要改变采集频率,如果不需要,则不进行后续操作;如果需要,则根据上文提出的计算资源状态信息相关关系确定需要改变采集频率的状态信息;然后将要改变的采集频率目标值通过Internal接口传输到Input插件中,实现采集频率改变的即时生效。
同时还设计了一个状态接口:当其他外部组件(如:集群健康度监控、主机异常检测模块等)判别系统处于异常状态需要改变采集频率时,也可通过该状态接口使用本文所提出的动态采集策略。
本实验的实验环境是由6台服务器搭建的分布式集群,配置如表5所示。
表5 实验环境服务器参数
为了真实地模拟分布式集群计算资源状态信息的动态变化情况,在实验分布式集群上运行OpenTSDB标准测试程序,该测试程序可以模拟不同的应用类型的工作负载,包括CPU、内存、I/O等。
对于监控系统来说,应当尽量做到全量监控,这样看到的问题才足够接近真实。监控尽量做到实时,延迟1 min都意味着故障处理总时间的延长。根据全量采集的标准,心跳数据是1 min一次;如果是服务器或者硬件监控,一般几秒一次;如果是特别重要的,可以1 s一次。对于全量采集,心跳频率是采集频率的最低底线。
本文提出的动态采集策略希望在进行分布式集群计算资源状态信息数据采集时,兼顾降低采集数据量冗余和保证采集信息精度。理想情况下,二者越高代表动态采集策略效果越好。然而,通常情况下,两者之间相互影响,希望正常状态信息数据量冗余降低度越高,需要将最大采集间隔设置越大,导致对异常状态信息的反应灵敏度越低,异常状态信息采集精度随之下降。因此,兼顾降低采集数据量冗余和保证采集信息精度需要合理的最大采集间隔时间。
(1)
(2)
异常状态信息采集灵敏度定义(Abnormal sensitivity)如下:
(3)
在其他参数不变的情况下,正常状态信息数据量冗余降低度Re随最大采集间隔T的变化规律如图6所示,异常状态信息采集灵敏度As随最大采集间隔T的变化规律如图7所示。可以看出,正常状态信息数据冗余降低度Re随最大采集间隔T的增大而对数提高,异常状态信息采集灵敏度As随最大采集间隔T的增大而线性减小。在最大采集间隔较小时,正常状态信息冗余降低效率较高且异常状态信息采集灵敏度降低代价较小;而随着最大采集间隔取值的增大,不仅异常状态信息采集灵敏度降低代价增加,且正常状态信息冗余降低效率较低。
图6 冗余降低度变化规律
图7 异常灵敏度变化规律率
为了取得较好的正常状态信息冗余降低效率和较小的异常状态信息采集灵敏度降低代价,需要综合考虑二者的关系,选取合适的最大采集间隔T。定义正常状态信息数据量冗余降低度Re与异常状态信息采集灵敏度As的综合评估指标F-measure如下:
(4)
图8展示了其他参数不变的情况下,FReAs随最大采集间隔T的变化规律。可以看出,存在一个最大采集间隔最佳取值,能够以最小的异常状态信息灵敏度降低代价取得最大的正常状态信息冗余降低效率。
图8 FReAs变化规律
在本实验方案中,设置高频采集频率为5 s/次,低频采集频率为25 s/次。通过故障注入方法模拟计算机系统中出现的异常状态。本文提出的动态采集策略可在8类故障产生时触发动态采集,在实验中主要向被检测虚拟机中注入了如下3类故障,测试覆盖率37.5%。
(1)内存故障注入:主要是通过在注入对象服务器中运行一个内存密集型程序来实现,例如不断地调用malloc函数申请内存,此时被注入对象服务器会出现内存泄露,内存占有率会提高。
(2)CPU故障注入:主要是通过在被注入对象服务器中运行一个计算密集型程序来实现,例如死循环、复杂数学计算等,此时被注入对象服务器的CPU使用率会发生变化。
(3)I/O故障注入:该类故障是通过在被注入对象服务器中运行一个数据传输密集型应用程序,被注入对象服务器的磁盘I/O吞吐率会发生变化。
为了验证本文提出的动态采集策略的有效性,在2个完全相同的分布式集群计算环境中,同时分别应用动态采集策略与固定频率采集策略进行重复的对比实验,并得到相应的实验结果。
本实验主要通过准确率、召回率、F-measure来评价动态采集策略的性能[5]。
实验结果评价指标如表所示。
表6 实验结果评价指标
根据表6, 定义NTP、NFP、NFN、NTN代表四种情况下采集样本数量。在此基础上,准确率与召回率这两个指标定义如下:
准确率(Precision):
(5)
召回率(Recall Rate):
(6)
准确率和召回率之间相互影响,准确率高时一般召回率就低。因此,为了进行更全面的评价,本文引入综合评价指标(F-measure),其定义如下:
(7)
实验中通过3种故障注入方法,模拟系统运行状态空闲、正常、异常、最后回归正常4个阶段下的状态信息。图9~14分别展示了3种故障注入实验结果,实验时间分段如表7所示。
表7 故障注入实验时间分段 (min)
图9 任务节点CPU使用率
图10 监控节点网络流量
图11 任务节点内存占用
图12 监控节点网络流量
图13 任务节点磁盘IO
图14 监控节点网络流量
表8展示了3种异常模拟实验的采集结果。由表可知,在不同的故障注入方法中,本文提出的动态采集策略在面对不同的异常状态时,采集结果稳定性高,能保持较高的准确率。
表8 故障注入实验结果
在进行3种异常模拟实验的同时,采集监控节点的网络通信流量结果。测试结果如图10、图12、图14所示。对于监控节点,网络通信主要是采集数据的传输,因此可以通过它来观察两种策略在采集数据量上的差异[6]。可以看出,对于系统正常运行状态,动态采集策略所采集的数据量大约只有非动态采集策略的1/6;对于系统异常运行状态,动态采集策略所采集的数据量与非动态采集策略基本相同。由此可以得出结论:本文提出的动态采集策略在面对不同的异常状态时,均能在保证采集精度的同时,有效降低采集数据冗余。
本文主要针对计算资源状态信息,提出了一种动态采集策略。根据计算资源状态信息自身特性,设计了变频依据和变频策略。实验结果表明,该策略稳定、准确、有效。
参考文献
[1] 张斌,朱建涛,徐曌.基于动态频率算法的远程监控系统数据采集优化策略[J].微电子学与计算机,2016,33(8):86-91.
[2] 曾文序,库少平,郑浩.基于旋转门算法的自适应变频数据采集策略[J].计算机应用研究,2018(03):769-772.
[3] PADHY P, DASH R K, MARTINEZ K, et al. A utility-based sensing and communication model for a glacial sensor networt[C]//Proceedings of the 5th International Conference on Autonomous Agents and Multi-Aent Systems, 2006:1353-1360.
[4] SOLIMAN S S, AWONIYI O O. System and method for assisted network acquisition and search updates[P].US:US20120069800A1, 2012-063-22.
[5] 许福. 虚拟计算环境下节点异常检测方法研究[D].南京:南京理工大学,2017.
[6] 孙鹏. 云计算环境下的仿生自主监控系统和多指标均衡调度机制的研究[D].成都:电子科技大学,2017.