【数据挖掘实战】——应用系统负载分析与容量预测(ARIMA模型)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 项目地址:Datamining_project: 数据挖掘实战项目代码

一、背景和挖掘目标


1、问题背景

应用系统是由服务器、数据库、中间件、存储设备等组成。它在日常运行时,会对底层软硬件造成负荷。其中任何一种资源负载过大,都可能会引起应用系统性能下降甚至瘫痪。及时了解当前应用系统的负载情况,以便提前预防,确保系统安全稳定运行。


  • 应用系统的负载率:通过对一段时间内软硬件性能的运行状况进行综合评分而获得。
  • 负载率趋势:通过系统的当前负载率与历史平均负载率进行比较。


应用系统的负载高或者负载趋势大的现象,代表系统目前处于高危工作环境中。如果系统管理员不及时进行相应的处理,系统很容易出现故障。

本例重点分析磁盘容量,如果应用系统出现存储容量耗尽的情况,会导致应用系统负载率过高,最终引发故障。


2、传统方法的不足

系统负载分析的传统方法:通过监控采集到的性能数据以及所发出的告警事件,人为进行判断系统的负载情况。此方法虽然能够判断系统故障以及磁盘的容量情况,但是存在一些缺陷和不足:

  • 磁盘容量的情况没有提供预测的功能。只有当容量将要被耗尽时,会有告警提示。如果是告警服务器的磁盘容量被耗尽,此种情况下,系统即使出现故障,也不会有告警提示。
  • 不能提前知道系统负载的程度,只有当系统故障时,通过接受告警才得知。并且当系统真正故障的时,告警的发出大多数情况下会有一定的延迟。


2、原始数据

  • 性能属性说明:针对采集的性能信息,对每个属性进行相应说明。

7ea12f25d81742b4b116a4ab3e9066b4.png7ea12f25d81742b4b116a4ab3e9066b4.png

  • 磁盘数据:包含应用系统、磁盘基本信息等。

f01cd48e12234643a1a46c148accfd7b.png3、挖掘目标

  • 针对历史磁盘数据,采用数据挖掘的方法,预测应用系统服务器磁盘已使用空间大小;
  • 根据用户需求设置不同的预警等级,将预测值与容量值进行比较,对其结果进行预警判断,为系统管理员提供定制化的预警提示;


二、分析方法与过程


1、初步分析

  • 应用系统出现故障通常不是突然瘫痪造成的(除非对服务器直接断电),而是一个渐变的过程。例如系统长时间运行,数据会持续写入存储,存储空间逐渐变少,最终磁盘被写满而导致系统故障。
  • 在不考虑人为因素的影响时,存储空间随时间变化存在很强的关联性,且历史数据对未来的发展存在一定的影响,故可采用时间序列分析法对磁盘已使用空间进行预测分析。


2、总体流程

a2863acab7a34633a5ef30c4315bafac.png

一步:数据抽取

磁盘使用情况的数据都存放在性能数据中,而监控采集的性能数据中存在大量的其他属性数据。故以属性的标识号(TARGET_ID)与采集指标的时间(COLLECTTIME)为条件,对性能数据进行抽取。


抽取10-01至11-16财务管理系统中某一台数据库服务器的磁盘的相关数据。


第二步:探索分析

对数据进行周期性分析,探索数据的平稳性。


efd1f0cff65d48abbb9fff6e5e5a001b.png

C盘和D盘的使用的大小。

#-*-coding:utf-8-*-importpandasaspdimportmatplotlib.pyplotaspltdata=pd.read_excel('data/discdata.xls')
str1='C:\\'str2='D:\\'dataC=data[(data['DESCRIPTION'] =='磁盘已使用大小') & (data['ENTITY'] ==str1)]
dataD=data[(data['DESCRIPTION'] =='磁盘已使用大小') & (data['ENTITY'] ==str2)]
dataC.plot(y='VALUE')
dataD.plot(y='VALUE')
plt.show()

第三步:数据的预处理

数据清洗:实际业务中,监控系统会每天定时对磁盘的信息进行收集,但是磁盘容量属性一般情况下都是一个定值(不考虑中途扩容的情况),因此磁盘原始数据中会存在磁盘容量的重复数据。

  • 剔除磁盘容量的重复数据。
  • 将所有服务器的磁盘容量作为一个固定值,方便模型预警时需要。

500f7aa223fa4844bda0c0937b43f621.png

属性构造:因每台服务器的磁盘信息可以通过表中NAMETARGET_IDENTITY三个属性进行区分,且每台服务器的上述三个属性值是不变的,所以可以将三个属性的值进行合并。 (实质是将行转换成列)。

f29cc31f0dbc443ea58cc24e9d5537ca.png

#-*-coding: utf-8-*-importpandasaspddefattr_trans(x):
result=pd.Series(index=['SYS_NAME', 'CWXT_DB:184:C:\\', 'CWXT_DB:184:D:\\', 'COLLECTTIME'])
result['SYS_NAME'] =x['SYS_NAME'].iloc[0]
result['COLLECTTIME'] =x['COLLECTTIME'].iloc[0]
result['CWXT_DB:184:C:\\'] =x['VALUE'].iloc[0]
result['CWXT_DB:184:D:\\'] =x['VALUE'].iloc[1]
returnresultdiscfile='data/discdata.xls'transformeddata='data/discdata_processed.xls'data=pd.read_excel(discfile)
data=data[data['TARGET_ID'] ==184].copy()
#按时间分组data_group=data.groupby('COLLECTTIME')
data_processed=data_group.apply(attr_trans)
data_processed.to_excel(transformeddata, index=False)


3、构造容量预测模型

9740ea7100f8464298c302de1bb13f8d.png

  • 平稳性检验:为了确定原始数据序列中没有随机趋势或趋势,需要对数据进行平稳性检验,否则将会产生“伪回归”的现象。方法:单位跟检验或者观察时序图。
  • 白噪声检验:为了验证序列中有用的信息是否已被提取完毕,需要对序列进行白噪声检验。如果序列检验为白噪声序列,就说明序列中有用的信息已经被提取完毕了,剩下的全是随机扰动,无法进行预测和使用。方法:一般采用LB统计量检验方法。
  • 模型识别:通过AIC、BIC信息准则或者观测自相关图和偏自相关图确定P、Q的参数,识别其模型属于AR、MA和ARMA中的哪一种模型。
  • 参数估计:估计模型的其他参数。可以采用极大似然估计、条件最小二乘法确定。
  • 模型检验:检测模型残差序列是否属于白噪声序列。


/

379caaae73ef4e74afeb9ba8ced5d47d.png

#-*-coding:utf-8-*-importpandasaspddefstationarityTest():
'''平稳性检验    :return:
'''discfile='data/discdata_processed.xls'predictnum=5data=pd.read_excel(discfile)
data=data.iloc[: len(data) -predictnum]
#平稳性检验fromstatsmodels.tsa.stattoolsimportadfullerasADFdiff=0adf=ADF(data['CWXT_DB:184:D:\\'])
whileadf[1] >0.05:
diff=diff+1adf=ADF(data['CWXT_DB:184:D:\\'].diff(diff).dropna())
print(u'原始序列经过%s阶差分后归于平稳,p值为%s'% (diff, adf[1]))
defwhitenoiseTest():
'''白噪声检验    :return:
'''discfile='data/discdata_processed.xls'data=pd.read_excel(discfile)
data=data.iloc[: len(data) -5]
#白噪声检验fromstatsmodels.stats.diagnosticimportacorr_ljungbox    [[lb], [p]] =acorr_ljungbox(data['CWXT_DB:184:D:\\'], lags=1)
ifp<0.05:
print(u'原始序列为非白噪声序列,对应的p值为:%s'%p)
else:
print(u'原始该序列为白噪声序列,对应的p值为:%s'%p)
    [[lb], [p]] =acorr_ljungbox(data['CWXT_DB:184:D:\\'].diff().dropna(), lags=1)
ifp<0.05:
print(u'一阶差分序列为非白噪声序列,对应的p值为:%s'%p)
else:
print(u'一阶差分该序列为白噪声序列,对应的p值为:%s'%p)
deffindOptimalpq():
'''得到模型参数    :return:
'''discfile='data/discdata_processed.xls'data=pd.read_excel(discfile, index_col='COLLECTTIME')
data=data.iloc[: len(data) -5]
xdata=data['CWXT_DB:184:D:\\']
fromstatsmodels.tsa.arima_modelimportARIMA#定阶#一般阶数不超过length/10pmax=int(len(xdata) /10)
qmax=int(len(xdata) /10)
#bic矩阵bic_matrix= []
forpinrange(pmax+1):
tmp= []
forqinrange(qmax+1):
try:
tmp.append(ARIMA(xdata, (p, 1, q)).fit().bic)
except:
tmp.append(None)
bic_matrix.append(tmp)
bic_matrix=pd.DataFrame(bic_matrix)
#先用stack展平,然后用idxmin找出最小值位置。p, q=bic_matrix.stack().astype('float64').idxmin()
print(u'BIC最小的p值和q值为:%s、%s'% (p, q))
defarimaModelCheck():
'''模型检验    :return:
'''discfile='data/discdata_processed.xls'#残差延迟个数lagnum=12data=pd.read_excel(discfile, index_col='COLLECTTIME')
data=data.iloc[: len(data) -5]
xdata=data['CWXT_DB:184:D:\\']
#建立ARIMA(0,1,1)模型fromstatsmodels.tsa.arima_modelimportARIMA#建立并训练模型arima=ARIMA(xdata, (0, 1, 1)).fit()
#预测xdata_pred=arima.predict(typ='levels')
#计算残差pred_error= (xdata_pred-xdata).dropna()
fromstatsmodels.stats.diagnosticimportacorr_ljungbox#白噪声检验lb, p=acorr_ljungbox(pred_error, lags=lagnum)
#p值小于0.05,认为是非白噪声。h= (p<0.05).sum()
ifh>0:
print(u'模型ARIMA(0,1,1)不符合白噪声检验')
else:
print(u'模型ARIMA(0,1,1)符合白噪声检验')
defcalErrors():
'''误差计算    :return:
'''#参数初始化file='data/predictdata.xls'data=pd.read_excel(file)
#计算误差abs_= (data[u'预测值'] -data[u'实际值']).abs()
mae_=abs_.mean()  #maermse_= ((abs_**2).mean()) **0.5mape_= (abs_/data[u'实际值']).mean()
print(u'平均绝对误差为:%0.4f,\n均方根误差为:%0.4f,\n平均绝对百分误差为:%0.6f。'% (mae_, rmse_, mape_))
stationarityTest()
whitenoiseTest()
findOptimalpq()
arimaModelCheck()
calErrors()

模型预测:应用模型进行预测,获取未来5天的预测值。为了方便比较,将单位换算成GB

83647b11764040b89ffd6199bcf747b8.png

模型评价

采用三个衡量模型预测精度的统计量指标:平均绝对误差、均方根误差、平均绝对百分误差,从不同侧面反映了算法的预测精度。


606ea810ede7425d97466318aa3b561e.png


模型应用

  • 计算预测使用率:根据模型预测得到的值,计算预测使用率。
  • 设定预警等级:根据业务应用一般设置的阈值,也可以根据管理员要求进行相应的调整。
  • 发布预警信息


30ed930c743c4a8f8b641fcbfe189154.png


三、总结和思考


  • 监控不仅能够获取软硬件的性能数据,同时也能检测到软硬件的日志事件,并通过告警的方式提示用户。因此管理员在维护系统的过程中,特别关注应用系统类别的告警。一旦系统发生故障,则会影响整个公司的运作。但是在监控收集性能以及事件的过程中,会存在各类型告警误告情况。(注:应用系统发生误告时系统实际处于正常阶段)
  • 根据历史每天的各种类型的告警数,通过相关性进行检验判断哪些类型告警与应用系统真正故障有关。通过相关类型的告警,预测明后两天的告警数。针对历史的告警数与应用系统的关系,判断系统未来是否发生故障。
  • 可通过时序算法预测未来相关类型的告警数,然后采用分类预测算法对预测值进行判断,判断系统未来是否发生故障。
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
157 0
|
3月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
本文总结了2023年第十一届泰迪杯数据挖掘挑战赛A题的新冠疫情防控数据分析,提供了32页和40页的论文以及实现代码,涉及密接者追踪、疫苗接种影响分析、重点场所管控以及疫情趋势研判等多个方面,运用了机器学习算法和SEIR传染病模型等方法。
58 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
|
3月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛A题的解题思路和Python代码实现,涵盖了新冠疫情防控数据的分析、建模方案以及数据治理的具体工作。
74 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
|
3月前
|
数据采集 自然语言处理 数据可视化
基于python数据挖掘在淘宝评价方面的应用与分析,技术包括kmeans聚类及情感分析、LDA主题分析
本文探讨了基于Python数据挖掘技术在淘宝评价分析中的应用,涵盖了数据采集、清洗、预处理、评论词频分析、情感分析、聚类分析以及LDA主题建模和可视化,旨在揭示淘宝客户评价中的潜在模式和情感倾向,为商家和消费者提供决策支持。
|
3月前
|
SQL 开发框架 大数据
【数据挖掘】顺丰科技2022年秋招大数据挖掘与分析工程师笔试题
顺丰科技2022年秋招大数据挖掘与分析工程师笔试题解析,涵盖了多领域选择题和编程题,包括动态规划、数据库封锁协议、概率论、SQL、排序算法等知识点。
87 0
|
3月前
|
机器学习/深度学习 数据挖掘 Python
【数据挖掘】生成模型和判别模型的区别及优缺点
文章讨论了生成模型和判别模型在数据挖掘中的区别、原理、优缺点,并提供了一些常见的模型示例。
35 0
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】PCA 主成分分析算法过程及原理讲解
主成分分析(PCA)的原理和算法过程。
74 0

热门文章

最新文章