张银铁, 王丽君, 万晶
(国网电力科学研究有限公司 信息系统集成分公司, 江苏 南京 211106)
信息系统在运行过程中,各种运行指标一定是随着使用人员、时间阶段、业务变化而变化的,运维过程中最大的难点就是无法准确掌握运行的历史规律,指标高低并不能直接说明系统运行是否稳定。在运行监控中常见的监控办法是设置监控阀值,但是监控阀值是很难设定的,指标高并不能说明系统运行就一定有问题,指标低也不能说明系统运行没有问题。最合理的办法是计算出系统在不同时间阶段的稳定运行状态,动态判断每一时刻与稳定状态的差异,进而掌握系统稳定之间的差异。
在信息系统运行过程中,需要监控的指标是非常多的,包括CPU、内存、磁盘、网络等多个类别,每一个类别又可以细分为多个二级、三级等子类,例如CPU的运行状态既有总负载情况,也有分core负载状态,每一个状态又可以再细分为sys负载、user负载和IO等待等。监控数据是随着时间进行记录的,这些历史数据是监控阀值设定的基础,比如CPU负载过高时容易造成宕机,所以设置阀值在90%等,预留处置时间。常见的阀值设置是通过历史数据判断最高状态,当最高状态都不超过80%,设置阀值为90%就并不合理了。
常见的解决办法有两种,一是极值判断,二是方差分析。
(1) 机制判断的问题
取历史一定周期的监控数据,例如CPU状态每分钟记录一个监控状态,就有一天1 440个指标,一周就有10 080个指标,计算其中指标的最高值、最低值,超过最高或低于最低都是阀值的判断标准。这种判断最大的问题是系统运行是有实际差异的,白天的状态一定高于夜间,工作日状态一般也是高于非工作日状态的,特殊调度时负载也会明显高于普通状态的,极限状态并不能说明极限范围内就一定没有问题,并不能说明系统在区间范围内就是稳定的。
(2) 方差分析的问题
方差分析法是将上述指标进行统计计算,寻找到99%指标所处的区间,为了加强监控力度,甚至可以寻找到95%指标所在的区间作为监控阀值,可以一定程度上解决极限判断的问题。但是方差分析也存在一个问题,系统运行本身是不可能按照一个固定模式进行得分,负载都是动态变化的,或持续在增长、或持续有下降,样本中原本较低的数值也并不一定就是有问题的,是系统状态动态变化的过程,例如系统用户在持续增加,一段时间的前后负载都是正常的,高低之差并不能说明系统存在问题。
通过上述分析可知,判断出系统的稳定状态才能准确地掌握动态阀值的设置条件,可以参考数据集中度进行判断。在数据统计中常见的方法是通过平均值反应数据的集中程度。但是平均值也是有问题的,每天的1 440个分钟指标是不能区分不同时刻业务差异的,需要的是判断计算周期内每一个时刻的稳定状态,例如每天8:00这个时刻在过去一个月的监控记录,计算出8:00这个时刻如果正常的理论稳定指标值,这个值可能是平均值也可能不是平均值。因此,假设一种系统在每一个时刻都存在一个稳定状态值,这个值可以使每一天这个时刻的运行值都是围绕这个稳定运行状态在运行的,即稳定状态值与每天同一个时刻样本中所有指标之间的差值之和是最小的,如式(1)。
(1)
其中,f(x)表示样本同时刻每一个值与理论稳定值之间的差值之和;x表示样本中种同时刻每一个时刻的监控历史记录值;X表示同时刻x样本的平均值;a表示修正平均值的修正值,即X+a是计算时刻历史记录中理论稳定运行的状态值;n表示样本中这个时刻的数据量,即为计算的样本历史天数。
通过绝对值函数特性可知,f(x)是一个随着x不断变化的值,并且是一个始终大于零的数值,通过导函数可知f(x)存在最小值,如图1所示。
图1 趋势判断示意
样本值x都是已知的,而修正值a是不确定的,因此将f(x)自变量变为a,即可计算得出修正值a在某数值时,可以使得f(x)最小,计算每一指标、每一时刻在样本周期中的理论稳定状态,如式(2)。
(2)
其中,f(x)表示样本中每一个值与理论稳定值之间的距离和;x表示修正平均值的稳定修正值,即X+x是计算时刻历史记录中理论稳定运行的状态值;xi表示样本中每一个时刻的监控历史记录值;X表示xi样本的平均值;n表示样本中这个时刻的数据量,即为计算的样本历史天数。
通过上述分析可知存在一个修正平均值的值,可以得到某时刻的理论稳定运行状态,这个时刻的所有监控记录都应该围绕这个值在运行,也是一种反应样本集中度的数值,只不过不是平均值等常见统计数值,是一种修正后的数值。因为上述函数是一个绝对值函数,并且固定参数是随着样本不断变化的,因此将上述函数进行格式转换,便于进行绝对值判断[3-5],如式(3)、式(4)。
(3)
(4)
因为xi和X在样本确定的情况下都是固定值,所以将xi-X记作xi,得到式(5)。
(5)
其中,f(x)表示需要得到最小值;x表示f(x)最小时的x变量;xi表示样本确定后的固定参数。将公式转换为求得绝对值函数最小时的x值,如式(6)。
f(x)=|x-x1|+|x-x2|+…+|x-xn|
(6)
转换后的公式可知f(x)最小状态与n的数值是有关联关系的,因此区分两种情况分别计算判断。
(1)n=2k时
设ak |x-a1|+|x-a2k|≥a2k-a1 (7) 当且仅当x∈(a1,a2k)等号成立,如式(8)。 |x-a2|+|x-a2k-1|≥a2k-1-a2 (8) 当且仅当x∈(a2,a2k-1)等号成立,依次类推得到式(9)。 |x-ak|+|x-ak+1|≥ak+1-ak (9) 当且仅当x∈(ak,ak+1)成立,(ak,ak+1)是各组合区间的共有子区间,所以当x∈(ak,ak+1)时,各等号成立,才能使f(x)达到最小值。 (2)n=2k-1时,有式(10)。 |x-a1|+|x-a2k-1|≥a2k-1-a1 (10) 当且仅当x∈(a1,a2k-1)成立,有式(11)。 |x-a2|+|x-a2k-2|≥a2k-2-a2 (11) 当且仅当x∈(a2,a2k-2)成立,依次类推得到|x-ak|≥0,当且仅当x=ak时等号成立,x=ak是以上各区间的公共元素,所以此时f(x)达到最小值。 (3) 计算结论,如式(12)。 (12) 求x为多少时,f(x)最小,即此时修正值可以修正平均值,得到系统运行指标的理论稳定状态。 当n=2k时,x∈(xk,xk+1),f(x)最小。 当n=2k-1时,x=xk,f(x)最小。 假定某时刻监控指标是一个围绕10数值上下浮动的,即10是理论上稳定的运行状态,从两个方面验证上述稳定状态修正值的计算合理性。分为两个维度验证,一是数据不存在异常数据,是否可以得到稳定修正值,二是数据存在异常数据,验证是否可以得到稳定修正值[8-10]。 (1) 无异常数据的验证 随机样本值为(10,9,10,11,10,9,10,11,10,9),得到验证数据表,如表1所示。 表1 无异常验证数据 由表1可知,样本平均值为9.9,当x=0.1时f(x)得到最小值5,即9.9+0.1=10,可以修正得到稳定状态值。 (2) 有异常数据的验证 随机样本值为(10,9,10,11,18,9,10,11,10,9),其中18是样本中的异常数据,得到验证数据表如表2所示。 表2 有异常验证数据 由表2可知,样本平均值为10.888 9,当x=-0.9时f(x)得到最小值12.055 56,即10.888 89-0.9=10,可以修正得到稳定状态值,稳定状态计算方法可以剔除出样本中的异常数值。 首先,通过信息系统运行的稳定状态计算方法可以知晓,这个稳定的状态只是一个理论中的稳定状态,信息系统运行是不存在绝对稳定的,因此稳定状态只是用来判断样本中其他数据偏离情况的一个参考,偏离的多可以说明此时刻这个样本是存在异常的,是需要重点进行排查,但不能说是存在故障。 其次,稳定状态计算方法受限于样本的数量,奇偶数量下是存在一定误差可能的,只有样本数量足够大才能保障稳定状态的可信度不断提升,这又与某一时刻样本的数量限制产生矛盾,毕竟同一时刻的样本值一年也只有365个,如果一年中发生系统大的检修,还要对样本进行分组,所以稳定状态只是理论值,是用来辅助判断集中趋势的参考,是动态阀值的参考。 最后,系统如果不存在稳定状态,例如是一种持续增长负载的状态,则计算得出的理论稳定值也只是这一个变化过程的中间状态,这时就需要将样本进行分组处理,检查稳定状态的变化情况,即可判断系统的变化趋势。 信息系统的运行如同人体的各项生理指标,例如血常规等指标项,都需要一个明确的正常稳定状态值,辅助人员或人工智能判断指标与稳定状态的偏离情况,才能动态准确地掌握系统的历史规律,不同系统不同指标通过历史数据都可以得到私有的稳定状态值,但是这种稳定状态只是理论状态,只是辅助判断时进行动态监控的参考,不应该作为绝对的监控阀值使用。2.3 数据验证
3 稳定状态使用技巧
4 总结