金丝雀哨兵——部署后监控 是做什么的?
何时使用
- 部署到生产或预发布环境后
- 合并有风险的 PR 后
- 验证修复是否真正生效时
- 在发布窗口期间持续监控
- 依赖升级后
工作原理
监控已部署的 URL 是否存在回归问题。循环运行,直到用户停止或监控窗口过期。
监控内容
1. HTTP 状态——页面是否返回 200?
2. 控制台错误——是否存在之前没有的新错误?
3. 网络故障——API 调用失败、5xx 响应?
4. 性能——LCP/CLS/INP 与基线相比是否退化?
5. 内容——关键元素是否消失?(h1、nav、footer、CTA)
6. API 健康——关键端点是否在 SLA 内响应?
7. 静态资源——JS、CSS、图片和字体请求是否返回 2xx/3xx 状态码以及预期的内容类型?
8. SSE 流——事件流端点能否连接并收到初始事件或心跳?
监控模式
快速检查(默认):单次执行,报告结果
/canary-watch https://myapp.com
持续监控:每隔 N 分钟检查一次,持续 M 小时
/canary-watch https://myapp.com --interval 5m --duration 2h
差异模式:比较预发布与生产环境
/canary-watch --compare https://staging.myapp.com https://myapp.com
告警阈值
critical: # 立即告警
- HTTP 状态 != 200
- 控制台错误数 > 5(仅新错误)
- LCP > 4s
- API 端点返回 5xx
- 静态资源返回 4xx/5xx
- SSE 端点无法连接或在收到首跳心跳前断开
warning: # 在报告中标记
- LCP 相比基线增加 > 500ms
- CLS > 0.1
- 新的控制台警告
- 响应时间 > 基线 2 倍
- 静态资源内容类型意外改变
- SSE 心跳延迟 > 基线 2 倍
info: # 仅记录日志
- 轻微性能波动
- 新的网络请求(添加了第三方脚本?)
通知
当触发关键阈值时:
- 桌面通知(macOS/Linux)
- 可选:Slack/Discord webhook
- 记录到
~/.claude/canary-watch.log
输出
## 金丝雀报告——myapp.com——2026-03-23 03:15 PST
### 状态:正常 ✓
| 检查项 | 结果 | 基线 | 变化量 |
|--------|------|------|--------|
| HTTP | 200 ✓ | 200 | — |
| 控制台错误 | 0 ✓ | 0 | — |
| LCP | 1.8s ✓ | 1.6s | +200ms |
| CLS | 0.01 ✓ | 0.01 | — |
| API /health | 145ms ✓ | 120ms | +25ms |
| 静态资源 | 42/42 ✓ | 42/42 | — |
| SSE /events | 已连接 ✓ | 已连接 | +80ms 心跳 |
### 未检测到回归问题。部署成功。
集成
配合使用:
/browser-qa用于部署前验证- Hooks:添加为
git push上的 PostToolUse hook,以便在部署后自动检查 - CI:在 GitHub Actions 的部署步骤后运行