引言

上一篇文章中,我们介绍了 OpenSRE 的安装与基础用法。本文将深入探讨三个实战核心话题:如何高效使用 OpenSRE 进行生产故障排查使用过程中的关键注意事项,以及如何理解和运用它生成的调查报告

项目地址:GitHub - Tracer-Cloud/OpenSRE

阅读本文需要你已经完成 opensre onboard 初始化配置。如果还没有,请先参考上一篇安装指南。


一、交互式 Shell 深度使用

1.1 会话管理

启动 OpenSRE 交互式 Shell(需要 TTY 终端):

opensre

进入后在提示符下直接描述故障现象,OpenSRE 会自动拉取关联数据并启动调查。关键命令:

命令 作用 使用场景
/help 查看完整帮助 忘记命令时
/status 查看当前调查状态 调查中途确认进度
/clear 清屏 输出过多时
/reset 重置会话 开始新的独立调查
/trust 启用信任模式 允许执行修复动作
/effort low|medium|high|xhigh|max 调推理深度 控制 AI 思考深度与成本
/exit 退出 结束会话

1.2 /effort 推理深度详解

这是影响调查质量和成本的关键参数,仅对 OpenAI 和 Codex 提供商生效:

/effort low      # 快速排查,适合已知模式的简单告警
/effort medium # 默认级别,平衡速度与深度
/effort high # 复杂故障,需要跨系统关联分析
/effort xhigh # 根因模糊、涉及多层依赖的疑难杂症
/effort max # 极限推理,最大程度挖掘关联线索

建议策略:

  • 初次调查用 medium,先看全局
  • 根因不明确时升级到 high
  • 生产 P0 事故直接 xhighmax
  • 日常巡检/已知问题用 low

1.3 使用技巧

逐步聚焦法: 不要在第一条消息里把所有信息塞进去。先描述告警现象 → 让 OpenSRE 拉取上下文 → 根据初步发现追问 → 逐步收敛到根因。这比一次性大段描述效果好得多。

善用 Ctrl+C 如果当前调查方向不对,直接按 Ctrl+C 取消——不会丢失会话状态,你可以立即调整描述重新开始。


二、单次调查模式

2.1 基本用法

直接对告警文件执行一次性调查(无需进入交互式 Shell):

opensre investigate -i <告警JSON文件路径>

OpenSRE 内置了大量测试用例,可以用来快速验证环境:

# Kubernetes 告警场景
opensre investigate -i tests/e2e/kubernetes/fixtures/datadog_k8s_alert.json

# RDS Postgres 合成场景
opensre investigate -i tests/synthetic/rds_postgres/fixtures/alert.json

2.2 告警文件格式

告警文件是 JSON 格式,OpenSRE 会解析其中的关键字段来启动调查。一个典型的告警文件结构:

{
"title": "CPU throttling detected on payment-service",
"severity": "critical",
"service": "payment-service",
"environment": "production",
"metrics": {
"cpu_throttle_pct": 85,
"memory_usage_mb": 2048
},
"timeframe": "last 15 minutes",
"links": {
"dashboard": "https://grafana.example.com/d/...",
"runbook": "https://wiki.example.com/runbooks/payment-cpu"
}
}

关键在于提供足够上下文:受影响的 服务名环境标识关键指标异常值时间窗口。Runbook 链接尤其重要——OpenSRE 会读取并应用其中的排查步骤。


三、排查方法论

3.1 OpenSRE 的排查流程

当告警触发时,OpenSRE 自动执行以下流程:

flowchart TD
A[📨 收到告警] --> B[🔍 提取告警上下文]
B --> C{连接可观测性平台}
C --> D1[拉取关联日志]
C --> D2[拉取关联指标]
C --> D3[拉取链路追踪]
D1 --> E[🧠 跨系统推理]
D2 --> E
D3 --> E
E --> F[📋 匹配 Runbook 步骤]
F --> G[📊 生成根因假设]
G --> H{假设验证}
H -->|证据充分| I[📝 生成调查报告]
H -->|证据不足| J[深入拉取更多数据]
J --> G
I --> K[📤 推送到 Slack/PagerDuty]

3.2 典型排查场景

场景一:Kubernetes Pod CPU 限流

现象: payment-service Pod 持续触发 CPU throttling 告警。

在交互式 Shell 中的排查思路:

> payment-service 在过去 15 分钟内 CPU throttling 达到 85%,
这个服务部署在 Kubernetes production 集群,请帮我排查根因

← OpenSRE 拉取 K8s metrics、Pod 日志、相关 Deployment 配置

> 看看同一时间段内有没有相关的 deployment 变更记录

← OpenSRE 查询 GitOps/ArgoCD 变更历史

> 对比 throttling 开始前后的 HPA 缩放事件

← OpenSRE 分析 HPA 行为和资源配额

关键操作:

  • 先让 OpenSRE 拉取关联数据,不要跳过这一步
  • 根据初步发现引导下一步方向(变更?流量尖峰?资源泄漏?)
  • 要求对比分析(变更前后、不同 Pod 之间)

场景二:数据库响应延迟

现象: RDS PostgreSQL 查询延迟从 50ms 飙升至 2s。

排查策略:

> production 环境 RDS PostgreSQL 主库查询延迟从 50ms 升到 2s,
时间范围:最近 30 分钟,请分析可能原因

← OpenSRE 拉取 RDS metrics、慢查询日志、连接数

> 检查是否有锁等待或长事务

← OpenSRE 查询 pg_stat_activity、锁信息

> 对比延迟上升前后的查询模式变化

注意: OpenSRE 在数据库场景下会连接你配置的数据库实例。确保相关凭证已在 onboard 时配置好。

3.3 排查最佳实践

1. 时间窗口要精确
不要说 “最近出问题了”,要说 “过去 30 分钟内”,让 OpenSRE 能精确限定数据拉取范围。

2. 提供环境和服务名
“staging 环境的 recommendation-service” 远比 “有个服务挂了” 有效。

3. 给出已知指标异常值
如果你已经在 Grafana/Datadog 上看到了具体异常指标,直接告诉 OpenSRE,可以加速定位。

4. 分步推进,不要一次给太多
让 AI 先看全局再深入局部,保持单轮信息量适中。这是 LLM 交互的黄金法则。


四、部署进阶与注意事项

4.1 部署方案对比

维度 LangGraph Platform(推荐) Railway(自托管) 本地模式
适用场景 生产环境 中小团队自托管 个人开发/测试
运维复杂度 极低
可扩展性 受限
成本 按量付费 固定成本 仅本地算力
Postgres/Redis 平台托管 需自行配置 不需要

4.2 环境变量配置详解

核心环境变量(按优先级排列):

# === 必备:LLM 配置 ===
export LLM_PROVIDER=anthropic # anthropic | openai | gemini | openrouter | ollama
export ANTHROPIC_API_KEY=sk-ant-xxx # 对应提供商的 API Key

# === 部署模式 ===
export OPENSRE_DEPLOYMENT_METHOD=local # local | railway | langsmith

# === 可观测性集成(按需配置)===
# Datadog
export DATADOG_API_KEY=xxx
export DATADOG_APP_KEY=xxx

# Grafana
export GRAFANA_URL=https://grafana.example.com
export GRAFANA_API_KEY=xxx

# AWS
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_DEFAULT_REGION=us-east-1

# Slack 通知
export SLACK_BOT_TOKEN=xoxb-xxx
export SLACK_CHANNEL=#incidents

# === 数据库/Redis(Railway 部署必须)===
export DATABASE_URI=postgresql://user:pass@host:5432/opensre
export REDIS_URI=redis://user:pass@host:6379

# === 遥测控制 ===
export OPENSRE_NO_TELEMETRY=1 # 完全关闭遥测
# 或分别控制:
export OPENSRE_ANALYTICS_DISABLED=1 # 仅关闭 PostHog 分析
export OPENSRE_SENTRY_DISABLED=1 # 仅关闭 Sentry 错误报告

4.3 关键注意事项

⚠️ 安全注意事项

  1. API Key 管理: 使用环境变量或密钥管理服务,绝对不要硬编码在代码或配置文件中提交到 Git
  2. 信任模式风险: /trust 命令允许 OpenSRE 执行修复动作,仅在确认环境隔离且评估风险后使用
  3. 数据传输: OpenSRE 默认将对话记录保存在本地。部署到 LangGraph/Railway 时,确保传输通道加密
  4. 敏感信息: 告警文件不要包含明文密码或 token。OpenSRE 的遥测会主动过滤敏感字段

⚠️ 集成注意事项

  1. 权限最小化: 给 OpenSRE 配置的 API Key/Service Account 应该只有只读权限(除非需要自动修复)
  2. 网络连通性: 确保 OpenSRE 所在环境能访问所有集成的可观测性平台(Grafana、Datadog、CloudWatch 等)
  3. 速率限制: 大量告警时注意 LLM API 的速率限制。建议配置合理的告警聚合策略
  4. Kubernetes RBAC: 如果连接 K8s 集群,使用只读 ServiceAccount,限制 namespace 范围

⚠️ 版本注意事项

  1. Public Alpha 状态: API 和集成接口可能发生变化,升级前查看 Changelog
  2. --main 分支风险: 从 main 分支安装可能包含未充分测试的功能,生产环境建议用稳定版
  3. 更新前备份: 执行 opensre update 前,考虑备份 ~/.config/opensre/ 目录

五、调查报告解读

5.1 报告结构

OpenSRE 生成的调查报告通常包含以下部分:

📊 INVESTIGATION REPORT
========================

1. EXECUTIVE SUMMARY(执行摘要)
- 事故级别、影响范围、持续时间
- 根因一句话总结

2. TIMELINE(时间线)
- 告警触发时间
- 各系统异常时间点
- 关键事件序列

3. EVIDENCE(证据链)
- 异常日志片段
- 指标异常截图/数据
- 链路追踪中的异常 Span
- 配置变更记录

4. ROOT CAUSE ANALYSIS(根因分析)
- 直接原因
- 间接原因(配置、容量、代码缺陷)
- 触发条件

5. IMPACT ASSESSMENT(影响评估)
- 受影响的服务和用户
- 业务指标变化

6. REMEDIATION(修复建议)
- 立即修复步骤
- 长期改进建议

7. RELATED RESOURCES(相关资源)
- Dashboard 链接
- Runbook 引用
- 历史相似事件

5.2 如何阅读报告

第一步:看 Executive Summary(30 秒)

快速判断事故严重程度和大致方向。如果摘要里出现了 “root cause identified” 且证据充分,可以跳到修复建议。如果是 “inconclusive”,需要继续往下看。

第二步:核查 Timeline(2 分钟)

时间线是你验证结论的关键工具。问自己:

  • 告警时间是否与你已知的变更时间匹配?
  • 是否存在级联效应(服务 A 异常 → 服务 B 异常)?
  • 时间窗口是否合理?

第三条:审阅 Evidence(5 分钟)

这是最重要的环节。不要盲信 AI 的结论——亲自检查:

  • 日志片段是否来自正确的服务和时间窗口?
  • 指标异常是否真的存在,还是噪声?
  • 链路追踪的异常 Span 是否确实是根因而非症状?
  • 配置变更记录是否与实际运维操作一致?

第四步:评估根因可信度(3 分钟)

评估标准:

  • 高可信度: 有直接日志证据 + 指标拐点对齐 + 变更记录匹配
  • ⚠️ 中可信度: 有间接证据但缺少直接日志,或有多个可能的根因并列
  • 低可信度: 证据稀疏,主要是推理而非实证,标记为 “inconclusive”

5.3 报告输出与分享

OpenSRE 支持将报告推送到协作工具:

# 配置 Slack 通知后,调查完成自动推送
export SLACK_BOT_TOKEN=xoxb-xxx
export SLACK_CHANNEL=#incidents

手动分享建议:

  • 事故复盘会:直接用报告的时间线和证据链作为讨论基础
  • Postmortem 文档:在报告基础上补充人工判断和决策过程
  • 知识沉淀:将报告关联的 Runbook 更新到 Wiki,形成正向循环

六、常见问题排查

6.1 安装问题

问题 排查方法
安装脚本报错 检查网络代理设置;确认 curl 版本 ≥ 7.x
Homebrew 找不到 tap brew update,确保 brew 版本最新
opensre: command not found 检查 PATH 是否包含安装目录,重启终端
make: command not found brew install make (macOS)

6.2 运行时问题

问题 排查方法
Docker 未运行 启动 Docker Desktop / OrbStack / Colima
LLM 连接失败 检查 API Key 是否正确,网络是否能访问 API 端点
集成工具连接超时 确认目标服务 URL 和凭证正确,检查防火墙
调查结果不准确 尝试提高 /effort 级别,或提供更详细的上下文
Railway 部署后一直不健康 确认 DATABASE_URIREDIS_URI 已正确配置

6.3 性能问题

  • 调查耗时过长:降低 /effort 级别,减少关联的数据源数量
  • API 限流:检查 LLM 提供商的速率限制配额,必要时升级套餐
  • 内存占用高:避免同时运行多个调查实例,完成一个再开始下一个

七、遥测与隐私

OpenSRE 默认启用匿名遥测(PostHog 产品分析 + Sentry 错误报告)。

收集什么: 命令使用情况、成功/失败状态、大致的运行时长、CLI/Python/OS/架构信息。不收集告警内容、文件内容、主机名、凭证或 PII。

关闭方式:

# 一行全部关闭
export OPENSRE_NO_TELEMETRY=1

# 仅关闭分析,保留错误报告
export OPENSRE_ANALYTICS_DISABLED=1

# 仅关闭错误报告
export OPENSRE_SENTRY_DISABLED=1

企业环境建议: 生产环境建议设置 OPENSRE_NO_TELEMETRY=1,除非你有审计需求需要保留 Sentry 错误报告。


八、总结

OpenSRE 代表了 AI 运维从「辅助」走向「自主」的重要一步。它的核心价值不在于替代 SRE 工程师,而在于:

  • 缩短 MTTR(平均修复时间): 自动拉取证据、生成假设,把人的精力集中在判断和决策上
  • 标准化排查流程: 每次调查遵循统一方法论,减少凭经验「碰运气」的情况
  • 知识沉淀: 调查报告 + Runbook 引用形成可复用的知识库

使用建议梯度

flowchart LR
A[阶段一:本地体验] --> B[阶段二:单服务接入]
B --> C[阶段三:团队试点]
C --> D[阶段四:生产部署]

A -.- A1[个人开发者\n了解工作流]
B -.- B1[接入 1-2 个服务\n验证效果]
C -.- C1[团队共享经验\n完善 Runbook]
D -.- D1[完整可观测栈\n自动响应告警]

当前项目处于 Public Alpha 阶段,适合早期采用者探索和反馈。随着 API 稳定和集成成熟,它有望成为 AI 驱动 SRE 的事实标准。

参考链接