Skip to content

数据库监控设计:多云/自建统一视图 ​

状态 ​

Proposed(调研与分层设计定稿,P1 范围见 §5)。覆盖游戏业务数据库(非 croupier 元库)。

1. 问题 ​

游戏业务库(玩家/充值/订单/日志)出现死锁导致服务卡死的故障。但死锁只是数据库监控的一个切片——完整的数据库监控需要覆盖以下指标族,且不同部署形态(阿里云/华为云/自建)可观测能力差异巨大:

指标族具体指标故障表现
锁与死锁死锁次数、当前锁等待、等待链、长事务持锁时长服务卡死(连接池被等待者占满)
查询性能慢查询 TopN、全表扫描、索引缺失建议、QPS/慢查比接口变慢、超时
连接与会话连接数/上限、活跃/空闲、会话来源分布、连接泄漏too many connections
资源CPU/内存/磁盘 IO/临时表落盘/缓冲命中率整体劣化
复制与备份主从延迟、备份成功率/新鲜度读到旧数据、灾难恢复失效
容量趋势表大小增长、碎片率、磁盘水位容量规划

2. 部署形态 × 可观测能力矩阵(现实约束) ​

游戏公司现实是混合形态,监控能力必须按形态核对:

2.1 云诊断服务(需开通,人看免 SDK) ​

云产品开通免费范围付费深度
阿里云DAS 数据库自治服务RDS 控制台一键接入(免 agent)基础监控、死锁日志入口、实例会话自动 SQL 限流、锁分析、SQL 画像(按实例收费)
华为云DAS / DBSSRDS 内直接看为主基础监控+会话高级诊断付费
自建无———

要点:人看不需要任何 SDK(浏览器进控制台);死锁原文默认在 RDS 错误日志里免费可见。

2.2 程序采集(跨云通用,P1 主通道) ​

只读账号直连,标准 SQL 查系统表。兼容性核对:

采集项自建 MySQL阿里云 RDS MySQL华为云 RDS MySQLPG 系
连接数/线程SHOW STATUS ✅✅✅pg_stat_activity ✅
当前锁等待条目data_lock_waits(8.0) / innodb_lock_waits(5.7) ✅✅✅pg_locks JOIN ✅
死锁计数器Innodb_deadlocks ✅⚠️ 部分版本不暴露,用错误日志兜底⚠️ 同左PG 自动解死锁并记日志,pg_stat_database.deadlocks ✅
最近死锁详情原文SHOW ENGINE INNODB STATUS ❌(RDS 禁 SUPER)❌ → 用 DAS 或错误日志 API❌ 同左日志文件(需日志下载权限)⚠️
慢查询列表slow_log 表 ✅(需开 slow_query_log=ON)✅(控制台可开)✅pg_stat_statements 扩展(RDS 可装)✅
表大小/碎片information_schema.TABLES ✅✅✅pg_stat_user_tables ✅

结论:探针层跨云可用约 80% 的指标;死锁详情原文与内核级指标在云上是阉割的,由云诊断层补齐。

2.3 外部专业工具(深度/历史化) ​

工具定位与本方案关系
Percona PMMMySQL/PG 深度监控平台(Query Analytics、pt-deadlock-logger 死锁历史化)自建库推荐外挂;croupier 外链跳转
mysqld_exporter + Prometheus + Grafana指标标准化 + 趋势看板复用 croupier telemetry 已有栈;云 RDS 也适用
pgCenter / pganalyzePG 实时观察 / 商业 SaaSPG 重度用户可选
云 DAS/DBbrain OpenAPI程序化取死锁详情、自动 killP2 按云适配器接入

3. 架构:每类库用最强采集层,croupier 做统一聚合与告警 ​

┌─ 云 RDS ──────────► 云诊断(DAS/DBbrain):死锁详情/一键kill【权威,人看】
│                    └► 只读账号探针(P1):连接/锁等待/慢查【跨云统一】
┌─ 自建 ────────────► PMM 或 exporter(可选外挂)
│                    └► 同上探针
│
└─ croupier 运维中心「数据库监控」页(跨所有库统一层)
     ├─ 数据源注册表:实例{名称,驱动,类型(self|aliyun|huawei),DSN(只读),归属game/env}
     ├─ 健康探针:标准化 SQL 采集(§2.2 中 ✅ 项),拿不到的标注"由云控制台提供"+外链
     ├─ 告警联动:锁等待>阈值/死锁计数增长/连接水位 → alerts + ding/webhook
     ├─ 多库聚合:按 game/env 一页总览(分库分服场景 PMM 做不到的)
     └─ 深度诊断外链 → 云控制台 / PMM(复用工具箱模式,零成本兜底)

4. 关键决策 ​

  1. 不自建死锁解析器:SHOW ENGINE INNODB STATUS 的死锁段解析(pt-deadlock-logger 的活)需要 SUPER 权限,云上不可用;云上用 DAS,自建用 pt-deadlock-logger 外挂。
  2. P1 不接云 OpenAPI:每朵云一个 Go SDK 依赖 + AK/SK 密钥管理,成本高;控制台外链兜底。P2 按需做 DAS/OpenAPI 适配器拉死锁历史。
  3. 告警走 croupier 告警中心而非 Grafana Alerting:GM 联动(跳节点页/关联缺陷/区服上下文)是独有价值;Grafana 继续负责趋势图。

5. 分阶段实施 ​

阶段内容
P1(零 SDK,全形态兼容)① 数据源注册表(模型+CRUD,复用 ToolLink 模式);② 标准化健康探针(连接数/锁等待条目/死锁计数/表 Top 大小,MySQL+PG 双方言);③ 运维中心「数据库监控」页(多库聚合卡片+明细表+云控制台外链字段);④ 锁等待/死锁计数阈值告警入 alerts
P2云 OpenAPI 适配器(阿里云 DAS 死锁历史、华为云对应接口),featureFlags 式可选启用;慢查询 TopN 采样历史化
P3趋势对接:把探针数据打进 telemetry 栈(Prometheus remote write),Grafana 出长期趋势;容量预测

6. Review Checklist ​

  • 数据源 DSN 是敏感信息:存储加密或引用 secret,API 返回掩码(参考 certificates 处理);
  • 探针必须用只读账号,且查询带超时(监控自身不得成为被监控库的压力源);
  • 新增采集项必须先核对 §2.2 三形态兼容性,不兼容项标注数据来源降级;
  • 云类型/驱动枚举变更前后端同步。