CentOS上MongoDB性能监控落地方案
一 快速排障与内置工具
sudo systemctl status mongodsudo tail -f /var/log/mongodb/mongod.logmongo 或 mongoshdb.runCommand({ serverStatus: 1 })db.stats()mongostat --host <host> --port <port> --username <u> --password <p> --authenticationDatabase adminmongotop --host <host> --port <port> --username <u> --password <p> --authenticationDatabase admindb.setProfilingLevel(2); db.getProfilingLevel();db.system.profile.find().sort({$natural:-1}).limit(20)db.currentOp(); db.killOp(<opid>)二 关键监控指标与阈值参考
| 维度 | 核心指标 | 关注点与建议阈值 |
|---|---|---|
| 资源 | CPU、内存、磁盘 IO | CPU持续打满需排查慢查询/锁;内存不足会触发频繁磁盘读写;磁盘 IO 瓶颈直接影响吞吐,优先 SSD 与队列优化 |
| 数据库操作 | insert/query/update/delete、getmore、command/s | 观察突增与毛刺;结合慢查询定位瓶颈 |
| 锁与队列 | globalLock/currentQueue、locked %、qr/qw | 队列持续大于 0 表示拥塞;锁占比尽量低于 50% |
| 内存映射与页面错误 | mapped、res、faults/s | faults/s 过高(如超过 100)说明内存紧张或工作集过大 |
| 索引效率 | idx miss % | 索引未命中高需补充/优化索引 |
| 连接 | connections.current / available | 连接数接近上限需调整应用连接池或实例规格 |
| 持久化 | backgroundFlushing(flushes、total_ms、average_ms、last_ms) | 观察 flush 频率与耗时,异常升高可能预示磁盘或 WiredTiger 压力 |
| 复制与 Oplog | replication lag、oplog window | 延迟升高影响一致性;检查网络与主从负载 |
| 慢查询 | executionStats(executionTimeMillis、totalKeysExamined、totalDocsExamined、stage) | 出现 COLLSCAN 或扫描文档过多需加索引/改写查询 |
以上指标可通过 serverStatus、mongostat、mongotop 与 Profiler 获取,用于构建监控面板与告警基线。 |
三 长期监控与可视化方案
prometheus.yml 增加抓取任务:
四 告警规则示例与落地步骤