当前位置: 首页 > news >正文

通过大语言模型理解运维故障:评估和总结

在这里插入图片描述
张圣林
南开大学软件学院副教授、博士生导师
第六届CCF国际AIOps挑战赛程序委员会主席

在ATC、WWW、VLDB、KDD、SIGMETRICS等国际会议和JSAC、TC、TSC等国际期刊发表高水平论文50余篇。主持国家自然科学基金项目2项,横向项目13项(与华为、字节跳动、腾讯等合作)。获ISSRE 2023/2018最佳学术论文奖、清华大学优秀博士学位论文、华为“最佳技术合作教授”、南开大学“良师益友”、麒麟软件“校企合作突出贡献”奖、天津市科技进步一等奖等荣誉。担任CCF A/B类国际会议程序委员会委员十余次。中国计算机学会高级会员,YOCSEF天津AC副主席,互联网专委、软件工程专委、服务计算专委执行委员。

论文:
Assess and Summarize: Improve Outage Understanding with Large Language Models(ESEC/FSE 2023)


本文为南开大学软件学院副教授张圣林在论文闪电分享环节的演讲内容整理。

感谢各位嘉宾对AIOps挑战赛和研讨会的大力支持,今天我将分享近期我们团队和微软合作基于大语言模型提高对故障理解的工作。

什么是云服务故障?

图片
当今社会,我们正处在数字化时代,云服务对我们的生产生活至关重要。国内和国外涌现出一批优秀的云服务供应商:亚马逊的AWS、微软的Azure、谷歌云、阿里云、腾讯云等。它们为我们提供了各种各样的服务,让我们的生活更加便利。

但是,近期接连不断的爆出多家云服务公司出现故障的事件,当故障发生之后,一个云数据中心或整个地区的基本服务(如存储、计算能力或中间件)中断,带来了巨大的经济损失;用户体验下降,造成客户丢失。企业和个人都受到了波及,大家应该是感同身受。

图片

当云故障发生之后,我们首先需要确认故障影响了哪些组件。只有确定了被影响组件才能够做故障规避,把这部分组件进行隔离。

在这里插入图片描述

以上图为例,当一个存储服务的故障发生之后,会导致数据库指标出现增长,Web App性能出现下降,进而导致用户体验降低。从“T1”时刻开始,我们可以确认这是一个故障了,因为它影响用户体验,并且造成了很多事件发生。

故障发生之后我们需要花一段时间总结故障产生的原因,也就是图片中“T2”时刻,我们需要写故障摘要,把整个故障的摘要信息告诉其他的团队。

图片

在此之前,故障摘要的生成是通过人工的方式去完成的,费时费力且容易出错。微软在这方面做了一些事件聚合的尝试工作,但是把事件聚合完了之后,还是需要运维工程师去人工查看。这里有两个挑战:首先,需要运维工程师判断哪些信息是有用的。其次,需要总结领域特定的、与云相关的故障信息。

什么是故障的摘要?

我们分析了微软过去三年故障的数据,回答了下面几个问题。

1、故障的影响范围

图片

我们分析了微软18个云系统3年多的数据,研究了超过6000个已经解决的云故障。发现超过86%的故障是影响了很多用户的,其中持续时间长的故障比例远大于持续时间短的故障;同时,我们还发现25%的故障关联超过10个事件,影响范围比较大。

2、故障摘要包含了哪些信息?

图片

我们把已有的工单信息、告警信息进行分析研究,主要是分析那些级别比较高的告警信息,进行整合生成故障摘要。在这个摘要里主要回答了五方面的问题:故障出现的时间、故障发生的位置、故障影响的范围、故障如何产生、为什么会发生故障。把这些问题总结之后就能够生成如上图右边实例的故障摘要。

3、人工分析故障所需的时间成本

图片

我们做了一个统计,如上图所示“T1”代表了故障开始时间, “T2”代表运维工程师写完故障摘要的时间,用“T2”减“T1”表示整个故障摘要生成的时间。我们会发现超过23%的故障花费的时间是超过两个时间单位的,耗时比较长。

4、研究结果

图片

为了解决上述问题,我们利用基于大语言模型设计了一个技术框架,它能够生成一个有用的、可读的故障摘要,大幅降低故障摘要生成时间。什么是有用?指的是能够收集和故障相关且价值比较高的信息,能够很容易的被人看懂,同时还能够大幅的降低生成故障的时间,这也是我们设计这个框架的目标。

技术框架方案介绍

图片

整个框架包括几个部分,首先是采集故障相关的告警信息。怎么样去采集?通过三种途径去实现的。首先是基于规则,因为有很多规则可以去利用,比如说一些告警是由同一个指标时间序列异常检测所产生的,那么我们就判定这些告警是相关的。第二是模块,根据历史的告警信息,分析告警与哪些模块是相关联的,那么在新的一次故障产生之后,我们会把与这些模块相关的告警关联起来。第三是深度学习。利用一些深度学习方法,根据语义的相似性,分析哪些告警描述的是同一个事件,那就表明它们是相关的。

我们通过这三种途径,就能够把与这个故障本身相关的那些告警的事件采集起来,构建这个故障的范围。范围确定之后,把范围内全部的告警事件聚合在一块,根据告警的紧要程度进行自动排序。

我们把每个告警的 Title和描述做一个采集,把它们作为一个Context,再把历史上人工所生成的摘要信息作为补充部分,对Chat GPT进行训练。通过这样的方式在新的故障发生之后,只需要把相关告警信息输入进去,就可以生成本次故障的摘要信息。

实验结果

图片

上图中展示的是我们的实验结果,其中Chat GPT3.5在故障摘要生成方面效果显著优于Chat GPT 2和其它规则或检索生成方式。

图片

同时,我们发现通过这种方式比传统的人工方式的效率提高了200多倍。

图片

我们还采用了人工的方式,把我们的研究成果发给那些故障的Owner,他们用不同的方法,比如阶段生成或者基于规则来做排序,最后发现大部分工程师都还是会把Chat GPT生成的摘要排在第一位或第二位。

总结

图片

我们的研究首先是对大规模的云服务故障做一个分析;同时设计了一个有用且可读的技术框架,能够大幅降低故障摘要的生成时间;最后我们研究成果得到了微软工程师们的认可,证明该方法确实能够大幅降低故障摘要生成的时间。

以上是我的分享,谢谢大家。

相关文章:

通过大语言模型理解运维故障:评估和总结

张圣林 南开大学软件学院副教授、博士生导师 第六届CCF国际AIOps挑战赛程序委员会主席 在ATC、WWW、VLDB、KDD、SIGMETRICS等国际会议和JSAC、TC、TSC等国际期刊发表高水平论文50余篇。主持国家自然科学基金项目2项,横向项目13项(与华为、字节跳动、腾讯…...

SVN教程-SVN的基本使用

SVN(Apache Subversion)是一款强大的集中式版本控制系统,它在软件开发项目中扮演着至关重要的角色,用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比,SVN 的集中式架构使得团队能够更加协同地进行开发&…...

【MySQL】数据查询——DQL基本数据库查询

目录 查询语法1. 查询表中所有的数据行和列,采用“*”符号2. 查询表中指定列的数据。3. 在查询中使用别名,使用“AS”关键字。4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常…...

机器人持续学习基准LIBERO系列9——数据集轨迹查看

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…...

uniapp中canvas的基础使用

canvas简介 canvas是uniapp中提供的一个组件,用于生成自定义的图形界面。通过canvas,我们可以通过JavaScript代码在页面上绘制各种图形和图像。 使用canvas 在页面中添加canvas 首先需要在页面的template中添加一个canvas组件: <template><view><canvas ca…...

中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…...

老隋蓝海项目有人盈利的吗?怎么做比较好些呢?

在互联网创业的浪潮中&#xff0c;蓝海项目总是令人心动。老隋&#xff0c;作为一位经验丰富的创业者&#xff0c;近期分享了他所发现的蓝海项目。但不少人可能会有疑问&#xff1a;老隋分享的蓝海项目真的有人盈利了吗?如果真的盈利了&#xff0c;又该怎么做才能确保成功呢?…...

递归与递推(蓝桥杯 c++)

目录 题目一&#xff1a; 代码&#xff1a; 题目二: 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目一&#xff1a; 代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int …...

ArduinoTFTLCD应用

ArduinoTFTLCD应用 ArduinoTFTLCD应用硬件连接软件导入库显示数字、字符显示汉字方案1方案2 显示图片 总结 ArduinoTFTLCD应用 对于手工喜欢DIY的人来说&#xff0c;Arduino驱动的TFTLCD被很多人使用&#xff0c;此处就总结一下&#xff0c;使用的是VScode的PlatformIO插件驱动…...

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天&#xff0c;如何以创意和匠心为传统文化注入新的活力&#xff0c;成为了摆在每一位文化工作者面前的重要课题。近日&#xff0c;《秦时明月》作为一部深受观众喜爱的国产动画IP&#xff0c;在迎来其十七周年之际&#xff0c;联手陕西历史博物馆&#xf…...

2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除

一、事件机制 1、事件源.事件类型(事件处理程序) $(this)中的this不能加引号 $(#box).click(function () {$(this).css(background-color,blue)//点击颜色变为蓝色 })2、事件源.on/bind(事件类型&#xff0c;事件处理程序) $("#box").on(dbclick,function () {$(…...

YOLOv6-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…...

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…...

springboot240基于Spring boot的名城小区物业管理系统

基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制&#xff0c;采用人工登记的方式保存相关数…...

Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用&#xff1a;APP对象/API接…...

AJAX 学习笔记(Day1)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 AJAX 入门 1.1 AJAX 概念和 axios 使用 1.2 认识 URL 1.3 URL 查询参数 1.4 常用请求方法和数据提交 1.5 HT…...

leetcode 740.删除并活得点数

这道题和打家劫舍得思路很像。 思路&#xff1a;首先我们看到题目的意思&#xff0c;就是说我们如果选择了一个数&#xff0c;那么它相邻的数就会不得选入&#xff0c;也就是删除。这就是上一个题那个相邻的家不能偷的问题呗&#xff01; 我们从那个地方转换一下&#xff0c;…...

寻找峰值[中等]

优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…...

【ESP32 IDF】key按键与EXTI中断

文章目录 前言一、按键的使用1.1 按键的简介1.2 读取按键的高低电平1.3 读取按键具体代码 二、中断二、EXIT外部中断2.1 EXIT外部中断简介2.2 外部中断基础知识2.3 设置外部中断注册外部中断服务函数设置触发方式添加中断函数 2.4 示例代码 总结 前言 在嵌入式系统开发中&…...

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...