跨境团队普遍头疼的一个问题:晚上欧美在跑、白天东南亚在跑,没人有完整的 24 小时窗口看着站点健康。出了证书过期、磁盘打满、回源 5xx,往往要等用户投诉才发现。
本案例把 boltctl 的 ops 插件做成一条 Recipe,每 30 分钟跑一轮,把巡检结果按严重级别分流到 Slack/邮件/飞书。
业务挑战
- 5 个独立站点(Magento + Shopify + WordPress)跨 Cloudflare、AWS、GCP 三朵云。
- 历史告警来自 Zabbix、UptimeRobot、各 PaaS 控制台 4-5 套,没人能给出统一健康视图。
- SSL 证书续期靠人脑记 —— 上次大促前一天才发现
api.shop.com的证书 3 天后到期。 - 半夜出 5xx 等到早班同学开机才处理,每次平均损失 3-5 小时高质量流量。
解决方案
把巡检拆成三层,每层用 boltctl 既有命令,AI Agent 编排:
| 层级 | 工具 | 触发 |
|---|---|---|
| L0 探活 | ops cf zones list + ops cf pages status | 每 5 分钟 |
| L1 健康 | ops cert check、ops dns resolve、ops capacity report | 每 30 分钟 |
| L2 处置 | ops cert renew(dry-run → confirm-token)、ops cache purge | 仅人工授权 |
L0/L1 全部走 --dry-run + JSON envelope,永不产生上游写;只有 L2 在 Agent 拿到 issued_token 后才真跑,并自动落 audit。
boltctl 命令演示
每 30 分钟跑一次的 Recipe:
boltctl recipe run site-health-pulse \
--param site=acme-global \
--param notify=slack:#ops-alertsRecipe 内部展开:
# step 1: 全局事实摘要
boltctl ops --output json site facts --site acme-global
# step 2: SSL/DNS 巡检(所有 zone 并发)
boltctl ops --output json cert check --site acme-global --days-ahead 14
boltctl ops --output json dns resolve --site acme-global --record-types A,CNAME
# step 3: 回源健康 & 缓存命中率
boltctl ops --output json edge stats --site acme-global --window 30m
# step 4: 异常时把摘要丢给 notify adapter
boltctl ops notify send --channel slack:#ops-alerts --severity warn --payload @-收益与指标
- MTTD 从 ~4h 降到 < 8 min:5xx 异常在第二轮 L0 探活就出告警。
- SSL 0 失约:14 天前提醒、3 天前自动尝试续期 dry-run,过期事故归零。
- 告警噪声 -62%:JSON envelope 带
severity+next_action,Agent 端做二级聚合,重复告警自动折叠。 - 人力:值班轮转从 3 人 oncall 砍到 1 人 review daily report。
复用建议
- 想把 Recipe 跨多站复用,不要把 site 名硬编码进 step —— 用
--param site=暴露出来,agent 端在多账号并行调度时只换 param。 - L2 写命令要
--reason "scheduled_cert_renew",便于在state/ops/audit.ndjson区分自动续签和手动操作。 - Notify adapter 建议同时开
email:和slack:两个 channel —— Slack 抖动时邮件兜底,避免单通道静默失败。