这是《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 | 元数据服务健康 |
告警:
- 无 Primary;
- 多数成员不可达;
- 频繁选举;
- 成员状态异常;
- 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
告警:
- 复制延迟持续增长;
- oplog 窗口过短;
- shard 数据倾斜;
- 迁移长期运行;
- 广播查询占比高。
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
判断:
- cache 未命中高说明工作集压力大;
- dirty pages 持续高说明写入或 checkpoint 压力;
- iowait 高说明磁盘瓶颈;
- swap 出现说明内存规划异常;
- 磁盘水位高影响写入和恢复。
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
慢查询来源:
- Profiler;
- 慢日志;
- APM;
- 应用 trace;
- 数据库面板。
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
告警:
- 事务 P99 超标;
- 回滚率高;
- 写冲突集中;
- 当前事务持续增长;
- 事务超时增加。
23.8 仪表盘设计
推荐视图:
- 拓扑总览;
- Primary 与复制延迟;
- Shard 分布;
- 慢查询列表;
- Cache 与磁盘;
- 连接与队列;
- 索引空间;
- 事务冲突;
- 应用侧延迟;
- 业务成功率。
数据库指标必须与应用请求指标放在同一时间线。
23.9 告警分级
| 级别 | 场景 |
|---|---|
| P0 | 无 Primary、多数丢失、核心写入失败 |
| P1 | 复制延迟过高、磁盘将满、核心查询超时 |
| P2 | cache 压力、慢查询增长、shard 倾斜 |
| P3 | 非核心集合异常 |
每条告警包含:
- 环境;
- 集群和成员;
- 影响范围;
- 当前值;
- 处理入口;
- Runbook 链接。
本章小结
MongoDB 监控要覆盖拓扑、复制、分片、cache、磁盘、查询、连接和事务。判断性能时应把 serverStatus、慢查询、执行计划和应用延迟关联起来。告警关注趋势和影响范围,而不是孤立阈值。
思考题
- 复制延迟高对 Secondary 读有什么影响?
- cache 脏页持续高说明什么?
- 为什么必须监控 oplog 窗口?
- shard 数据倾斜会带来什么?
- 如何设计数据库与应用联合视角?