Files
baiyue-firstleg/event-bridge-service/docs/development-observability-slo.md
T
2026-08-25 14:46:06 +08:00

3.5 KiB
Raw Blame History

Event Bridge 开发阶段可观测性与 SLO 合同

状态与边界

本文冻结代码侧指标、SLI/SLO 和告警表达式模板。它不表示任何环境已经部署、接入或启用了 Prometheus、Alertmanager 或 Grafana,也不授权部署、访问环境或修改环境配置。

指标标签只允许 target_region、event_type、result:

  • target_region 仅为 CN、OVERSEAS、OTHER。
  • event_type 仅为 EventTypes 已登记类型或 OTHER。
  • result 仅为代码中冻结的接收或传输结果枚举。
  • 严禁把 eventId、customerId、聚合 ID、错误消息、请求 URL 或操作人写入指标标签。

指标合同

Prometheus 指标 含义
baiyue_event_bridge_receive_total 接收结果;`result=RECEIVED
baiyue_event_bridge_transport_total 传输结果;`result=DELIVERED
baiyue_event_bridge_delivery_latency_seconds_bucket 从 Event Bridge received_at 到下游首次成功确认;固定包含 60 秒和 900 秒 SLO 桶
baiyue_event_bridge_inbox_backlog 当前 RECEIVED、RETRY、PROCESSING 数量
baiyue_event_bridge_inbox_oldest_age_seconds 当前最老待处理事件自 received_at 起的年龄
baiyue_event_bridge_inbox_dead 当前 DEAD 数量

DELIVERED 与 ACKNOWLEDGED_LEASE_LOST 都表示下游已经确认,因此均记录确认延迟;后者仍单独计数, 不得冒充本地 Inbox 已成功更新。RETRY、DEAD、FAILED_LEASE_LOST 不记录成功延迟。

Inbox Gauge 由服务每 30 秒执行一次受控聚合查询并缓存;Prometheus scrape 只读取 Micrometer Gauge, 不得触发数据库查询。查询仅处理 RECEIVED、RETRY、PROCESSING、DEAD,状态过滤以现有 idx_bridge_inbox_consume(status, next_retry_at, lease_until) 为索引依据;本合同不新增或修改 SQL 结构。

开发阶段 SLI 与 SLO

SLI 从事件首次得到 result=RECEIVED 开始,到下游首次成功确认结束;DUPLICATE 和 CONFLICT 不重复进入分母。滚动 30 天目标:

  • 99% 的新接收跨区事件在 60 秒内得到下游确认。
  • 99.9% 的新接收跨区事件在 15 分钟内得到下游确认。

代码暴露固定延迟桶,目标查询模板如下;按 target_region 汇总,必要时可保留有限 event_type 分组:

sum(rate(baiyue_event_bridge_delivery_latency_seconds_bucket{le="60.0"}[30d]))
/
sum(rate(baiyue_event_bridge_receive_total{result="RECEIVED"}[30d])) >= 0.99
sum(rate(baiyue_event_bridge_delivery_latency_seconds_bucket{le="900.0"}[30d]))
/
sum(rate(baiyue_event_bridge_receive_total{result="RECEIVED"}[30d])) >= 0.999

告警合同

规则由实际监控平台按 30 秒或更短评估周期配置;以下只是表达式合同:

  • 新增 DEAD:下一次评估立即告警,不设置持续等待。 sum(increase(baiyue_event_bridge_transport_total{result="DEAD"}[1m])) > 0
  • 最老待处理年龄预警:任一有限标签序列超过 120 秒。 max(baiyue_event_bridge_inbox_oldest_age_seconds) > 120
  • 最老待处理年龄严重:任一有限标签序列超过 900 秒。 max(baiyue_event_bridge_inbox_oldest_age_seconds) > 900
  • 当前 DEAD 存量用于持续可见性:sum(baiyue_event_bridge_inbox_dead) > 0;它不替代“新增 DEAD”告警。

告警通知中可通过日志和业务查询再定位 event ID;禁止为了通知便利把高基数标识加入指标标签。