王艳艳,张文正,沈佳辉,王 亭,李小真
(1.国网浙江省电力有限公司信息通信分公司,杭州 310016;2.浙江华云信息科技有限公司,杭州 310012)
云计算是一种通过虚拟化技术建立统一的基础设施、服务、信息及应用的资源池,采用分布式技术对各种基础设施资源进行有效组织和运用的运行模式[1]。云计算同时提供了一种面向企业应用实现按需资源分配的模型,全新、高效地部署企业应用[2],从而使得客户获得低成本、高性能、快速配置和海量化的计算服务成为可能。企业将业务部署在云端时会面临如下困难:
1)监控手段对云上业务的运行状态无法形成全方位感知,难以构建云上业务全链路拓扑和业务系统画像,对业务的监控能力较弱。
2)云端业务故障来自于业务所依赖的多个应用程序或不同应用程序之间的复杂交互,缺少有效的链路追踪与请求回溯能力,难以快速界定故障源头。
3)随着云端业务规模扩大,对业务系统的健康管控和故障处理效率也提出了更高的要求,亟需构建自动化智能化的手段,实现系统健康分析和异常智能预警,及时发现系统问题风险。
浙江电网容器云平台(以下简称“浙电容器云平台”)正是在上述背景下应运而生。经过5 年的建设,现有覆盖二级核心域的物理机10 余台,业务支撑20 余个,在各个业务监控上均取得了不错的效果。但其在运维过程中仍然存在以下问题:云环境下的网络拓扑结构异常复杂,由于容器的地址动态变化,导致实时获取浙电容器云平台上业务的拓扑结构面临巨大挑战;相比传统的CS/BS 架构,云计算环境中的系统故障由于容器云环境的动态变化难以排查[3]。云环境下系统运维的前提是各节点的网络拓扑结构[4],因此如何高效准确地识别网络拓扑结构直接决定了故障排查的效果。此外,在获取网络拓扑结构后,对于运行故障的排查,传统的故障感知虚拟机重构框架等方法[5]通常以全局工作负载性能数据报告和故障事件的历史发生率作为输入,通过计算故障的统计信息进行故障预测排查。虽然该框架拥有良好的性能,但仍然存在效率低、过程繁琐等问题。
传统的故障排查技术[6-7]依赖人工判断,效率不高且实时性较差,严重影响故障恢复的速度。近年来,基于机器学习的聚类方法在模式分析分类、决策指定以及数据挖掘领域应用广泛且效果显著[8],将机器学习方法应用于云平台的拓扑结构识别和故障排查,不仅能克服传统方法低效、过程复杂、局限性等问题,还能提高结果的准确性与效率。因此针对该平台,本文提出了基于机器学习的浙电容器云平台故障排查方法。首先通过聚类技术识别云环境下的网络拓扑结构,利用SVM(支持向量机)作为分类器,可以在没有任何假设条件的情况下,对采集到的各节点的状态信息进行自动化异常分类,凭借其最小化经验分类和最大化分类间隔的优势,大大提高了故障排查的效率及其准确率,促进了云计算在电力系统智能运维中的应用。
平均链接聚类法属于层次聚类法的一种[9]。层次聚类法对给定的数据对象集合进行层次化划分,其优点是可以将聚类结果以树状图谱的形式展示出来,可根据相应的需求划分簇类数而不需要重复聚类,且不需要预先设置类簇个数,如图1 所示选择25 则可将数据集划分为两类。
图1 层次聚类
本文选择平均链接聚类方法用于云环境中数据包传输速率的聚类,以便动态生成网络的拓扑结构。具体来说,平均链接聚类方法在计算时依据类簇之间的距离来测量相似度,同时在测量类簇之间的距离时,考虑的不是两类之间的最短距离或最远距离,而是介于两者之间的中间值,避免了使用最短距离判断时破坏类的紧凑性,以及使用最长距离时易产生违背闭合性类簇的弊端[10]。
SVM 是一种定义在特征空间上按监督学习方式对数据进行二元分类的线性分类器,其决策边界是对学习样本求解的最大边距超平面,SVM还可通过核函数进行非线性分类[11]。SVM 的目的是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。在本方法中将浙电容器云平台的故障排查问题由二次约束规划问题转换为分类决策问题,即寻找最优超平面问题。
云环境下的浙电容器云平台在实时运行中,各节点如服务器和虚拟机的状态变化直接影响运行结果。如何根据各节点的实时数据信息,高效、精准地跟踪变化以提前采取相关措施,是实现云环境下浙电容器平台良好运行最关键的操作,而云平台各节点的网络拓扑结构识别是实现这一操作的前提。
该拓扑识别过程具体分为3 个步骤:
1)采用多包组探针进行端对端节点的时延测量。
2)利用基于平均链接的层次聚类方法实现接受节点对的层次划分。
3)采用文献[12]提出的拓扑生成算法,自动实现虚拟机的拓扑结构识别,方法总体框架如图2 所示。
图2 网络拓扑结构识别
2.1.1 共享链路上节点对时延测量
本文采用多包组探测包法来探测节点间的时延。2 个节点间共享链路的长度可由其时延表示,共享链路上端对端的时延通过一个三包组里首末2 个探测包到达同一目标节点的时间差来测量。三包组由首、中、末3 个部分组成,其首、末是同一目标节点的2 个小探测包,中是发送到另一目标节点的大探测包,其目的是间隔开2 个小探测包。
节点的拓扑结构中包含一个发送节点和若干个目的节点。在发送节点发送一个三包组探针包给每个目的节点N,每一对目的节点(Ri,k,Rj,k)都满足i,j∈N,其中Ri,k表示接受2 个小包的目的节点,Rj,k表示接受大包的目的节点,由于需要进行多次测量取平均值,所以k 表示其节点对是在进行第k 次测量时得到。
初始状态,首包B1、末包B2和2 个小包之间的间隔为d,其目的节点为R3,K,大包的目的节点为R2,K,由于三包组末端包B3在大包B2之后发送,所以两小包之间的间隔会在沿着节点间的共享路径传输时不断增加,其目的节点对得到的时延值T2,3=d+Δd。用T 表示B1和B3到达节点R3,K的时间差值,取多次测量后的探测时延平均值,并用Ti,j来表示。通过统计所有节点对的测量值产生一组度量集合T={Ti,j},i,j∈N,并将其用于下一阶段的聚类。
2.1.2 平均链接聚类法识别拓扑结构
本文将节点对的包组时延平均值集合T 作为平均链接聚类算法的输入。聚类过程分为如下4个步骤:
1)数据初始化,将集合T 中的每一个Ti,j,各自归为一类Ci,i∈T,即每个数据样本自成一类,计算每个类簇之间的相似性。
2)选取计算结果中相似性最高的合并对象,合并生成一个新的类簇。
3)计算当前所有类簇两两之间的相似性。
4)重复步骤2)和3),直到所有的数据样本都归为一个类簇。
采用平均链接聚类法计算类簇之间的距离。计算2 个类簇之间所有对象两两之间的距离,接着计算其距离平均值作为这2 个类簇的距离,最后将类簇之间距离最小的2 个进行合并,其算法公式为:
式中:Ci和Cj表示类簇,且i,j∈T;a 和b 分别是类簇Ci和Cj中的对象;d(a,b)表示2 个对象之间的距离。
将输入的节点对时延平均值的集合进行层次聚类后,利用拓扑结构生成算法即可得到实时的网络拓扑图。
基于浙电容器云平台上的网络拓扑图,对其进行智能化故障排查是提高其系统性能的有效手段,通过故障排查可以在系统发生故障时定位到病灶并采取及时措施,甚至可以在系统发生故障之前进行排查。该系统的各节点实时状态数据被收集并用于反映各服务器和虚拟机的当前状态,本文提出结合机器学习与SVM-Random(随机搜索方法)的在线故障排查模型,其总体框架如图3所示。
图3 浙电容器云平台故障排查方法框架
首先利用Kafka 工具[13]收集各节点的性能数据,包括IO、内存利用率和CPU 利用率等。再通过SVM 实现故障分类,同时采用Random 方法[14]优化SVM 的参数,将状态分为不同的类别。最后通过故障排查策略设置阈值精化排查结果,提高了排查和预测结果的准确性。
2.2.1 故障排查模型
利用Kafka 消息系统工具来实现服务器和虚拟机状态信息的读取和收集。Kafka 是一个基于zookeeper[15]协调、可分区、多副本的数据流处理分布式日志系统,具有高吞吐量、可持久化以及易于扩展等优点。利用Kafka 工具读取节点的日志文件以获取其状态信息,包括CPU 利用率、内存利用率、IO 设备以及网络IO,并将获取到的状态信息作为训练SVM 模型的特征向量以寻找到最优分类超平面。
为降低原始状态信息数据的复杂度,减少冗余和相关性,对数据进行训练前利用PCA(主元分析法)进行特征的提取。
1)将收集的状态信息组织为m·l 阶的数据矩阵Xm·l,其中m 为状态信息指标的个数,l 为样本总数。再对矩阵中的数据进行零均值化,即对数据矩阵中的值减去该状态信息指标的平均值。
2)利用公式(2)计算矩阵Xn·l的协方差矩阵CX:
其中xi∈Rn为节点样本J,J∈{1,2,…,m}的一个特征向量,yi∈{+1,-1} 为其标签,yi为+1时其为运行正常的节点,yi为-1 时即为运行异常的节点。基于此并选择惩罚参数C>0,且i,j∈{1,2,…,m},将故障排查问题转换为如下二次约束规划问题:
式中:ai,aj为拉格朗日乘子,且ai,aj≥0;K 为高斯核函数,即,其中σ2为控制因子。
通过以上公式即可得最优解:a*=(,,…,),选择a*的一个分量且其小于惩罚因子C,通过以下公式得到b*:
在构建基于SVM 的故障分类模型时,一个合适的核函数能够在实现非线性分类的情况下提高模型性能效率。由于高斯核函数可以逼近任何非线性函数,具有强泛化能力、收敛速度快以及模型参数少等优点,所以采用高斯核函数作为故障排查模型的核函数,最后的分类决策数为:
式中:sgn 为符号函数。
此外,本文提出利用超参数优化方法对模型的关键参数进行优化,以提高最终排查的准确性和过程效率。由于随机搜索优化方法[16]拥有简单、搜索速度快的特点,以及比网格搜索更好的性能,且对于有连续变量的参数,随机搜索会将其做为一个分布采样,因此本方法选择随机搜索方法对参数进行优化。通过节点状态信息数据(包括节点数据正常样本与异常样本)对此模型进行训练,以提高模型的学习能力。为了进一步提高基于SVM-Random 的故障排查模型的效率,本文还加入了故障排查策略。
2.2.2 故障排查策略
故障排查策略分为故障初步排查和故障精确排查2 个阶段。
1)故障初步排查阶段。
利用训练好的SVM 模型对收集到的各节点数据信息进行分类,得到状态正常类和状态异常类2 个集合,分别表示为X1和Y1。云环境下虚拟机故障率由状态异常节点到超平面的距离来判断,其故障率与距离成正相关。由于SVM 模型的训练结果存在一定误差,即有可能导致实际异常的节点被误划到状态正常类的集合中。在此阶段将训练样本集M={x1,x2,…,xm}作为输入,得到f1,f2,V 3 个输出,其中,f1表示从SVM 模型分类决策函数中得到的目标值,f2表示从训练好的SVM 模型中得到的ai的值总和,V 表示得到的初步排查的状态分类结果。
2)故障精确排查阶段。
由于在超平面附近的数据存在摆动过大的可能性,且有可能将状态异常的节点划到状态正常类当中,因此通过精确排查阶段来提高最终排查结果的准确性。在进行初步分类后,云环境下节点i 的故障率Pi表示为:
式中:vi∈V 是节点i 由故障初步排查阶段得到的值,若其为负数则划分到状态正常类,若为正数则划分到状态异常类。
在此精确排查阶段,设置Q∈(0,1)为训练虚拟机集合故障率的阈值,当故障率Pi≤Q 时,则认为节点i 处于异常运行状态,用Y2来表示在精确排查阶段获得状态异常集。初步排查阶段获得的输出作为此阶段的输入,判断V 中每一个样本的故障率,若其故障率满足Pi≤Q 则将vi设置为它的相反数,即重新归类到状态异常集合中,更新完成的V 则为最终的故障排查结果。
为了表征浙江电容器云平台中虚拟机的运行状态,本方法利用Kafka 收集50 台虚拟机的主机性能指标以进行故障预测排查,这些指标包括CPU 利用率、内存利用率、IO 设备以及网络IO。由于过大的状态信息采集间隔易造成监控盲区,漏掉发生异常的虚拟机,过小的间隔又会造成耗时成本增加,影响检测性能,因此本方法采集时间间隔设置为20 s 一个周期。
每台虚拟机配备CentOS 8.1 操作系统,运行1 个探针以负责对收集到的状态信息进行降维与故障预测。云平台中被监控的虚拟机参数如表1所示。
表1 云平台中设备参数
实验共收集到2 000 条性能指标数据,经过人工分析得到其中1 805 条为正常状态数据。为使训练集和测试集的分布具有一致性,采用系统抽样的方法设置训练集个数占比为65%,测试集占比为35%,即训练集包含1 300 条数据,测试集包含700 条数据。SVM 中的参数设置为C=256,核函数为高斯核函数,控制因子σ2=10,对比分析SVM-Random 初排查算法与加入精确排查后的SVM-Random 算法,实验结果如图4 所示。
图4 云平台故障预测结果
从图4 可以看出,与初排查方法相比,加入精确排查算法后的SVM-Random 模型的准确率、精确率以及召回率分别提升了5.36%,2.00%和2.26%,故本方法能够有效提升分类效果,可以实现故障精准排查。
本节设置参数优化算法对比实验,在加入精排查阶段SVM 模型的基础上对比随机搜索法与网格搜索法,对比结果如表2 所示。
表2 参数优化方法对比结果
从表2 可以看出,基于网格搜索法进行参数寻优的准确率虽略高于随机搜索法,但寻优的时间成本过高。因此选择随机搜索法能够有效保障效率与准确率,在最少的时间内可获得准确率更高的参数。
以上结果表明,SVM-Random 算法模型在具有良好分类效果以实现故障精准排查的同时,还能保证时间效率,证明了机器学习在电力云中的技术可行性、应用前景和价值,进一步扩大了云计算在电力系统中的应用范围,使得系统的业务感知更精确、排障时间更迅速。
图5 展示了采用平均链接聚类算法实时生成的浙电容器云平台的部分网络拓扑结构,通过调用关系图以及关系业务拓扑图,清晰明确地展现了各业务的关联,能够直观地对问题进行定界,清晰了解业务之间的关联。图6 展示了浙江电力公司开发的运维系统对容器云平台中的各节点监控。表3 则展示了通过SVM-Random 算法排查出的故障示例。统一的智能化监控平台可以更精确地发现电力系统中的各类问题,形成全方位的感知,提升健康运维监管能力。
图5 浙电容器云平台部分网络拓扑结构
图6 浙电容器云平台的节点性能监控
表3 浙电容器云平台的故障排查结果示例
本文提出了一种基于机器学习的浙电容器云平台的故障排查方法,首先基于平均链接聚类算法,动态实时地识别网络拓扑结构,再基于SVMRandom 方法成功排查浙电容器云平台中的各个节点故障,有效提高了浙电容器云平台的可靠性和性能,验证了机器学习方法在电力系统中的应用前景。
本文所做研究仅是云平台故障诊断的基本阶段,后续还需采用将机器学习方法应用到事务聚合分析、调用链查询、全链日志关联中,以便能够成功分析出故障产生的原因以及对故障进行溯源,为电力系统的运维提供更多的参考信息和决策支持。