HCY Blog

AIOPSLAB 项目学习

微软 AIOpsLab 项目为根因分析提供了清晰的设计模式,将任务拆解为结构化步骤,并通过中间件封装真实服务器数据,转化为 Agent 易读的 CSV 格式。

AIOPSLAB 项目学习

AIOpsLab 项目在根因分析(RCA)的设计和真实数据处理上有一套非常清晰的模式,非常适合你借鉴。

针对你的两个核心问题(根因分析怎么做、如何处理真实服务器数据),我为你总结了以下关键点:

1. 根因分析 (RCA) 是如何实现的?

AIOpsLab 将根因分析拆解为标准的 Task(任务)Action(动作) 模式。

  • 任务定义 (AnalysisTask):

    • 目标: Agent 需要分析出两个核心要素:system_level(故障层级,如应用层、虚拟化层、硬件层)和 fault_type(故障类型,如配置错误、代码缺陷、网络问题)。
    • 流程:
      1. Prompt: 给 Agent 一个初始提示,包含服务架构摘要 (app_summary) 和任务目标。
      2. 交互: Agent 可以自由调用工具(查日志、查指标、查链路)来收集信息。
      3. 提交: Agent 最终调用 submit() 函数提交分析结果。
    • 代码参考: analysis.py
  • 定位任务 (LocalizationTask):

    • 这是一个更简单的子任务,目标是找出哪个服务出问题了。
    • Agent 提交的是一个服务名称列表(例如 ['user-service'])。
    • 代码参考: localization.py
  • 借鉴建议:

    • 结构化输出: 不要让 Agent 随便回答一段话。强制要求 Agent 输出结构化的 JSON 或调用特定的 submit 函数(如 submit(system_level="Application", fault_type="Misconfig"))。这样你才能用你的静态数据集标签进行自动化评估。
    • 分步引导: AIOpsLab 将任务细分为检测、定位、分析、缓解。你可以先让 Agent 做“定位”(哪个服务器/服务坏了),再做“分析”(为什么坏了),降低单次推理的复杂度。

2. 如何处理真实服务器数据?

AIOpsLab 并没有让 Agent 直接去写 PromQL 或 SQL 查库,而是封装了一层 中间件 (Observer),将复杂的监控数据转化为 Agent 易读的格式(主要是 CSV 和 文本)。

  • 架构模式:

    • 底层: 使用标准的云原生监控栈(Prometheus 存指标,Jaeger 存链路,ELK/Filebeat 存日志)。
    • 中间层 (API): 编写 Python 类 (PrometheusAPI, TraceAPI) 负责与底层工具通信。
    • 上层 (Agent): Agent 只能看到封装好的工具,如 get_metrics(), get_logs()
  • 具体实现细节:

    • 指标 (Metrics):
      • PrometheusAPI 通过 kubectl port-forward 连接到 Prometheus。
      • 它查询指定时间窗口的数据,然后转换成 CSV 文件保存到本地。
      • Agent 读取这个 CSV 文件进行分析。
      • 代码参考: metric_api.py
    • 链路 (Traces):
      • TraceAPI 连接 Jaeger,拉取 Trace JSON 数据。
      • 它将复杂的 JSON 树打平成 DataFrame(包含 trace_id, span_id, service_name, duration, error 等字段),并保存为 CSV。
      • 代码参考: trace_api.py
    • 日志 (Logs):
      • 直接调用 kubectl logs 获取原始文本。
      • 关键点: 做了一个 greedy_compress_lines (贪婪压缩) 处理。如果日志大量重复(例如报错刷屏),它会压缩重复行,防止 Token 爆炸。
      • 代码参考: base.py
  • 对你的借鉴 (静态数据集场景):

    • 模拟真实接口: 既然你用的是静态数据集,你可以写一个 Mock API
      • 定义一个 get_metrics(service_name, time_window) 函数。
      • 在这个函数内部,不是去查 Prometheus,而是去你的静态 CSV/Parquet 文件里切片数据。
      • 好处: 你的 Agent 代码逻辑可以和处理真实服务器完全一样。未来如果你要接真实环境,只需要把底层的 Mock API 换成真的 Prometheus API,Agent 逻辑不需要改。
    • 文件交换模式: 学习 AIOpsLab 的做法,对于大量数据(指标/链路),不要直接把数据塞进 Prompt。而是让工具返回一个文件路径,然后让 Agent 写代码(Python Pandas)去分析这个文件,或者只读取文件的头部/统计信息。

总结

微软 AIOpsLab 的核心思路是 “工具化”“中间层封装”。它把运维操作变成了 Agent 可以调用的 Python 函数,把复杂的监控数据变成了标准化的 CSV 文件。这对于多智能体协作非常友好,因为不同的 Agent 可以基于统一的数据格式进行交流。