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

news/2025/1/11 20:31:59/

        在当今这个云计算技术迅猛发展的时代,企业面临着前所未有的挑战与机遇。随着云基础设施的日益复杂化,它们成为了企业运营不可或缺的支柱。网站可靠性工程师(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让开发和评估您的代理变得特别简单。您只需要3个简单的步骤就能把您的代理接入AIOpsLab

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

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

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

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

from aiopslab.orchestrator import Orchestratoragent = 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 Applicationclass 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 Wrkwrk = 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.ppmy.cn/news/1561890.html

相关文章

时序数据库对比

优劣势对比 数据库优势 劣势InfluxDB使用广泛&#xff0c;生态完备&#xff0c;社区活跃集群版本闭源TDengine性能好&#xff0c;集群版本免费&#xff0c;内置流式计算&#xff0c;社区活跃 不支持 Prometheus 的 Query 类接口 M3DB完全开源架构复杂&#xff0c;资源占…

ios越狱脚本巨魔商店安装教程

使用爱思助手安装 安装爱思助手&#xff1a;在电脑上安装 iTunes 和爱思助手&#xff0c;并使用 Apple ID 登录2。 IPA 签名&#xff1a;打开爱思助手&#xff0c;选择工具箱中的 IPA 签名。点击添加 IPA 文件&#xff0c;选择下载的 TrollInstallerX.ipa 文件。选择使用 Apple…

Pytorch单、多GPU和CPU训练模型保存和加载

Pytorch多GPU训练模型保存和加载 在多GPU训练中&#xff0c;模型通常被包装在torch.nn.DataParallel或torch.nn.parallel.DistributedDataParallel中&#xff0c;这会在模型的参数名前加上module前缀。因此&#xff0c;在保存模型时&#xff0c;需要使用model.module.state_di…

vulnhub靶场【DC系列】之6

前言 靶机&#xff1a;DC-6&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用VMWare&#xff0c;网卡为桥接模式 对于文章中涉及到的靶场以及工具&#xff0c;我放置在网盘中&#xff0c;链接&#xff1a;https://pan.quark…

碰一碰发视频的剪辑功能开发的细节源码搭建,支持OEM

在短视频盛行的今天&#xff0c;为碰一碰发视频增添剪辑功能&#xff0c;能极大提升用户创作的灵活性与趣味性。下面将详细阐述这一功能从技术选型到源码搭建的全过程。 一、技术选型 前端 框架&#xff1a;选择 React 作为前端框架&#xff0c;其基于组件化的开发模式&#x…

借助免费GIS工具箱轻松实现las点云格式到3dtiles格式的转换

在当今数字化浪潮下&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术日新月异&#xff0c;广泛渗透到城市规划、地质勘探、文化遗产保护等诸多领域。而 GISBox 作为一款功能强大且易用的 GIS 工具箱&#xff0c;以轻量级、免费使用、操作便捷等诸多优势&#xff0c;为…

2024信息安全网络安全等安全意识(附培训PPT下载)

信息安全和网络安全是现代社会中至关重要的领域&#xff0c;它们涉及保护数据、系统和网络免受未经授权的访问、破坏和滥用。以下是一些关键的安全意识和概念&#xff1a; 信息安全意识 数据保护&#xff1a;意识到个人和组织数据的敏感性和价值&#xff0c;采取措施保护数据…

【MySQL实战】Centos安装MySQL

在CentOS上安装MySQL以及进行性能分析&#xff1a;2种方式&#xff0c;第一种直接装&#xff1b;第二种用docker安装&#xff1a; 直接安装MySQL 首先&#xff0c;更新系统软件包列表&#xff1a; sudo yum update然后&#xff0c;安装MySQL服务器&#xff1a; sudo yum in…