AIOPSLAB 项目学习
微软 AIOpsLab 项目为根因分析提供了清晰的设计模式,将任务拆解为结构化步骤,并通过中间件封装真实服务器数据,转化为 Agent 易读的 CSV 格式。
目录
AIOPSLAB 项目学习
AIOpsLab 项目在根因分析(RCA)的设计和真实数据处理上有一套非常清晰的模式,非常适合你借鉴。
针对你的两个核心问题(根因分析怎么做、如何处理真实服务器数据),我为你总结了以下关键点:
1. 根因分析 (RCA) 是如何实现的?
AIOpsLab 将根因分析拆解为标准的 Task(任务) 和 Action(动作) 模式。
-
任务定义 (
AnalysisTask):- 目标: Agent 需要分析出两个核心要素:
system_level(故障层级,如应用层、虚拟化层、硬件层)和fault_type(故障类型,如配置错误、代码缺陷、网络问题)。 - 流程:
- Prompt: 给 Agent 一个初始提示,包含服务架构摘要 (
app_summary) 和任务目标。 - 交互: Agent 可以自由调用工具(查日志、查指标、查链路)来收集信息。
- 提交: Agent 最终调用
submit()函数提交分析结果。
- Prompt: 给 Agent 一个初始提示,包含服务架构摘要 (
- 代码参考: analysis.py
- 目标: Agent 需要分析出两个核心要素:
-
定位任务 (
LocalizationTask):- 这是一个更简单的子任务,目标是找出哪个服务出问题了。
- Agent 提交的是一个服务名称列表(例如
['user-service'])。 - 代码参考: localization.py
-
借鉴建议:
- 结构化输出: 不要让 Agent 随便回答一段话。强制要求 Agent 输出结构化的 JSON 或调用特定的
submit函数(如submit(system_level="Application", fault_type="Misconfig"))。这样你才能用你的静态数据集标签进行自动化评估。 - 分步引导: AIOpsLab 将任务细分为检测、定位、分析、缓解。你可以先让 Agent 做“定位”(哪个服务器/服务坏了),再做“分析”(为什么坏了),降低单次推理的复杂度。
- 结构化输出: 不要让 Agent 随便回答一段话。强制要求 Agent 输出结构化的 JSON 或调用特定的
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
- 直接调用
- 指标 (Metrics):
-
对你的借鉴 (静态数据集场景):
- 模拟真实接口: 既然你用的是静态数据集,你可以写一个 Mock API。
- 定义一个
get_metrics(service_name, time_window)函数。 - 在这个函数内部,不是去查 Prometheus,而是去你的静态 CSV/Parquet 文件里切片数据。
- 好处: 你的 Agent 代码逻辑可以和处理真实服务器完全一样。未来如果你要接真实环境,只需要把底层的 Mock API 换成真的 Prometheus API,Agent 逻辑不需要改。
- 定义一个
- 文件交换模式: 学习 AIOpsLab 的做法,对于大量数据(指标/链路),不要直接把数据塞进 Prompt。而是让工具返回一个文件路径,然后让 Agent 写代码(Python Pandas)去分析这个文件,或者只读取文件的头部/统计信息。
- 模拟真实接口: 既然你用的是静态数据集,你可以写一个 Mock API。
总结
微软 AIOpsLab 的核心思路是 “工具化” 和 “中间层封装”。它把运维操作变成了 Agent 可以调用的 Python 函数,把复杂的监控数据变成了标准化的 CSV 文件。这对于多智能体协作非常友好,因为不同的 Agent 可以基于统一的数据格式进行交流。