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

在当今这个云计算技术迅猛发展的时代,企业面临着前所未有的挑战与机遇。随着云基础设施的日益复杂化,它们成为了企业运营不可或缺的支柱。网站可靠性工程师(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:
    # <您的代理逻辑在这里>

  2. 把您的代理注册到AIOpsLab:现在您可以把代理注册到AIOpsLab的协调器中。协调器会管理您的代理和环境之间的互动:

    from aiopslab.orchestrator import Orchestrator

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

  3. 在问题上评估您的代理

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

    problem_desc, instructs, apis = orch.init_problem("k8s_target_port-misconfig-mitigation-1")

  4. 设置代理上下文:用问题描述、指令和可用的API来为您的代理设置上下文。(这一步取决于您的代理设计,留给用户自己来)

  5. 开始问题 :通过调用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

  2. 定义 。要定义一个问题,创建一个从您选择的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):
         # <您的评估逻辑在这里>
    
  3. 注册。最后,把您的问题添加到协调器的注册表中。

  • 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

相关推荐
桂月二二18 分钟前
利用ChatGPT API构建智能应用的最佳实践
人工智能·chatgpt
科技与数码2 小时前
倍思氮化镓充电器分享:Super GaN伸缩线快充35W
人工智能·神经网络·生成对抗网络
HUIBUR科技4 小时前
量子计算遇上人工智能:突破算力瓶颈的关键?
人工智能·量子计算
CES_Asia4 小时前
CES Asia 2025聚焦量子与空间技术
人工智能·科技·数码相机·金融·量子计算·智能手表
程序猿阿伟4 小时前
《量子比特:解锁人工智能并行计算加速的密钥》
人工智能·量子计算
来瓶霸王防脱发5 小时前
【C#深度学习之路】如何使用C#实现Yolo5/8/11全尺寸模型的训练和推理
深度学习·yolo·机器学习·c#
music&movie5 小时前
代码填空任务---自编码器模型
python·深度学习·机器学习
盖丽男5 小时前
机器学习的组成
人工智能·机器学习
风一样的树懒6 小时前
Python使用pip安装Caused by SSLError:certificate verify failed
人工智能·python
9命怪猫6 小时前
AI大模型-提示工程学习笔记5-零提示
人工智能·笔记·学习·ai·提示工程