微软发布AIOpsLab:一个开源的全面AI框架,用于AIOps代理

news2025/2/28 15:24:01

        在当今这个云计算技术迅猛发展的时代,企业面临着前所未有的挑战与机遇。随着云基础设施的日益复杂化,它们成为了企业运营不可或缺的支柱。网站可靠性工程师(Site Reliability Engineers,简称SRE)和DevOps团队肩负着关键任务,即管理和维护系统的稳定性,这包括故障的检测、诊断和缓解。特别是在微服务和无服务器架构成为主流的今天,这些任务的难度和复杂性都在不断上升。这些架构虽然提升了系统的可扩展性,但同时也可能带来新的故障点,比如在亚马逊的AWS云平台上,仅仅一小时的服务中断就可能造成巨大的经济损失。

        为了应对这些挑战,微软的研究人员和加州大学伯克利分校、伊利诺伊大学香槟分校、印度科学研究所以及Agnes Scott学院的团队一起,开发了AIOpsLab。这个框架就是为了让AIOps代理的设计、开发和提升变得更加系统化。AIOpsLab的目标是提供可复制、标准化、可扩展的基准。它的核心功能包括整合现实世界的工作负载、故障注入能力,还有代理和云环境之间的接口,这样就能模拟出类似生产环境的场景。这个开源框架覆盖了云运营的整个生命周期,从故障检测到解决,一应俱全。通过提供模块化、可适应的平台,AIOpsLab帮助研究人员和实践者提升云系统的可靠性,减少对手动干预的依赖。

图片

 图 1:AIOpsLab 的系统架构

        如图1所示,协调器(Orchestrator)就像是系统元素之间的协调者,也是代理和云之间的接口(Agent-Cloud-Interface,ACI)。代理通过协调器来解决问题,接收问题描述、指令和相关API。协调器用工作负载(Workload)和故障(Fault)生成器来制造各种问题,然后注入到它能部署的应用中。部署的服务在多个层面都能被观察到,提供遥测数据、追踪和日志。协调器用Kubernetes、Helm甚至Shell这些工具和服务、云进行沟通。代理通过协调器来行动,协调器执行它们并更新服务的状态。最后,协调器用预定义的指标来评估解决方案。

技术细节和优势

        AIOpsLab框架有几个关键组件。协调器是一个核心模块,它通过提供任务描述、动作API和反馈来协调代理和云环境之间的互动。故障和工作负载生成器模拟现实世界的条件来考验被测试的代理。可观察性是框架的另一个基石,它提供全面的遥测数据,比如日志、指标和跟踪,帮助诊断故障。这种设计很灵活,可以和多种架构集成,包括Kubernetes和微服务。AIOpsLab通过标准化AIOps工具的评估,确保了测试环境的一致性和可复制性。它还为研究人员提供了关于代理性能的宝贵信息,让故障定位和解决能力能持续提升。

结果和洞见

图片

 

        在一个案例研究中,研究人员用DeathStarBench的SocialNetwork应用程序来测试AIOpsLab的能力。他们设置了一个真实的故障——微服务配置错误——然后测试了一个基于LLM的代理,这个代理用的是GPT-4驱动的ReAct框架。代理在36秒内就识别并解决了问题,这显示了框架在模拟现实世界条件方面的有效性。详细的遥测数据对于找出问题的根本原因非常关键,而协调器的API设计帮助代理在探索性和针对性行动之间找到了平衡。这些发现都强调了AIOpsLab作为一个强大基准的潜力,它能帮助评估和提升AIOps代理。

安装和设置选项

AIOpsLab提供了灵活的设置选项,适应不同的用户环境。根据您现在的设置,您可以选择以下路径之一:

  • 使用已有的带有Kubernetes集群的虚拟机:

    您可以用下面的命令来克隆仓库。我们推荐用poetry来管理依赖,您也可以用标准的pip install -e .来安装包。

$ git clone <CLONE_PATH_TO_THE_REPO>
$ cd AIOpsLab
$ pip install poetry
$ poetry install -vvv
$ poetry shell
  • 在现有的虚拟机上设置Kubernetes

    您还需要一个运行中的Kubernetes(k8s)集群作为前提。您可以参照官方的 k8s 安装(https://github.com/microsoft/AIOpsLab/blob/main/scripts/kube_install.sh),它会直接在服务器上安装k8s(注意,这只是一个安装示例,不是可执行脚本;您可能需要根据您的情况修改一些部分,比如脚本中的节点名称和证书哈希)。之后,运行:

$ cd scripts
$ ./setup.sh $(hostname) # 或者 <YOUR_NODE_NAME>
  • 在云上配置虚拟机和Kubernetes

    用户可以在公有云,比如Azure上创建一个双节点Kubernetes集群。这也可以作为创建更复杂部署或在其他云上部署的起点。

快速开始

作为代理的人类:

$ python3 cli.py
(aiopslab) $ start misconfig_app_hotel_res-detection-1 # 或者选择任何您想要解决的问题
# ...等待设置...
(aiopslab) $ submit("Yes") # 提交解决方案

运行GPT-4基线代理:

$ export OPENAI_API_KEY=<YOUR_OPENAI_API_KEY>
$ python3 clients/gpt.py # 您也可以在脚本中更改要解决的问题

您可以用k9s或其他集群监控工具方便地检查集群的状态。

使用方法

AIOpsLab可以这样用:

  • 把您的代理接入AIOpsLab

  • 向AIOpsLab添加新应用

  • 向AIOpsLab添加新问题

如何把您的代理接入AIOpsLab?

AIOpsLab让开发和评估您的代理变得特别简单。您只需要3个简单的步骤就能把您的代理接入AIOpsLab:

  1. 创建您的代理:您可以自由地用任何您喜欢的框架来开发代理。唯一的要求是:

    • 把您的代理包装在一个Python类中,比如叫Agent

    • 在类中添加一个异步方法get_action

# 根据当前状态并返回代理的行动
async def get_action(self, state: str) -> str:
    # <您的代理逻辑在这里>
  1. 把您的代理注册到AIOpsLab:现在您可以把代理注册到AIOpsLab的协调器中。协调器会管理您的代理和环境之间的互动:

from aiopslab.orchestrator import Orchestrator

agent = Agent()             # 创建您的代理实例
orch = Orchestrator()       # 获取AIOpsLab的协调器
orch.register_agent(agent)  # 把您的代理注册到AIOpsLab
  1. 在问题上评估您的代理

    1. 初始化问题:AIOpsLab提供了一些问题,您可以在这些问题上评估您的代理。在这里找到可用问题列表或者用orch.probs.get_problem_ids()。现在通过它的ID来初始化一个问题:

problem_desc, instructs, apis = orch.init_problem("k8s_target_port-misconfig-mitigation-1")
  1. 设置代理上下文:用问题描述、指令和可用的API来为您的代理设置上下文。(这一步取决于您的代理设计,留给用户自己来)

  2. 开始问题:通过调用start_problem方法来开始问题。您也可以指定最大步数:

import asyncio
asyncio.run(orch.start_problem(max_steps=30))

这个过程会创建一个和协调器的Session,在这个Session里,代理会解决问题。协调器会评估您的代理的解决方案并提供结果(存储在data/results/下)。您可以用这些结果来改进您的代理。

如何向AIOpsLab添加新应用?

AIOpsLab提供了一个默认的应用列表,用来评估代理的操作任务。但是,作为开发者,您可以向AIOpsLab添加新应用,并围绕它们设计问题。

要用Helm向AIOpsLab添加新应用,您需要:

  1. 添加应用元数据

    • 应用元数据是一个描述应用的JSON对象。

    • 包括任何字段,比如应用的名字、描述、命名空间等等。

    • 我们建议还包括一个特别的Helm Config字段,如下:

"Helm Config": {
    "release_name": "<部署Helm版本名称>",
    "chart_path": "<应用Helm图表的路径>",
    "namespace": "<应用应该部署的K8S命名空间>"
}
  • Helm Config被协调器用来在与应用相关的问题开始时自动部署您的应用。

  • 协调器会自动提供所有其他字段作为上下文给代理,用于与此应用相关的任何问题。

创建一个包含这个元数据的JSON文件,并保存在metadata目录中。比如social-network应用:social-network.json

  1. 添加应用类

apps目录中的新Python文件里扩展基类:

from aiopslab.service.apps.base import Application

class MyApp(Application):
    def __init__(self):
        super().__init__("<path to app metadata JSON>")

Application类为应用提供了基础实现。您可以根据需要覆盖方法并添加新的方法以适应您的应用需求,但基类应该足以满足大多数应用。

如何向AIOpsLab添加新问题?

和应用类似,AIOpsLab提供了一个默认的问题列表来评估代理。但是,作为开发者,您可以向AIOpsLab添加新问题,并围绕您的应用设计它们。

AIOpsLab中的每个问题都有5个组件:

  1. 应用:问题所基于的应用。

  2. 任务:代理需要执行的AIOps任务。目前我们支持:检测、定位、分析和缓解。

  3. 故障:在应用中引入的故障。

  4. 工作负载:为应用生成的工作负载。

  5. 评估器:检查代理性能的评估器。

要向AIOpsLab添加新问题,请在problems目录中创建一个新的Python文件,如下:

  1. 设置。导入您选择的应用(比如MyApp)和任务(比如LocalizationTask):

from aiopslab.service.apps.myapp import MyApp
from aiopslab.orchestrator.tasks.localization import LocalizationTask
  1. 定义。要定义一个问题,创建一个从您选择的Task继承的类,并定义3个方法:start_workloadinject_faulteval

class MyProblem(LocalizationTask):
    def __init__(self):
        self.app = MyApp()

    def start_workload(self):
        # <您的工作负载逻辑在这里>

    def inject_fault(self)
        # <您的故障注入逻辑在这里>

    def eval(self, soln, trace, duration):
        # <您的评估逻辑在这里>
  1. 注册。最后,把您的问题添加到协调器的注册表中。

  • start_workload:启动应用的工作负载。使用您自己的生成器或者AIOpsLab的默认生成器,后者基于wrk2:

from aiopslab.generator.workload.wrk import Wrk

wrk = Wrk(rate=100, duration=10)
wrk.start_workload(payload="<wrk payload script>", url="<app URL>")
  • inject_fault:向应用引入故障。使用您自己的注入器或者AIOpsLab的内置注入器,您也可以扩展它。比如,K8S层的配置错误:

from aiopslab.generators.fault.inject_virtual import *

inj = VirtualizationFaultInjector(testbed="<namespace>")
inj.inject_fault(microservices=["<service-name>"], fault_type="misconfig")
  • eval:用3个参数评估代理的解决方案:(1) soln:代理提交的解决方案(如果有),(2) trace:代理的行动轨迹,和(3) duration:代理所花费的时间。

在这里,您可以使用每个任务的内置默认评估器和/或添加自定义评估。结果存储在self.results中:

def eval(self, soln, trace, duration) -> dict:
    super().eval(soln, trace, duration)     # 默认评估
    self.add_result("myMetric", my_metric(...))     # 添加自定义指标
    return self.results

注意:当代理开始一个问题时,协调器会创建一个Session对象,存储代理的交互。trace参数是这个会话的记录轨迹。

结论

AIOpsLab为推进自动化云运营提供了一个深思熟虑的方法。它通过解决现有工具的不足,并提供一个可复制和现实的评估框架,来支持可靠和高效的AIOps代理的持续发展。AIOpsLab的开源特性,鼓励了研究人员和实践者之间的合作和创新。随着云系统的规模和复杂性的增长,像AIOpsLab这样的框架将变得越来越重要,它们是确保运营可靠性和推进AI在IT运营中角色的关键。

详见论文:https://arxiv.org/pdf/2407.12165

github: https://github.com/microsoft/AIOpsLab/?tab=readme-ov-file

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pixel 6a手机提示无法连接移动网络,打电话失败!

1、开启VoLTE 2、如果没有&#xff0c;下载shizuku和PixelIMS应用。 shizuke Releases RikkaApps/Shizuku GitHub PixellMS Release v1.2.8 kyujin-cho/pixel-volte-patch GitHub 3、安装shizuke启动&#xff0c;开通root可以直接点击下面的启动&#xff0c;如果没有就…

【Arm】Arm 处理器的半主机(semihosting)机制

概览 通过 semihosting 机制&#xff0c;主机可以通过调试器使用目标计算机 IO 接口。 例如开发者的 PC 通过 J-Link 来使用 STM32 MCU 的输入输出。 这些功能的示例包括键盘输入、屏幕输出和硬盘 I/O。例如&#xff0c;可以使用此机制启用 C Library 中的函数&#xff0c;如…

Wireshark 学习笔记1

1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 &#xff08;1&#xff09;选择合适的网卡 &#xff08;2&#xff09;开始捕获数据包 &#xff08;3&#xff09;过滤掉无用的数据包 &#xff08;4&#xff09;将捕获到的数据包保存为文件…

2025-01-06 Unity 使用 Tip2 —— Windows、Android、WebGL 打包记录

文章目录 1 Windows2 Android2.1 横版 / 竖版游戏2.2 API 最低版本2.3 目标帧率2.3.1 targetFrameRate2.3.2 vSyncCount2.3.3 Unity 默认设置以及推荐设置2.3.4 Unity 帧率托管 3 WebGL3.1 平台限制3.2 打包报错记录 13.3 打包报错记录 2 ​ 最近尝试将写的小游戏打包&#xff…

湘潭大学人机交互复习

老师没给题型也没划重点&#xff0c;随便看看复习了 什么是人机交互 人机交互&#xff08;Human-Computer Interaction&#xff0c;HCI&#xff09;是关于设计、评价和实现供人们使用的交互式计算机系统&#xff0c;并围绕相关的主要现象进行研究的学科。 人机交互研究内容 …

基于FPGA的出租车里程时间计费器

基于FPGA的出租车里程时间计费器 功能描述一、系统框图二、verilog代码里程增加模块时间增加模块计算价格模块上板视频演示 总结 功能描述 &#xff08;1&#xff09;&#xff1b;里程计费功能&#xff1a;3公里以内起步价8元&#xff0c;超过3公里后每公里2元&#xff0c;其中…

基于FPGA的洗衣机控制器电子定时器

文章目录 功能描述 一、框架 二、verilog代码 控制模块实现 三、视频上板效果展示 功能描述 &#xff08;1&#xff09;定时启动正转20秒暂停10秒反转20秒暂 停10秒&#xff0c;定时未到回到“正转20秒暂停10秒……”&#xff0c;定时到则停止; 若定时到&#xff0c;则停…

【Linux系列】Vim 编辑器中的高效文本编辑技巧:删除操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

大纲笔记幕布的替换

文章目录 前言类似的大纲软件探索 DynalistLogseq通过国内代码仓库建立 Git 仓库Logseq 的使用PC 端安卓端Git 操作Termux git 步骤Termux 的桌面组件&#xff1a;Termux widget 报错参考 前言 之前我一直用幕布&#xff0c;买了三年&#xff0c;奈何要过期了&#xff0c;又三…

STM32-笔记35-DMA(直接存储器访问)

一、什么叫DMA&#xff1f; DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于…

【踩坑】SparkSQL union/unionAll 函数的去重问题

【踩坑】SparkSQL union/unionAll 函数的去重问题 测试数据 case class Employee(first_name:String)val employeeDF1 spark.createDataset(Seq( Employee("Mary"), Employee("Mandy"),Employee("Kurt") )) val employeeDF2 spark.createDat…

allure报告修改默认语言为中文

1、项目根目录创建.py文件&#xff0c;把代码复制进去 import os from pathlib import Pathdef create_settings_js_file(directory"../pytest_mytt/reports/allures/", filenamesettings.js):# 创建或确认目录存在Path(directory).mkdir(parentsTrue, exist_okTrue…

使用frp实现本地内网穿透

环境&#xff1a;linux &#xff08;具有公网ip的线上服务器&#xff09;、windows&#xff08;本地&#xff09;、frp Releases fatedier/frphttps://github.com/fatedier/frp/releases 首先下载下来下面两个文件 概览 | frp一些概述&#xff0c;便于您快速的了解 frp。http…

Cursor无限续杯——解决Too many free trials.

前情提要 我们都知道Cursor对新用户是有14天且500条免费限制的。 一般情况下&#xff0c;当14天过期&#xff0c;是可以注销账户再重新注册&#xff0c;这样就可以继续拥有14天的体验时长。 但是&#xff01;&#xff01;如果使用超过500次&#xff0c;Cusor就会把你的电脑I…

cursor试用出现:Too many free trial accounts used on this machine 的解决方法

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

攻防世界 Web_php_wrong_nginx_config

​ 打开题目地址&#xff0c;显示为登录页面。尝试用御剑扫描一下&#xff0c;发现了admin页面&#xff0c;点进去显示如下 点开控制台&#xff0c;发现如下 isLogin参数为0。尝试抓包并该islogin参数为1&#xff0c;返回依旧不变。 再扫描&#xff0c;发现robots.txt&#xff…

WordPress静态缓存插件WP Super Cache与 WP Fastest Cache

引言 WordPress是一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;最初作为博客平台开发&#xff0c;现已发展成为一个功能强大的建站工具&#xff0c;支持创建各种类型的网站&#xff0c;包括企业网站、在线商店、个人博客等。它具有用户友好的界面、丰富的插…

多模态大模型初探索:通过ollama部署多模态大模型

文章目录 前言模型下载 前言 今天和同事聊天&#xff0c;聊到多模态大模型&#xff0c;感觉可以作为2025年的一个新的探索方向。希望和大家一起学习&#xff0c;一起进步。 今天也是尝试了我能想到的最基本最快速地本地部署多模态大模型的方式&#xff0c;那便是使用ollama。…

【深度学习】布匹寻边【附完整链接】

布匹寻边 项目简介 布匹寻边是指布料裁剪过程中&#xff0c;通过AI寻边技术自动识别布匹的边缘&#xff0c;将检测到的边缘信息输出&#xff0c;确保裁剪的准确性&#xff0c;减少浪费&#xff0c;并提高生产效率。 项目需求 将打满针眼的布匹边缘裁剪掉&#xff0c;且误差小…

scanf:数据之舟的摆渡人,静卧输入港湾的诗意守候

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节我们主要来学习scanf的基本用法&#xff0c;了解scanf返回值&#xff0c;懂得scanf占位符和赋值…