当告警响起,OpenSRE 如何自动从 Grafana 拉取日志、指标和链路数据,并在你打开电脑之前完成根因分析?这篇文章带你从头搭建 OpenSRE ↔ Grafana 的连接。

先认识两位主角

OpenSRE

OpenSRE 是 Tracer Cloud 开源的 AI SRE Agent 框架。它的核心思路很简单:把告警调查这件事交给 AI agent

当生产环境告警触发时,OpenSRE 会自动:

  1. 接收告警 — 从 Prometheus Alertmanager、Datadog、Grafana Alerting 等渠道接入
  2. 收集上下文 — 拉取关联日志、指标曲线、调用链、最近部署记录
  3. 多假设并行推理 — 自动形成多个根因假设并逐一验证
  4. 输出报告 — 给出结构化的根因分析 + 建议操作,推送到 Slack / PagerDuty

一句话总结:你起床看到的是结论,不是一堆告警噪音。

Grafana(在 OpenSRE 语境下)

在 OpenSRE 的集成体系里,Grafana 不只是那个画仪表盘的工具,而是作为可观测性数据中枢被接入。OpenSRE 通过 Grafana 的 API 间接访问其背后的三大数据引擎:

组件 用途 对 OpenSRE 的意义
Loki 日志聚合 AI agent 检索异常时间窗口内的日志,快速定位报错堆栈
Mimir 指标存储 查询 CPU / 内存 / QPS 等时序指标,判断是否有资源瓶颈
Tempo 分布式追踪 追踪请求在微服务间的调用链路,找到第一个出错的节点

OpenSRE 目前支持 60+ 工具集成,Grafana 是其中最重要的观测性接入点之一。


第一步:在 Grafana 创建 Service Account Token

OpenSRE 通过 Grafana 的 HTTP API 来查询 Loki / Mimir / Tempo 的数据。因此,你需要在 Grafana 里创建一个 Service Account 并生成令牌。

⚠️ 注意:Service Account 和 API Key 不同。Grafana 已经将 API Key 标记为过时,推荐使用 Service Account Token。

操作步骤

1. 进入 Service Account 管理页面

登录 Grafana → 左侧菜单点击 AdministrationUsers and accessService accounts

2. 新建 Service Account

点击 Add service account,填写 Display name(例如 opensre-agent),点击 Create

命名建议:使用一致的命名规范,如 <应用>-<环境>,方便后续管理多实例。

3. 生成 Token

进入刚创建的 Service Account → 点击 Add service account token → 填写 Token 名称(如 opensre-read-token)→ 可选设置过期时间 → 点击 Generate token

4. 复制并保存 Token

Token 只显示这一次,格式类似 glsa_xxxxxxxxxxxxxxxxxxxxxxxxxxxx。复制后妥善保管。

5. 分配权限

为新创建的 Service Account 分配角色。至少需要:

  • 对 Loki / Mimir / Tempo 数据源的 查询权限datasources:query
  • 对相关 Dashboard 的 读取权限datasources:read

如果使用 Grafana Enterprise,还可以借助 RBAC 实现更精细的权限控制。最简方案是直接赋予 Viewer 角色。


第二步:在 OpenSRE 中配置 Grafana 集成

OpenSRE 的配置有两种路径:**Web UI(企业版)**和 CLI 环境变量,选其一即可。

方式一:Web UI 配置(推荐,适用于团队使用)

  1. 登录 app.tracer.cloud
  2. 进入 IntegrationsGrafana
  3. 填写以下信息:
字段 说明 示例
Name 自定义名称,用于区分多实例 prod-grafana
Endpoint URL Grafana 实例地址 https://grafana.your-company.com
API Key 上一步生成的 Service Account Token glsa_xxxx...
  1. 点击 Save

配置完成后,同一组织下的所有成员都能使用这个集成。

方式二:CLI 环境变量(适用于本地开发 / 单机部署)

如果用的是 opensre CLI 二进制文件,通过环境变量配置:

export GRAFANA_INSTANCE_URL="https://grafana.your-company.com"
export GRAFANA_READ_TOKEN="glsa_xxxx..."
opensre onboard # 或 opensre integrations setup

运行 opensre integrations verify 验证连接是否正常:

opensre integrations verify grafana

多实例配置:生产 / 预发布隔离

实际场景中,一个团队往往有多个 Grafana 实例(生产环境 + 预发布环境)。OpenSRE 支持多实例配置,让 AI agent 在排查不同环境的告警时自动路由到正确的数据源。

环境变量方式

export GRAFANA_INSTANCES='[
{
"name": "prod",
"tags": {"env": "prod"},
"endpoint": "https://prod.grafana.net",
"api_key": "glsa_prod_xxxx"
},
{
"name": "staging",
"tags": {"env": "staging"},
"endpoint": "https://staging.grafana.net",
"api_key": "glsa_staging_xxxx"
}
]'

告警中指定实例

告警载荷可以携带 grafana_instance 字段,OpenSRE 会据此选择对应的实例:

{
"alert_source": "grafana",
"grafana_instance": "staging",
"annotations": {
"summary": "预发布环境订单服务延迟过高",
"description": "P99 延迟超过 2s,持续 5 分钟"
}
}

如果告警未指定实例,OpenSRE 默认使用配置列表中的第一个实例。


OpenSRE 如何使用 Grafana 数据?

连接打通之后,来看看一次完整的自动化排查流程:

告警触发


OpenSRE 接收告警

├── 解析告警元信息(服务名、时间窗口、指标名)

├── 通过 Grafana API 并行查询:
│ ├── Loki:拉取异常时间段的错误日志
│ ├── Mimir:查询相关指标走势(CPU spike?内存泄漏?)
│ └── Tempo:追踪慢请求的完整调用链路

├── 结合其他集成数据:
│ ├── GitHub:检查最近部署 / 配置变更
│ ├── Kubernetes:查看 Pod 状态和事件
│ └── AWS CloudWatch:对比基础设施指标

├── 多假设并行推理 → 确定最可能的根因


生成报告 → 推送到 Slack / PagerDuty

关键设计亮点:

  1. 并行查询 — 不是逐个排查,而是同时拉取日志、指标、链路,大幅缩短调查时间
  2. 证据关联 — 每个结论都附带数据来源,不是凭空猜测
  3. 置信度评估 — AI 会对每个假设给出置信度,低置信度时建议人工介入

实战演示

启动交互式排查

opensre

进入 REPL 后,用自然语言描述问题:

> grafana 告警说 payment-service 的 P99 延迟飙到 3 秒了,帮我查一下

OpenSRE 会:

  1. 自动读取 Grafana 告警规则配置
  2. 查询 Mimir 中 payment-service 的延迟指标
  3. 在 Loki 中搜索对应时间窗口的 ERROR 日志
  4. 通过 Tempo 追踪慢请求链路
  5. 询问你最近有没有部署或配置变更
  6. 给出根因分析

文件式排查

opensre investigate -i alert_payload.json --output rca.json

alert_payload.json 示例:

{
"alert_source": "grafana",
"grafana_instance": "prod",
"title": "payment-service 高延迟",
"severity": "critical",
"service": "payment-service",
"metric": "http_request_duration_seconds_p99",
"threshold": 3.0,
"current_value": 3.8,
"window": "5m"
}

输出文件结构:

theory/hypothesis_1.md   # 假设1:数据库连接池耗尽
theory/hypothesis_2.md # 假设2:上游服务响应变慢
report.md # 最终根因分析报告
rca.json # 结构化机读输出

常见问题排查

Q1: opensre integrations verify grafana 报 401

原因:Token 无效或已过期。

解决

  • 检查 Token 是否完整复制(不要漏掉 glsa_ 前缀)
  • 在 Grafana 中确认 Service Account 未被禁用
  • 如果 Token 过期,重新生成

Q2: 能连接 Grafana,但查不到 Loki / Mimir / Tempo 数据

原因:Service Account 权限不足。

解决

  • 确认 Service Account 至少有 Viewer 角色
  • 检查数据源权限:Grafana → Data Sources → 目标数据源 → Permissions → 确认 Service Account 有 Query 权限
  • 验证命令:用 Token 直接调用 Grafana API 测试
curl -H "Authorization: Bearer glsa_xxxx" \
"https://grafana.example.com/api/datasources"

Q3: 多实例配置不生效

原因:环境变量 GRAFANA_INSTANCES 和本地存储文件 ~/.config/opensre/integrations.json 冲突时,存储文件优先级更高

解决

  • 要么删除存储文件中对应的 Grafana 记录,仅使用环境变量
  • 要么直接在存储文件中配置多实例

最佳实践

  1. Token 最小权限原则 — 只给 Viewer 角色,OpenSRE 只需要读数据
  2. 多实例命名规范 — 使用 prod / staging / dev 等统一标签,方便告警路由
  3. Token 定期轮换 — 建议每 90 天更换一次,可以设置 Service Account Token 的过期时间
  4. 先验证再上线 — 每次修改配置后执行 opensre integrations verify grafana
  5. 告警中携带实例信息 — 多环境场景下,在告警规则里添加 grafana_instance 注解

总结

OpenSRE 接通 Grafana 的精髓只有两步:

  1. 在 Grafana 创建 Service Account Token(30 秒)
  2. 在 OpenSRE 填入 URL + Token(30 秒)

一分钟打通后,这个 AI agent 就拥有了读取你全部日志(Loki)、指标(Mimir)和链路(Tempo)的能力。当告警凌晨响起来,它在你睡着的时候就把根因查好了。

这不是魔法,只是把 SRE 日常的排查动作流程化、并行化,交给了 AI。


参考文档: