背景
随着当今社会数字化业务的高速发展,运维模式不断被逼迫加快数字化转型,以GARTNER的“基础设施和运营IT评分体系”下的4000多份问卷测评和中国数据中心服务能力成熟度指数白皮书的评测数据分析,传统的运维模式下的绝大部分企业(评测分均为3分以下,满分5分)并不足以作为数字化支撑的基础。基础设施IT运营迫切进行转营,强调服务和体验以用户为中心,要以智能运维作为支撑IT运营转型的核心。
为了应对新技术演进以及业务创新加速对运维带来的新挑战,践行数字化转型要求,我行数据中心已持续多年建设智能运维体系,而智能运维其中一个比较显著的特点就是加大对运维数据的分析利用,通过构建人工智能模型来辅助运维决策。在日常运维工作中,运维人员需要通过对基础设施、系统服务等的监测来进行日常维护和维修保障工作,目前中心对于机器运行指标的监控主要通过监控指标当前值结合固定阈值或动态基线进行告警,缺乏指标趋势预测能力,但实际情况中会有部分故障是因为 Java 内存使用率、交换空间使用率等机器运行指标持续增长而没有及时处理导致的,这也成为了运维工作中的痛点。如果能通过人工智能模型实现机器运行 指标 变化 趋势 的 预测, 就 可协助 运维人 员判断 事件的重要程度 ,并 提前 制定相应的处理方案 进行干预,从而避免业务影响风险的发生。
整体方案
为了满足机器运行指标趋势预测模型研究的条件,并为后续进一步开展运维数据挖掘打下良好的基础, 我 们 探索并构建 了一套基于已有工具的 运维数据智能分析系统 。
图1 运维数据智能分析系统
从图 1 可以看到,整个运维数据智能分析系统由数据采集、数据加工、模型建模以及模型应用四个部分构成,机器性能明细、告警流水、交易日志等运维数据主要由监控平台和日志平台完成采集,数据加工平台在引入这些运维数据后按照要求进行加工处理,处理后的数据供 CDSW 平台建模使用,最后模型发布之后根据实际使用需求进行不同方式的模型应用。
我行 CDSW 建模平台基于英特尔®至强®可扩展处理器的 X86 服务器进行部署,它允许数据科学家将他们现有的技术和工具(如 R , Python 和 Scala )基于本地或 X86 服务集群中的数据进行安全运行计算。 X86 服务集群主要包含 HDFS 、 Spark 以及 Yarn 三个功能模块,其中:
HDFS 是一个分布式文件系统,提供数据存储服务,用于存放模型输入数据、中间数据以及结果数据等;
Spark 是一种通用的大数据计算框架,专门用于对那些分布式存储的大数据进行处理,其计算基于内存,计算速度快,并且提供了 Spark RDD 、 Spark SQL 、 Spark Streaming 等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务;
Yarn 是一个通用的分布式资源管理系统,负责整个集群的计算任务调度和计算资源管理。 CDSW 建模平台和 X86 服务集群的逻辑架构如下图所示:
图2 建模平台和服务集群逻辑架构
基础架构方案
CDSW 建模平台由 2 个服务节点组成, X86 服务集群由 12 个节点组成,安装 Hadoop ,均采用 X 86架构的英特尔®至强®可扩展处理器系列 6148 双核 40 C的CPU处理器及512G容量内存的设备。
选择英特尔®至强®可扩展处理器进行模型训练,主要考虑了其优异的微架构设计,以及更多的核心、线程和高速缓存数量,一方面保证 CDSW 建模平台获得足够的算力总量,另一方面,如图 3 所示,处理器平台也能通过核心绑定技术( Core Binding )以及非一致存储访问( Non-Uniform Memory Access , NUMA) 架构等技术,实现先进的多路并行算力输出能力,使得每一位运维建模人员都可获得所需的算力。
图3 英特尔®至强®可扩展处理器提供多路并行算力输出
对于未来机器学习平台的基础架构技术展望思考:
1 . A I 平台的基础架构在下一步需要考虑到对于更多高纬模型的支撑。由于体量过于庞大,不仅对系统的框架和算法设计、计算处理能力也有更为严苛的要求,内存也会成为A I 系统全流程设计中的技术焦点。通常情况下,会借助 DRAM 内存来满足实时数据处理和高维特征及模型的存储需求,但这种方式会导致内存硬件资源成本的持续增长,S CM 如 英特尔 ® 傲腾 ™ 持久内存现在是趋势性的内存类型。不同于传统的D RAM ,英特尔 ® 傲腾 ™ 持久内存集容量和持久性于一身,能够在A I 场景实现性能突破。
- 机器学习的工作负载对硬件架构有一定的特殊性要求(如C PU 、G PU 、F PGA 等),这些架构通常需要独特的编程语言和工具,这限制了代码的重新利用性,减少了硬件选择并阻碍了创新架构的使用。英特尔 ® oneAPI的异构编程模型能够提供不受限于单一厂商专用的代码限制,且能实现原有代码的集成,可以用C++、C++、Fortran和Python等开发者熟悉的语言编写代码,并符合MPI和OpenMP等标准,进而降低利用特殊硬件的软件开发和维护成本。
预测算法选择
生产环境实际的机器指标运行数据,是一种时间序列数据,这种数据往往会在周期性、平稳性、随机性等方面表现出多种不同的变化形态,模型必须根据时序数据的不同形态,选择合适的预测算法,才能准确预测指标的后续走势。现有的时序预测方法大致分为四类,传统的统计类方法如ARIMA等,现代的机器学习类方法如SV R 等,现代的深度学习类方法如 LSTM 等,以及时间序列分解类方法如Prophe t 等。
统计类方法 要求时序数据是平稳的,或者经过平稳操作(如差分)后是平稳的; 时间序列分解类方法 一般会将数据分解为趋势性分量,周期性分量,平稳分量等三个正交的部分后,再对各分量进行预测,对于周期类的数据非常适用,而且可解释性较强; 机器学习类方法 需要人工去构造运维数据的特征属性,所以如何自动针对不同数据去筛选特征是个比较大的问题; 深度学习类方法 往往能够捕捉数据间复杂的非线性规律,而且预测的准确性会随着数据量的增多而提高,但是模型的可解释会比较弱。
模型训练
为了更加方便预测不同变化形态的机器运行指标数据,我们研究构建了一个通用的指标趋势预测模型训练框架,以 Java 内存使用率指标为例,我们输入某服务器下某应用某模块的 Java 内存使用率历史数据,经过训练计算后,生成对应的模型文件,同时为每个模型生成唯一标识,通用模型训练框架如下图所示:
图3 通用模型训练框架
我们对于需要进行训练的机器运行指标,将具体的服务器主机名、IP、应用名、模块名、运行指标等信息登记到配置文件中,程序通过配置文件信息,从历史数据中提取对应的运行指标数据,然后对提取的数据进行数据清洗、标准化等操作,并且在训练前对数据变化趋势进行判断,对于周期性比较好的时序数据,选用Prophe t 算法,对于平稳性比较好的时序数据,选用 ARIMA 算法,目前对于随机波动变化的机器运行指标数据,还需进一步探索研究比较好的预测方案。
模型预估及应用
在模型发布之后,我们对模型的应用有两种方式,即批量预估与实时预估, 对于批量预估场景 ,选定一定范围内的机器运行指标数据,每天发起一次预估任务,每次预估已有的数据时点后续24小时内,每十分钟间隔的预测指标数值,并将预估结果提供给下游系统使用,整个批量预估流程如下图所示:
图4 模型批量预估流程
批量预估完成后,我们将预估结果保存在库表中, 运维人员 可在 监控平台 页面对相应指标进行查询和分析 , 另外,设置提醒阈值,在预估的指标数据达到阈值后,可 通过 邮件提醒管理员进行关注。
图5 模型批量预估结果消费场景
对于实时预估场景 ,需提供实时预估接口功能,当运维人员想随时根据自己需要去查询自己选定范围内的指标运行趋势的时候,接口会收到运维人员在页面发起的预估请求,然后调用对应模型文件完成计算并将结果返回,实时预估场景需要考虑的是实时计算引擎能力能否满足运维人员高时效性的要求。
模型验证
模型发布后,在正式投入生产使用之前会先进入试运行阶段,在此阶段会对模型预估的准确性进行评估,以 Java 内存使用率 这一指标为例,模型预估准确性的评估方法为:模型预估开始后,记录每个时点模型预估的指标数值与实际数值之间的误差,然后统计周期T内所有服务器N预估结果的平均误差 E ,如误差在可用范围内,则判断模型通过验证,计算公式如下:
对于时点t,计算所有服务器的误差平均值,一般来说,在预测时点t较小时,误差较小;当时点 t 较大时,误差也会较大。
图6 Java内存使用率趋势预测示例
总结
在模型的实际应用过程中,对于平稳性和周期性表现比较好的机器指标运行数据,预测效果一般会比较好,能够满足生产使用的要求,而对于那种随机波动变化的数据,预测效果会很差,模型无法提前有效预测出异常突变的情况,但这往往是运维工作更需要解决的问题,因此目前来看模型真正的适用范围会比较窄小,只能解决部分问题。
其实除了机器运行指标趋势预测场景以外,运维领域还有很多其他的时间序列预测场景,比如 批次作业的运行时长预测 和 网络性能容量预测 等,不同预测场景所产生的运维数据参差多样,现在还暂时无法找到一种算法或一套参数适用于所有数据,而且对于随机波动变化的数据,也还无法找到很精确的预测方法,那么未来面对运维领域种类繁多的海量数据,我们还需要通过不断的创新与实践,最终探索出一套准确高效的运维数据智能分析解决方案,实现智能运维领域的重大突破。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/302078.html