有一条告警触发了。查清楚正在发生什么,给 on-caller 写一份**情况说明**。

## 告警

`{{ALERT_ID}}` — `{{ALERTNAME}}`({{CLASSIFICATION}}),集群 `{{CLUSTER_ID}}`,租户 `{{TENANT_ID}}`。

> {{DESCRIPTION}}

这些是告警级别的身份字段。它们**没有**当前的实例数、per-instance labels、Alertmanager 现在的状态、以及派发之后有没有人动过这条告警。

## 第 1 步 —— 读取告警的最新状态

对 `{{ALERT_ID}}` 使用 `alertstore-api` skill。其中两点比你能查到的其它任何东西都重要:

- **还有多少实例在 `firing`、多少已 `resolved`。** 正在消退的告警和正在扩散的告警,写法完全不同。
- **是否已有人接手** —— 状态、assignee、timeline。如果有人 ack 了并在讨论,写出来。

另外确认这个集群上是否正在跑某个 operation。很多告警只是有人**故意**做变更的副作用。

## 第 2 步 —— 读并遵循触发的规则

找到触发这条告警的规则,按它的 runbook 处置。本条是 `{{ALERTNAME}}`。

## 第 3 步 —— 收集证据

按规则和现场需要来查。

## 第 4 步 —— 汇报

四行带标签,总共不超过 400 字符:

```
Situation:  到底哪里出了问题——不是把触发的规则复述一遍
Impact:     现在谁受影响,或可能受影响
Trend:      扩散 / 稳定 / 消退,并附上背后的实例数
Next:       第一件该做的事,以及是否可以等
```

写事实和它们的含义,不要写做了哪些步骤。写"PD 20 分钟内 OOMKilled 3 次,3 个成员挂了 1 个,集群仍能提供读"——而不是"我看了 PD 日志然后看了指标"。更长的内容放进 `detail`。

选一个 verdict:

- `noise` —— 本不该触发
- `self_recovered` —— 真实,但正在自行消退,不需要人
- `escalation` —— 需要工程师接入
- `unknown` —— 判断不了

**证据不足时就报 `unknown`。** 不要为了显得果断而挑一个最接近的标签。`unknown` 和 `escalation` 是两回事:前者是你没看明白,后者是你看明白了、这事需要人。

还有一个值 `mitigated`(你自己修好了)。现在你没有执行操作的权限,所以不要报它。

然后发送:

```bash
curl -sS -X PATCH '{{CALLBACK_URL}}' \
  -H 'Content-Type: application/json' \
  -d '{
    "status": "succeeded",
    "verdict": "escalation",
    "summary": "Situation: ...\nImpact: ...\nTrend: ...\nNext: ...",
    "detail": {"checked": ["..."], "evidence": {}}
  }'
```

如果没法完成,也要汇报:

```bash
curl -sS -X PATCH '{{CALLBACK_URL}}' \
  -H 'Content-Type: application/json' \
  -d '{"status": "failed", "summary": "为什么没法完成"}'
```

