petstore-docs/生产监控与告警基线-2026-08-01.md

5.6 KiB
Raw Blame History

宠小它生产监控与告警基线

适用阶段35 家单店试点。阈值是首版基线,上线两周后按真实流量校准。当前仓库只提供健康探针与运行手册;外部监控、日志平台和通知渠道必须在生产发布前实际接入并留证。

1. 监控目标

按优先级守住四件事:

  1. 预约、开始服务、提交报告、打开报告的主链路可用;
  2. 不产生跨店、身份错绑、状态回退、重复报告或容量超卖;
  3. 数据库、上传目录、磁盘、FFmpeg 和 TLS 等运行依赖可用;
  4. 监控本身不泄露密码、手机号、完整 token、微信标识或私密媒体 URL。

2. 健康探针

探针 地址 含义 使用方式
Liveness /actuator/health/liveness JVM/Spring 是否存活 连续失败才重启,避免业务依赖短抖导致重启风暴
Readiness /actuator/health/readiness DB、磁盘、上传目录、FFmpeg/ffprobe 是否可用 非 UP 立即摘流,不把请求送给未就绪实例

生产 show-details=never,公网响应只显示总状态。探针日志不得附环境变量值。petstoreRuntime 结果缓存 30 秒,避免每次 readiness 都启动外部进程。

3. 首版告警阈值

信号 Warning Critical Owner
Readiness 1 次失败 连续 2 次失败或持续 2 分钟 Backend Ops
HTTP 5xx 5 分钟 ≥ 2% 或 ≥ 5 次 5 分钟 ≥ 5% 或 ≥ 20 次 Backend Ops + 业务 owner
API p95 10 分钟 > 1 秒 10 分钟 > 2 秒 Backend Ops
DB 连接池 active/max 持续 5 分钟 > 70% 持续 5 分钟 > 85% 或获取超时 Backend Ops / Data Model
磁盘 可用 < 20% 或 < 20 GB 可用 < 10% 或 < 10 GB Backend Ops
上传失败 10 分钟 ≥ 3 次 10 分钟 ≥ 10 次或连续失败 Report Media Backend
成片失败 30 分钟失败率 ≥ 10% ≥ 20% 或连续 3 个任务失败 Report Media Backend
TLS 距到期 < 21 天 距到期 < 7 天 Backend Ops
主链路人工救援 当日 ≥ 1 次 同类问题当日 ≥ 3 次 Core Flow QA / PM
权限或隐私异常 不设 Warning 任意 1 次即 Critical System Architect / Privacy owner

低流量试点同时看比例和绝对数量,避免一个请求造成噪音;权限、隐私和数据串店不做流量豁免。

4. 应用与业务信号

技术指标

  • 按 endpoint family 聚合请求量、2xx/4xx/5xx、p50/p95/p99不记录 query 中的 token
  • JVM heap、GC pause、线程数、进程重启次数
  • Hikari active/idle/pending/max 和获取连接耗时;
  • 上传目录容量、inode、读写失败
  • FFmpeg/ffprobe 可执行性、成片耗时、失败归类material/service/network/unknown
  • Nginx 499/502/503/504、上游延迟、证书到期
  • 每次发布的 commit、时间、操作者和 readiness 变化标记。

业务漏斗

每天按门店聚合 appointment_created → service_started → service_completed/report_submitted → report_sent → report_opened → lead_submitted → rebooked。试点初期不把业务漏斗波动直接当系统故障,但需检查:

  • 有 done 无报告、报告无客户/作者、重复报告;
  • BusinessEvent 缺失或幂等键重复;
  • 服务时长/预约快照非法、容量超卖;
  • 新报告已提交但长期未确认发送;
  • 已确认发送但长期未打开;
  • FollowUpTask 状态/领取人/终态结果不一致,或 rebooked 未指向同店有效预约及 rebook_created 事实。

发布前的 release-preflight.sh 已覆盖上述可由数据库可靠验证的结构/数据不变量;运行期应每天做等价的只读审计或报表,不自动修复。

5. 日志与隐私

  • 采用结构化字段timestamp、level、traceId、endpoint、status、duration、storeId内部受控
  • 不记录请求/响应全文不记录密码、验证码、AppSecret、session token、完整 report token、完整手机号、openid/unionid 或媒体签名 URL
  • 公开报告只允许使用不可逆短 hash 做技术关联,业务事件表本身不保存 token/hash
  • 错误对用户返回稳定业务码和可理解文案,堆栈只进入受控日志;
  • 生产日志访问采用最小权限,导出/截图前脱敏,并设置保留周期。

6. 告警处理流程

  1. 告警必须带:环境、时间、信号名、当前值、受影响 endpoint/门店数量、最近发布版本;不得带敏感值。
  2. 值班人先判断是否为探针、依赖或业务错误readiness Critical 先摘流,权限/隐私 Critical 先关闭相关入口。
  3. 15 分钟内明确 owner 和下一动作30 分钟仍未恢复则启动回滚评估。
  4. 若问题与新版本相关且旧应用兼容当前数据库,按 Runbook 切回上一版本;禁止为了快速恢复而删新列/表或直接改业务状态。
  5. 恢复后补时间线、根因、影响、修复、验证和预防项;事故报告不粘贴真实 token/手机号/媒体 URL。

7. 上线前接入清单

  • 外部 HTTPS 探测覆盖 liveness/readiness、admin、H5 报告入口;
  • 5xx、延迟、DB 池、磁盘、证书和进程重启已配置告警;
  • FFmpeg/上传失败有可聚合字段,而非只能搜索自由文本;
  • BusinessEvent 日漏斗和 31 项只读数据审计有每日结果;
  • 通知渠道、Primary/Backup 值班人和升级联系人完成真实测试;
  • 日志脱敏抽查通过,访问权限和保留周期已批准;
  • 发布标记能关联四仓 commit 与 RC
  • Gitea/GitLab 有独立监控Petstore 发布后做旁路回归。

未完成以上接入RC 只能保持 Ready for Release