云卷云舒:构建业务型电信智能运维方法

1 引言

        智能运维(AIOps-Algorithmic IT Operations基于算法的IT运维)是人工智能技术在IT运维领域的运用,引用Gartner 的报告的一段话“未来几年,将近50%的企业将会在他们的业务和IT运维方面采用AIOps,远远高于今天的10%“,最近2-3年智能运维的概念随处可见,各大互联网公司、传统IT公司、金融业等都在谈他们的智能运维设想,同时也有人谈AI色变,觉得人工智能只是一个愿景,要落地很难。其实AI已经不是一个新的概念了,百度、微软、谷歌等公司早就在10几年前开始自己的人工智能布局了,到现在均已成为人工智能行业的领跑者了

        人工智能的时代已经来了!人工智能那么强大,应用场景十分的广泛,当然也包括运维领域,而且面向业务型的智能运维更是运维发展的热点趋势。 

 

2 电信系统运维现状

 目前,电信系统的IT运维绝大部分都停留在传统运维的层面,近两年才开始逐渐出现新的突破。

2.1 传统运维的痛点

 传统的运维中,存在着诸多痛点:

1)被动低效的运维难以保证业务连续性

2)缺乏统一的运维监控体系和技术工具

3)海量的运维数据的价值无法充分挖掘。

4)缺乏全方位端到端的运维监控手段

2.2 AIOPS智能运维的切入点

针对上述这些传统运维中存在的痛点,智能化的运维出现必定具有划时代的意义,智能运维系统的设计可以从如下几方面进行展开思考:

1)面向业务维度实现异常检测

2)提供业务全局关系视图

3)KPI可视化与下钻定位

4)采用动态阈值思想的异常检测

5)重视故障的全流程管理

6)立体化监控体系的建设

 

3 AIOPS系统的架构

 

3.1 AIOPS体系构建要素

业务型智能运维体系架构的建设应该考虑如下因素

3.1.1数据

数据,搭建智能运维平台的关键就是数据驱动,具体表现如下。

海量数据存储:运维数据的量级是亿级、TB-PB级别的,所以存储系统一定要具备高容量和扩展性;

数据多样化:运维过程产生的数据具有多样特征,如应用性能数据,基础设施类数据,服务间调用链数据、业务/统计日志数据等,需要针对不同类型数据进行区别化的存储结构的设计,保证各类数据存储的扩展性,同时建立数据之间的关联支点;

数据加工:数据从首次获取到达可用可分析的过程需要数据加工,历经多个阶段,每个阶段数据具备对应的功用,如原始数据经过去脏排错后作为一阶段全量数据,应对历史详查场景;多维数据划分,应对局部场景化需求;不同时间粒度的统计数据,作为数据分析和建模的需求。各阶段数据通过API对外提供查询服务。

3.1.2分析能力

分析能力是智能运维平台的核心,应用大数据+机器学习的分析能力,结合成熟的开源分析算法实现基本的数据分析,再结合具体的应用场景,做出一些适应性改造或匹配来实现相对较好的分析效果

运用起历史数据的价值,且可以有效识别出数据的各维度的规律,如周期性、趋势性、平稳性等,而且分析能力必须结合应用场景,判别相对适合的算法模型来训练数据,方能保证预期的设想。

分析能力可以随着时间的推移不断的演进,可以将新数据的特性带入到模型中来,以不断提高算法的准确度。

3.2 AIOPS体系架构

3.2.1通用的业务型智能运维的体系架构

一个比较通用的AIOPS系统体系架构可以归纳为如下架构:

图1 业务性AIOPS智能运维系统架构设计图

在上述的架构设计中:

1)用户层,业务型智能运维面向的用户,更偏重于业务监控人员,甚至业务部门主管、客服人员;

2)视图层,提供WEB端丰富的可视化视图、大屏方式的业务状态视图、以及满足移动办公需求的手机端APP;

3)服务层,业务智能运维系统应该提供给用户业务视图服务、拓扑服务、性能KPI服务、运维分析服务、告警服务、报表服务以及系统服务等,另外需要支持快速构建新服务的能力

4)核心能力层,业务智能运维系统的最核心部分,可以分为 “智能监控”、“智能分析”和“智能告警”三大模块。

(5)运维对象:运维对象涵盖应用、服务、服务器、网络设备、虚拟化/容器、中间件/数据库、应用日志以及告警等。

3.2.1智能三板斧

构建一个AIOPS智能运维系统,往往应该实现监控采集、分析计算、告警通知三个方面的智能化配备,所以整体架构也应该包含如下三个模块:

(1)智能监控:

实现针对各个层面的监控覆盖,包括用户体验的监控、应用性能的监控、中间件监控、基础设施的监控,收集了全面的数据,从数据中寻找关联,从关联中发现规律,丰富运维知识库。

(2)智能分析:

该部分应该涵盖离线算法的训练模块和在线实时分析模块。离线算法训练模块根据历史数据来以离线的方式训练和修正算法模型,然后生成的算法模型可以实时的应用到线上,如趋势预测、异常检测、故障定位等。

在线实时分析模块要实现实时的算法分析,并不依赖于历史数据所训练出的离线模型,而是依托大数据技术进行实时的分析。

(3)智能告警:

智能告警需要将告警最及时、最准确、最小化的通知给运维人员,这里面则涉及了“实时计算”、“告警抑制”、“告警净化”等关键技术点。

智能告警还可以动态调整告警短信/邮件发送的频率和周期,还有告警通知对象的智能配置,保证运维人员处理告警的专注性,不会被突如其来的海量告警所淹没。

4 AIOPS系统构建的关键要素和技术

4.1异常检测

  异常检测,是业务智能运维领域中的一个最常见的场景,异常检测的方法一般可分为如下几个类别:

(1)传统的异常检测方法

传统模式下完全基于人的主观经验,也即基于固定阈值的异常判断,如 CPU usage高于80%就告警,这种方式适配性是很差的,需要针对不同的场景设定不同的阈值,甚至同一个业务不同时间段的阈值都是不一样的,大量个性化的配置要求,对于运维人员来说是十分费时费力的。

后来也出现了一定的改进,如3-sigma算法,是根据正态分布的概率,自动的调整告警阈值,此时告警阈值的配置不用人工进行,一定程度上提高了运维效率。但是,该类的算法机器容易忽略指标的周期性和趋势性,非常容易造成误判和漏判

2)基于统计学和机器学习的异常检测方法

总结前面的异常检测方法,可以概括为两点:人工运维工作量大、算法适配性低下,其实本质问题归结为一句话,就是动态阈值怎么评定的问题。

这个时候就比较适合引入一些高级的统计学算法了,比如基于指数的三次平滑算法、基于分解的傅里叶/小波分解算法等,可以有效的识别出指标的周期性、趋势性,可以快速识别出一些尖峰(spike)异常

另外自回归移动平均模型(ARIMA算法),对于稳定的时序数据的异常检测是非常有效的,该算法也非常适合用作时序数据的预测场景。

另外机器学习算法也是比较适合在此处应用的, 比如逻辑回归、KNN、k-means、隔离森林等算法。

还有基于深度学习的循环神经网络 RNN算法和长短期记忆网络LSTM算法,比较适合处理和预测时间序列中间隔和延迟相对较长的重要事件。

基于机器学习的众多算法,都可以大大的提高运维的效率,发现人工难以发现的问题,提高预警的及时性和准确度。

3)异常检测模型优化

上一小节提到的各类机器学习算法,虽然功能强大,但是往往都有一定的局限性,那么我们在对具体的一个场景指标(如响应时间)做异常检测的时候,我们到底选哪个算法呢?

方法一:这个问题可以通过“自动模型选取”方式来解决,即采用多个算法同时运行,然后通过投票的方式抉择产生最终的结果。

举个例子,针对“响应时间”指标进行异常检测,采用同比、环比、ARIMA、LSTM、KNN、高斯共5个算法同时进行异常检测,当其中的一半(即>=3)的算法判定为异常时,方认为该时刻的指标是异常的。

方法二:在方法一的基础上为每个算法加入权重值,5种算法初始值均为20(总合为100),当一次异常的判断后,比如算法1/2/3都判定是异常,算法4/5都判定为非异常,那么最终结果为判定为异常,系统向运维人员发出告警,当运维人员在平台上通过指标横向对比、请求下钻、事件挖掘之后发现该时刻的指标确实为异常,那么运维人员会将这个告警处理掉,那么此时后台就会默认向投票正确的算法的权重倾斜,为其权重加1,同时为投票错误的算法权重扣分(但总分仍保持100分);而如果运维人员发现该告警是误报,则会在平台上反馈“误报”,则后台会向投票为非异常的算法权重倾斜,为每个算法权重加1,同时为投票为异常的算法权重扣分(但总分仍保持100分)。如此经过长时间的不断调整,算法组合就越来越接近于准确

4.2 故障定位

在异常检测技术针对故障做出迅速预警之后,就需要进一步的去定位故障的根因,这也是AIOPS中一个比较核心的领域,一般的故障定位方法包括如下几种:

  1. 传统方法:通过查看日志实现,此方法下定时故障的时间一般较长;
  2. 通过APM软件:为应用部署APM探针,实现代码级别的错误下钻查看;
  3. 告警关联分析:通过告警之间的关联,推测出导致故障的根因告警。

以上方法(1)是传统的方法,不可取;方法(2)需要应用部署探针方可,当故障发生之后再部署探针,显然无济于事;而方法(3)下,告警之间的关联方法只是找出了一个相对可能性较大的根因告警,但是这个告警是怎么发生的仍然无法知悉,另外该告警体现的也只是一个瞬时的值,可能针对该告警指标已经上报了多条告警,那么也无法判断。

基于上述方法中的问题,本文中将提出“基于数据跨层关联的故障传播链”的故障定位方法,实现针对故障根因的准确定位。

本方法通过“数据分层”以及“基于变化的跨层关联分析”作为核心点。该方法的简单流程图/协作数据流图如下(以一个大数据平台为例子介绍)

图2 基于数据跨层关联的故障传播链故障定位设计图

4.2.1数据分层

将整个应用运行的环境分为三个层面,如下

1)app层:应用层,运行在平台上的各类应用,例如用户提交的批处理程序“定时计算有推广商业短信价值的用户名单”Job,或图处理程序“计算潜在用户画像”Job,亦或是实时流处理程序“实时发现钓鱼短信”Job等

2)platform层:平台层,app层的各类程序,包括批处理、图处理、流处理、深度学习等多种类型程序都运行在platform层提供的运行组件环境中,如storm、spark、hadoop、zookeeper、tensorflow、hbase、kafka等组件;

3)device层:设备层,即Iaas层,例如服务器、虚拟机、容器等软硬计算设备的运行时环境,也包括如防火墙、路由器、交换机等网络控制面设备运行时环境等。

4.2.2故障定位原理

(1)针对app层、platform层、device等的各项指标进行采集;

(2)设定故障原因的方向为device层àplatform层àapp层,即app层的故障一般都来自于platform层,同样platform层的指标的异常可能由于下一层device层指标异常引起;

举例说明,如上图中,假设app层的“spark time cost”指标发现了数值上的异常,并且通过平台发出了告警,同时通过阈值也发现了platform层的“zookeeper timeout avg”指标(即zookeeper平均超时时间)发生指标告警,以及device层也发出了多条告警,如“netflow size”(即网路流量)指标异常告警等。通过本平台的智能关联算法,判断得出“故障传播链”为“netflow size”异常à“zookeeper timeout avg” 异常à“spark time cost” 异常,那么导致最上层“spark time cost”故障的原因来自device层的“netflow size”异常。

(3)基于2的判断结果,可以向平台用户发送最终故障原因内容,即device设备层的网络流量过大导致了app业务层的spark任务运行时间过大,波及业务。

4.2.3故障传播链

4.2.2章节中的(2)中描述的“故障传播链”实现方法如下:

(1)为三层的各项数据序列进行变化模型的构建,即构建出的新模型new-model体现的是原始指标模型origin-model变化的规律;

(2)为三层所有指标设定三层阈值,且阈值设定为矢量方式,即包含变化率change-rate(简称CR)和变化方向change-direction(简称CD):

一层阈值设定原则:5%<CR<20%,CD任意,代表指标微变;

二层阈值设定原则:20%<=CR<50%,CD任意,代表指标中变;

二层阈值设定原则:50%<=CR,CD任意,代表指标巨变。

(3)针对任何指标的变化,通过2中的设定原则,定义指标的变化等级(微变、中变、巨变)和方向,分别记录为异常警示,在此规则下,新的异常模型定义则类似为“platfom:zookeeper timeout avg:巨变:变大” 、“platfom:hbase iops:中变:变大” 、“device:netflow size:微变:变大”;

4)经过长时间的积累,当平台报告除了app层的故障时,则根据如下规则寻找故障下层传播源节点,举例:app层的“spark time cost”故障产生时,选取该故障发生时刻前后各5分钟内的其他层指标异常列表,通过频繁项集算法FP-GROWTH计算得出最佳置信度(最可靠)的频繁项组合(例如“device:netflow size:微变:变大”à“platfom:zookeeper timeout avg:巨变:变大”à“spark time cost”故障),则故障传播链则可以确定。

(5)经过长时间积累,FP-GROWTH算法得出了多条可靠故障传播链条,涵盖了所有app层故障的故障传播链,前面的众多描述中,故障传播链都是单线条链路,即AàBàC,其实也可以是树形结构的,即A+BàCàD,代表着A和B同时发生时,会导致C发生,进一步导致app层的D故障发生,针对所有最佳故障传播链路进行存储;

(6)那么反向推理克制,当下次底层某特定的故障发生时,则可以推导出上层故障即将发生(例如A和B发生了,那么C故障就会发生了,在C发生前就可以预警,进行故障干预,避免C故障的发生),实现了预警,降低业务影响和损失的目的。

 

5 结论及未来工作

        本文针对构建AIOPS系统需要的研究路径、通用架构、关键技术点做了阐述,并且针对AIOPS中最关键的“异常检测”和“故障定位”两个话题展开了比较详细的分析和设想,让AIOPS的落地更加可行、更加切合业务实际,同时让运维人员以更低的成本运用人工智能技术来服务于电信运维工作。

        下一步的工作重点将是进一步提高异常检测和故障定位的准确度,同时针对故障自愈进行探索,并在更合适的运维场景寻求最切合的方法来实现AIOPS的逐渐落地。

参考文章:


https://blog.csdn.net/bishenghua/article/details/135185321

https://blog.csdn.net/bishenghua/article/details/135217477

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/291711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java基础之java8新特性-默认方法

目录 1.默认方法 jdk8之前的接口 jdk8的接口 默认方法的用途 1.默认方法 jdk8之前的接口 在jdk8之前接口&#xff08;interface&#xff09;中可以定义变量和方法&#xff0c;变量必须是public&#xff0c;static&#xff0c;final的&#xff1b;方法必须是public&#xf…

腾讯云2024年优惠券领取入口及使用教程

腾讯云作为国内领先的云计算服务提供商&#xff0c;一直致力于为用户提供优质、高效、安全可靠的云计算服务。为了回馈广大用户&#xff0c;腾讯云会不定期地推出各种优惠活动&#xff0c;其中最受欢迎的就是优惠券活动。本文将详细介绍腾讯云优惠券的领取入口及使用教程。 一、…

19、BLIP-2

简介 github 通过利用预训练的视觉模型和语言模型来提升多模态效果和降低训练成本&#xff0c;预训练的视觉模型能够提供高质量的视觉表征&#xff0c;预训练的语言模型则提供了强大的语言生成能力。 实现过程 为了弥合模态差距&#xff0c;提出了一个分两个阶段预训练的 Qu…

秋招复习之数组与链表

目录 前言 1 数组 初始化数组&#xff1a; 访问元素 插入元素 删除元素 遍历数组&#xff1a; 查找元素 扩容数组&#xff1a; 数组的优点与局限性 2 链表 初始化链表 插入节点 删除节点 访问节点 查找节点 数组 vs. 链表 常见链表类型 3 列表 初始化列表 访问元素 插入与删…

6. Mybatis 缓存

6. Mybatis 缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率MyBatis系统中默认定义了两级缓存 一级缓存二级缓存 默认情况下&#xff0c;只有一级缓存&#xff08;SqlSession级别的缓存&#xff0c;也称为本地缓存&…

vuex基础用法 与 辅助函数使用

效果图 index.js文件 import Vue from "vue"; import Vuex from vuexVue.use(Vuex)export default new Vuex.Store({state: {shopsList: [{goodsName: "手机1", //商品名goodsAmount: 0, //购买的商品数量goodsPrice: 100, //单个商品价格totalPrice: 0,i…

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户&#xff1a; 1.使用CREATE USER语创建…

C#最佳工具集合:IDE、分析、自动化工具等

C#是企业中广泛使用的编程语言&#xff0c;特别是那些依赖微软的程序语言。如果您使用C#构建应用程序&#xff0c;则最有可能使用Visual Studio&#xff0c;并且已经寻找了一些扩展来对您的开发进行管理。但是&#xff0c;这个工具列表可能会改变您编写C#代码的方式。 C#编程的…

找不到vcruntime140.dll怎么处理?6个修复教程分享

本文将详细介绍vcruntime140.dll文件的相关内容&#xff0c;并提供6个不同的修复教程&#xff0c;帮助大家解决这一问题。 一、vcruntime140.dll是什么文件&#xff1f; vcruntime140.dll是Visual C Redistributable Packages的一部分&#xff0c;它是Microsoft Visual Studi…

连续分配管理方式-第四十三天

目录 前言 单一连续分配 固定分区分配 分区大小相等 分区大小不等 分区说明表 动态分区分配 问题 用什么样的数据结构记录内存的使用情况 应该选择哪个分区进行分配 分区的分配与回收操作 分配 回收 结论 本节思维导图 前言 连续分配指为用户进程分配的必须是一…

条件随机场 (CRF) 的损失函数以及faiss 的原理介绍

1、条件随机场 (CRF) 的损失函数 条件随机场&#xff08;CRF&#xff09;是一种统计建模方法&#xff0c;常用于结构化预测问题&#xff0c;如序列标注、分词和命名实体识别等。在CRF模型中&#xff0c;损失函数用于衡量模型预测的标记序列与真实标记序列之间的差异。CRF的目标…

【Redux】自己动手实现redux和react-redux

1. React提供context的作用 在class组件的世界里&#xff0c;如果后代组件共享某些状态&#xff0c;比如主题色、语言键&#xff0c;则需要将这些状态提升到根组件&#xff0c;以props的方式从根组件向后代组件一层一层传递&#xff0c;这样则需要在每层写props.someData&#…

控制障碍函数(Control Barrier Function,CBF) 二、示例

二、示例 2.1、系统模型 这里我们举一个CBF作者给出的经典示例 我们定义控制输入 u u u 为蓝色车的推力。 p p p 为蓝色车的位置&#xff0c; v v v 为蓝色车的速度&#xff0c; z z z 为蓝色车与黄色车之间的距离&#xff0c; v 0 v_0 v0​ 为黄色车的速度。我们定义系统的…

功能介绍 | 探秘Goby功能世界:点击URL,即刻畅享快速调起之旅!

​​0x01 前言 ​我们从只会点鼠标的猴子到CtrlC,CtrlV来回切换的工具人&#xff0c;但有时候遇到大量需要复制的url界面&#xff0c;真的希望能有一个可以一键整理、一键扫描URL的功能来拯救&#xff01; 好消息是&#xff0c;Goby从客户端版本2.8.6起&#xff0c;官方引入了…

CAN数据记录仪在新能源车上的应用

随着新能源汽车的快速发展&#xff0c;对车辆安全和性能的要求也越来越高。在新能源车中&#xff0c;液位传感器是必不可少的零部件之一&#xff0c;用于监测电池液位、冷却液位等关键参数。在测试阶段需要工作人员花费大量时间跟车去获取它的CAN数据&#xff0c;从而分析是否有…

web自动化测试从入门到持续集成

在很多刚学习自动化的可能会认为我只需要会运用selenium&#xff0c;我只需要在一个编辑器中实用selenium java编写了一些脚本那么就会自动化了&#xff0c;是真的吗&#xff1f;答案肯定是假的。自动化肯定是需要做到真的完全自动化&#xff0c;那如何实现呢&#xff1f;接着往…

学习Go语言Web框架Gee总结--前缀树路由Router(三)

学习Go语言Web框架Gee总结--前缀树路由Router router/gee/trie.gorouter/gee/router.gorouter/gee/context.gorouter/main.go 学习网站来源&#xff1a;Gee 项目目录结构&#xff1a; router/gee/trie.go 实现动态路由最常用的数据结构&#xff0c;被称为前缀树(Trie树) 关…

MySQL之CRUD,函数与union使用

目录 一.CRUD 1.1.SELECT(查询) 1.2.INSERT&#xff08;新增&#xff09; 1.3.UPDATE(修改) 1.4.DELETE&#xff08;删除&#xff09; 二.函数 2.1.常见函数 2.1.1.字符函数 2.1.2.数字函数 2.1.3.日期函数 2.2.流程控制函数 2.3.聚合函数 三.union与union all 四…

物流实时数仓:数仓搭建(DWS)一

系列文章目录 物流实时数仓&#xff1a;采集通道搭建 物流实时数仓&#xff1a;数仓搭建 物流实时数仓&#xff1a;数仓搭建&#xff08;DIM&#xff09; 物流实时数仓&#xff1a;数仓搭建&#xff08;DWD&#xff09;一 物流实时数仓&#xff1a;数仓搭建&#xff08;DWD&am…

JMeter CSV 参数文件的使用方法

.在 JMeter 测试中&#xff0c;参数化是非常重要的&#xff0c;参数化允许我们模拟真实世界中的各种情况。本文我们将探讨如何在 JMeter 中使用 CSV 参数文件。 创建 CSV 文件 首先&#xff0c;我们需要创建一个逗号分隔的值&#xff08;CSV&#xff09;文件&#xff0c;其中…