MongoDBNotes

第 23 章:监控告警

zjc 于 2026-01-23 发布

这是《MongoDB 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 MongoDB 监控要同时看数据库内部状态和应用视角延迟。核心内容包括可用性、复制、资源、查询、缓存、连接、事务和业务指标。

23.1 指标来源

常用命令:

db.serverStatus()
db.hello()
rs.status()
rs.printSecondaryReplicationInfo()
db.printCollectionStats()
db.currentOp()

聚合样例:

db.serverStatus().connections
db.serverStatus().opcounters
db.serverStatus().wiredTiger.cache
db.serverStatus().metrics.repl

23.2 可用性

指标:

指标 含义
member_state Primary / Secondary 等
elections_total 选举次数
replica_set_members 成员数量
voting_majority_healthy 多数健康
mongos_alive 路由可用
config_server_healthy 元数据服务健康

告警:

  1. 无 Primary;
  2. 多数成员不可达;
  3. 频繁选举;
  4. 成员状态异常;
  5. mongos 或 Config Server 不可用。

23.3 复制与分片

副本集:

replication_lag_seconds
oplog_window_hours
oplog_rate
member_health
rollback_events

分片:

chunks_per_shard
data_size_per_shard
balancer_running
migration_duration
migration_failures
scatter_gather_queries

告警:

  1. 复制延迟持续增长;
  2. oplog 窗口过短;
  3. shard 数据倾斜;
  4. 迁移长期运行;
  5. 广播查询占比高。

23.4 资源指标

系统层:

cpu_usage
cpu_iowait
memory_usage
swap_usage
disk_usage
disk_io_util
disk_read_bytes
disk_write_bytes
network_bytes
file_descriptors

WiredTiger:

cache_bytes
cache_dirty_bytes
pages_read_into_cache
pages_written_from_cache
pages_evicted
eviction_queue_length
checkpoint_duration

判断:

  1. cache 未命中高说明工作集压力大;
  2. dirty pages 持续高说明写入或 checkpoint 压力;
  3. iowait 高说明磁盘瓶颈;
  4. swap 出现说明内存规划异常;
  5. 磁盘水位高影响写入和恢复。

23.5 查询指标

operation_insert
operation_query
operation_update
operation_delete
operation_getmore
operation_command
query_latency_ms
slow_query_count
scanned_returned_ratio
collscan_count
sort_stage_count
index_size_bytes

慢查询来源:

  1. Profiler;
  2. 慢日志;
  3. APM;
  4. 应用 trace;
  5. 数据库面板。

23.6 连接与队列

connections_current
connections_available
connections_created
thread_queue
active_clients_readers
active_clients_writers
current_op_running
current_op_blocked

常见问题:

现象 原因
连接暴涨 无连接池或实例频繁重建
队列增长 慢查询、锁或资源瓶颈
可用连接低 maxIncomingConnections 过低
读写客户端堆积 磁盘或 cache 压力

23.7 事务指标

transactions_total
transactions_commit
transactions_abort
transaction_duration_ms
write_conflicts
transactions_current
lock_wait_time

告警:

  1. 事务 P99 超标;
  2. 回滚率高;
  3. 写冲突集中;
  4. 当前事务持续增长;
  5. 事务超时增加。

23.8 仪表盘设计

推荐视图:

  1. 拓扑总览;
  2. Primary 与复制延迟;
  3. Shard 分布;
  4. 慢查询列表;
  5. Cache 与磁盘;
  6. 连接与队列;
  7. 索引空间;
  8. 事务冲突;
  9. 应用侧延迟;
  10. 业务成功率。

数据库指标必须与应用请求指标放在同一时间线。

23.9 告警分级

级别 场景
P0 无 Primary、多数丢失、核心写入失败
P1 复制延迟过高、磁盘将满、核心查询超时
P2 cache 压力、慢查询增长、shard 倾斜
P3 非核心集合异常

每条告警包含:

  1. 环境;
  2. 集群和成员;
  3. 影响范围;
  4. 当前值;
  5. 处理入口;
  6. Runbook 链接。

本章小结

MongoDB 监控要覆盖拓扑、复制、分片、cache、磁盘、查询、连接和事务。判断性能时应把 serverStatus、慢查询、执行计划和应用延迟关联起来。告警关注趋势和影响范围,而不是孤立阈值。

思考题

  1. 复制延迟高对 Secondary 读有什么影响?
  2. cache 脏页持续高说明什么?
  3. 为什么必须监控 oplog 窗口?
  4. shard 数据倾斜会带来什么?
  5. 如何设计数据库与应用联合视角?