AI驱动的微服务故障根因分析技能,通过系统化的遥测数据分析流程,精准定位故障根本原因
本技能是一个系统化的故障根因诊断框架,通过分析微服务系统的遥测数据(指标、链路追踪、日志),遵循科学的方法论定位故障根本原因。
本技能基于以下核心分析方法论:
目标:建立分析基础,了解数据全貌
目标:识别偏离正常范围的异常数据点
rr(请求成功率)异常下降sr(服务成功率)异常下降mrt(平均响应时间)异常上升目标:将离散异常点聚合为连续故障事件
目标:从多个故障事件中确定根本原因
场景 A:不同层级存在故障
场景 B:同层级多个故障组件
场景 C:单组件单 KPI 故障
调用链解析规则:
根因判定规则:
日志分析要点:
日志关联规则:
| 规则 | 说明 |
|---|---|
| 全局阈值计算 | 使用完整历史数据计算阈值,禁止使用过滤后数据 |
| 时区统一 | 所有时间处理使用 UTC+8 时区 |
| 指标优先 | 首先使用指标缩小搜索范围,再分析 trace 和 log |
| 链路定向 | 同层级多故障使用链路追踪定位最下游故障组件 |
| 交叉验证 | 使用 trace 和 log 交叉验证根因推断 |
| 数据溯源 | 所有结论必须有数据支撑,禁止臆测 |
| 禁止项 | 原因 |
|---|---|
| 可视化绘图 | 环境不支持 matplotlib/seaborn,只能文本输出 |
| 本地存储 | 禁止将数据写入本地文件系统 |
| 假设数据 | 不假设任何未知变量或数据存在 |
| 误判健康 | 不将健康组件错误识别为根因 |
| 忽略信息日志 | 日志分析时不仅看 ERROR,INFO 也可能有价值 |
| 后置阈值 | 禁止在过滤时间段后计算阈值 |
# 正确做法:使用完整数据计算全局阈值
df_full = pd.read_csv('metric_container.csv')
threshold = df_full['value'].quantile(0.95)
# 错误做法:使用过滤后数据计算阈值
df_filtered = df_full[df_full['timestamp'] >= start_time]
threshold = df_filtered['value'].quantile(0.95) # 错误!
import pytz
from datetime import datetime
# 统一使用 UTC+8 时区
tz = pytz.timezone('Asia/Shanghai')
# 秒级时间戳转换
dt = datetime.fromtimestamp(timestamp_seconds, tz=tz)
# 毫秒级时间戳转换
dt = datetime.fromtimestamp(timestamp_ms / 1000, tz=tz)
不同场景的组件标识格式不同,需根据场景规格文档解析:
Tomcat01, Mysql01os_001, docker_001, db_001node-1.adservice-0, adservice-grpc根因定位信息
分析思路流程图
证据链
支持以下图表类型(使用 vis-chart 标签):
本技能通过 scene 参数动态加载对应场景的规格文档:
specs/
├── bank_spec.md # 银行场景规格
├── telecom_spec.md # 电信场景规格
└── market_spec.md # 电商场景规格
场景规格文档包含:
输入参数:
scene: bank
question: "2021-03-05 02:00 到 03:00 期间,系统成功率下降到 50% 以下,请分析根因"
诊断流程:
1. 加载 bank_spec.md 获取场景规格
2. 探索数据目录,识别可用数据
3. 计算各 KPI 全局阈值
4. 过滤故障时间窗口数据
5. 检测异常组件和 KPI
6. 分析链路追踪定位根因
7. 交叉验证日志信息
8. 生成诊断报告
| 版本 | 日期 | 更新内容 |
|---|---|---|
| 1.0 | 2024-01 | 初始版本,支持标准化故障诊断流程 |