随着企业发展,其应用架构也越来越复杂,从单一的应用,到多个应用共同组合形成服务,到云计算、微服务架构,再到目前流行的容器化。除了基础的服务应用外,也出现了专门用于采集、存储与分析用户信息的大数据处理应用。云数据中心规模快速增长,运维环境的异构和复杂化,导致日常运维工作需要付出的人力、时间成本越来越高。运维的发展已经经历了脚本时代——工具时代——自动化时代(DevOps),每一次的变迁都代表了运维需求的变化,运维技术的变革和运维人员效率的提高,随着大数据、机器学习和AI技术的飞速发展,运维需求也逐渐向智能化过渡。智能运维(AIOps)是自动化运维的拓展,其目的是进一步去除自动化运维中人为干扰,最终实现运维工作的无人化,完全自动化。

智能运维的内容主要有数据采集存储、异常自动检测、异常自动处理和数据的可视化。

数据采集存储

运维系统需要支持从机房设施、物理基础设施、数据中心网络、虚拟化资源池、云服务和应用到用户端日志的统一管理,实现多对象和多维度的集中监控。对于基础架构,需要采集的可能是性能数据,除了基础的CPU利用率、负载、%iowait,内存的利用率、页扫描、交换,磁盘的利用率、响应时间外,也可以使用处理器内包含的硬件计数器采集更详细的性能指标,包括CPU周期、CPU指令、一级/二级/三级缓存访问,浮点单元、内存I/O、资源I/O。由于存在数据中心绿色节能的需求,也可以采集机器或应用的功耗信息。对于应用层日志,可以使用ELK抽取,也可以通过中间件采集日志。除了原始指标外,也可以通过聚合转换形成新的指标。

异常自动检测

想尽快在智能运维领域有所突破,更实际一点的办法就是实现异常自动检测系统。在监控领域,由数据采集器采集的数据源源不断的产生,形成了时间相对应的时序数据。传统的时序数据异常检测方法有阈值法,包括固定阈值和动态阈值,对于固定阈值,如果当前值大于或小于阈值,就说明为异常,而对于动态阈值,如果当前值前一个窗口数据的平均值𝜇、方差𝜎,如果当前值在𝜇±2𝜎或𝜇±3𝜎范围外,就说明为异常。但传统方法并不适用于监控数据的异常检测,主要有两个原因,第一是忽视了周期性,第二是忽视了趋势。在经济学领域,需要预测经济数据,为了解决前面两个问题,提出了一些方法,可以根据前面的时序数据预测之后数据可能的值,用在异常检测上,我们只需要看实际值和预测值偏差是否足够大就可以判断该值是否为异常。常见的算法有ARIMA、EWMA、Holt-Winters、时序数据分解,主要挑战包括突发事件的影响、节假日的影响、数据不规则的影响,最重要的就是对异常的定义不一样,会有主观的因素,最后导致这些算法很难调节。异常检测的另外一个思路基于深度学习来做,循环神经网络(简称RNN)是一个和时间序列有关系的神经网络,不过随着时间间隔的增大,RNN对于后面时间的节点相比前面时间节点的感知力将下降。解决这个问题需要用到LongShort Term 网络(LSTM),它通过刻意的设计来避免长期依赖问题。LSTM在实践中默认可以记住长期的信息,而不需要付出很大代价。更新的研究发现,一种新型的神经网络HTM在时序数据的异常检测上可以取得比LSTM更好的结果。

异常自动处理

云时代由于分布式和微服务化软件架构的流行,业务调用关系愈发复杂,出现故障后,对故障的快速定位形成了很大的挑战。利用大数据技术,结合故障特征库进行跨数据领域关联分析,提前发现隐患、预测故障。与自动化策略执行系统集成联动,在用户发觉问题前将问题解决,避免对业务造成影响。目前,主要有两类机器学习可以帮助解决该类问题。

关联规则算法

在实际的系统中,存在各种各样的关联,比如,

  • 应用之间的调用链关系
  • 数据库与应用服务器
  • 网络设备与网络设备、网络设备与应用服务器
  • 宿主机与虚拟机关系等

若在同一个时间窗内,有多个强关联的设备或应用服务器同时告警,则大概率认为告警之间存在关联关系。关联规则算法主要有Apriori算法和FPGrowth算法两种算法。这两种算法的功能是相似的,你可以找到频繁的项集。一般PGrowth比Apriori更有效一些。我们将时间窗口按一定的时间间隔进行划分,计算每个时间窗内各种报警发生的频率,并找出各种报警之间的相关性。最后根据分析报警根源的关系。在关联规则算法中,有一条重要的规则,即链路上的连续报警之间可能存在相关性,越靠后的应用越可能是根源。关联规则算法的优点是易于理解和实现。缺点是效率低,灵活性不够高。

深度学习方法

强关联数据分析是对已知告警的关联关系,直接进行根源告警分析。但是有些时候,关联关系是未知的。这时就需要通过机器学习算法,找到告警之间的隐含联系,再进行根源告警预测。对于某类故障引起的大量告警之间,存在着时间相关性。将历史派生告警作为输入,将根源告警类型作为输出。通过LSTM提取派生告警特征,建立告警相关性分析模型。这样就可以实时将符合特征的派生告警,划分到同一类根源告警中,帮助用户快速定位问题。

数据的可视化

在数据中心发生故障时,系统健康状况可视化将快速捕获每个数据中心内资源和云服务的当前和历史健康状况,包括有关性能容量,相关对象和警报以及拓扑和类别日志信息的信息。此外,对于多维监控数据,可以使用数据立方体帮助理解,在数据立方体上,我们已经有了深入的探索,并已有相关产品开发。事件流图也是一种简化运维的可视化方法智能算法需要自动分析这些告警,将它们按照主机、集群或者应用智能地进行组合,形成事件,并按照时间顺序显示出来。