Skip to content

Add SLO telemetry for message ordering and consistency #74

Description

@ULookup

Target Version

3.0-dev。复核基于 origin/3.0-dev 提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31(PR #57)。缓存/Redis/Push 已新增局部计数器,但消息端到端可靠性 SLO 仍不可计算。

Evidence

  • common/infra/metrics.hpp:14-34 现已暴露 L1/L2 hit/miss、成员快照竞争、Redis breaker、Redis 调用失败、本地限流、Push unacked 持久化失败和消息 requeue 计数。
  • RL-05 与 PF-09 已使用部分 bvar 证明 Redis 故障恢复和缓存状态,说明指标契约可以被测试驱动。
  • 仍缺少 accepted/broker-confirmed/persisted/fan-out/delivered/acked 阶段漏斗与端到端延迟。
  • 仍缺少 RabbitMQ ready/unacked/oldest age、retry/DLX、MySQL Outbox age、seq regression/fence、unacked oldest age 与 membership repair backlog。
  • scripts/prometheus/ 没有消息可靠性 dashboard/alert/runbook 契约;现有局部 counter 也没有统一低基数标签、SLO 分母和窗口定义。
  • PR feat(cache): harden Redis resilience and multilevel caching #57 CI 上游构建失败,Reliability/Perf cache job 被跳过,尚未形成可持续的指标 gate 证据。

Problem or Goal

在保留 PR #57 局部指标的基础上,建立可操作的消息可靠性与一致性 SLI/SLO,使丢失风险、重复、乱序、积压、降级与恢复时间能按阶段检测和告警。

Scope

  • 定义 accepted、broker-confirmed、persisted、fan-out、delivered、delivery-acked 阶段指标与延迟。
  • 补齐 consumer lag/age、retry/DLX、Outbox、unacked、seq fence、幂等冲突与 cache repair 指标。
  • 统一低基数标签、匿名关联、dashboard、告警、runbook 与采样/保留策略。
  • 定义 availability、durability、ordering、delivery latency、convergence 的 SLI/SLO。
  • 在 Functional、Reliability 与 Performance 中验证指标 firing/recovery 和状态收敛。

Non-goals

  • 不在本 Issue 修复指标暴露的生产缺陷。
  • 不把日志条数当作 SLO 分母。
  • 不以 user/conversation/message ID 作为 Prometheus label。
  • 不强制选定商业监控平台。

Acceptance Criteria

  • 可计算发送确认到持久化、持久化到 Push、Push 到 ACK 的成功率与 P50/P95/P99。
  • 可观察每个 consumer 的 ready/unacked、oldest age、retry、DLX 与耗时。
  • 可观察 MySQL/Redis Outbox、unacked 与 membership repair 的 pending 数和最老年龄。
  • seq regression/fence、幂等命中和唯一键冲突有独立计数。
  • 现有 breaker/cache/push counter 纳入统一命名、标签与 SLO 说明。
  • 所有 label 通过基数和敏感数据审查。
  • dashboard/alerts 能定位阶段、服务、依赖与 runbook,并有 firing/recovery 测试。
  • SLO 文档定义分母、窗口、缺失数据、维护窗口和 error budget。

Test-first Plan

先增加 TestMessageReliabilityMetricsContract,驱动完整发送、持久化、Push、ACK 及依赖故障,运行:

cd tests && go test -tags=func ./func/... -run TestMessageReliabilityMetricsContract -v -count=1

预期 RED 是业务成功/失败后阶段指标缺失或不变化。最小 GREEN 先补核心阶段漏斗和 lag,再加入 Reliability firing/recovery、Performance 开销与 agent-policy 文档契约。

Risk and Security

高基数、过多 bucket 或同步打点会损害性能。指标与 trace 不得泄露用户、消息、token 或 secret;阈值必须由容量基线校准,避免告警风暴。

Architecture Impact

No。复用现有 bvar/Prometheus 边界,不改变服务职责或真相源。

Core-flow Impact

No。只观测业务阶段,不改变成功、重试、顺序或 ACK 语义。

Required Skill Updates

  • 更新 technology stack,登记完整消息 SLI/SLO 与采集入口。
  • 更新 testing case catalog,登记指标 Functional/Performance/Reliability 用例。
  • 更新 canonical monitoring 文档、dashboard、alerts 与 runbook。
  • 如 core flows 列举可观测阶段,同步更新该引用。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions