CentOS上MongoDB的性能监控如何实现
导读:CentOS上MongoDB性能监控落地方案 一 快速排障与内置工具 服务与连通性 检查服务状态:sudo systemctl status mongod 查看实时日志:sudo tail -f /var/log/mongodb/mon...
CentOS上MongoDB性能监控落地方案
一 快速排障与内置工具
- 服务与连通性
- 检查服务状态:
sudo systemctl status mongod - 查看实时日志:
sudo tail -f /var/log/mongodb/mongod.log - 登录 Shell:
mongo或mongosh
- 检查服务状态:
- 关键内置命令
- 服务器状态:
db.runCommand({ serverStatus: 1 } ) - 数据库统计:
db.stats() - 实时操作概览:
mongostat --host < host> --port < port> --username < u> --password < p> --authenticationDatabase admin - 集合读写耗时:
mongotop --host < host> --port < port> --username < u> --password < p> --authenticationDatabase admin
- 服务器状态:
- 慢查询与当前操作
- 开启/查看 Profiler(示例阈值 100ms):
db.setProfilingLevel(2); db.getProfilingLevel(); - 查询慢日志:
db.system.profile.find().sort({ $natural:-1} ).limit(20) - 查看与终止长事务/操作:
db.currentOp(); db.killOp(< opid> )
- 开启/查看 Profiler(示例阈值 100ms):
- 可选管理接口
- 若启用,访问 http://:28017(比数据端口 27017 大 1000)查看连接、锁、索引等摘要信息(部分安装方式默认不启用)。
二 关键监控指标与阈值参考
| 维度 | 核心指标 | 关注点与建议阈值 |
|---|---|---|
| 资源 | 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 + Grafana(开源通用)
- 部署 Prometheus,在
prometheus.yml增加抓取任务:- job_name: ‘mongodb’
static_configs:
- targets: [‘< mongo_host> :< exporter_port> ’]
- job_name: ‘mongodb’
static_configs:
- 部署 MongoDB Exporter(MongoDB 4.2+ 推荐 percona/mongodb_exporter),暴露 /metrics 供 Prometheus 抓取。
- 部署 Grafana,添加 Prometheus 数据源(URL:http://:9090),导入 MongoDB 仪表盘(如 ID 2583 等社区面板),按需配置阈值与通知渠道(Email/Slack/钉钉等)。
- 部署 Prometheus,在
- 一体化与托管方案
- MongoDB Cloud Manager / Ops Manager:官方监控、备份与自动化,适合企业级;MongoDB Atlas:托管云上实时监控与告警。
- Percona Monitoring and Management(PMM):开源,多数据库支持,含 MongoDB 丰富面板与查询分析。
- Datadog / Zabbix / Nagios:与现有监控平台集成,适合已有运维体系。
四 告警规则示例与落地步骤
- Prometheus 规则示例(告警阈值可按业务调整)
- 实例宕机
- ALERT MongoDBDown IF up{ job=“mongodb”} == 0 FOR 1m LABELS { severity=“critical” } ANNOTATIONS { summary=“MongoDB instance down”, description=“Instance { { $labels.instance } } has been down for more than 1 minute.” }
- 连接数过高
- ALERT MongoDBTooManyConnections IF mongodb_connections{ state=“current”} / mongodb_connections{ state=“available”} > 0.8 FOR 5m LABELS { severity=“warning” } ANNOTATIONS { summary=“MongoDB connections near limit”, description=“Current connections: { { $value | humanizePercentage } } of available.” }
- 慢查询增多
- ALERT MongoDBHighSlowQueries IF increase(mongodb_slow_queries_total[5m]) > 100 FOR 5m LABELS { severity=“warning” } ANNOTATIONS { summary=“MongoDB slow queries increased”, description=“{ { $value } } slow queries in last 5 minutes.” }
- 锁争用偏高
- ALERT MongoDBHighLockRatio IF mongodb_global_lock_ratio > 0.5 FOR 5m LABELS { severity=“warning” } ANNOTATIONS { summary=“MongoDB high global lock ratio”, description=“Global lock ratio: { { $value } } .” }
- 页面错误过多
- ALERT MongoDBHighPageFaults IF rate(mongodb_page_faults_total[5m]) > 100 FOR 5m LABELS { severity=“warning” } ANNOTATIONS { summary=“MongoDB high page faults”, description=“Page faults rate: { { $value } } per second.” }
- 实例宕机
- 落地步骤
- 明确 SLO(如查询 P95 < 100ms、复制延迟 < 5s、连接利用率 < 80%)。
- 部署 Exporter → 配置 Prometheus 抓取 → 导入 Grafana 面板 → 配置 Alertmanager 与通知渠道 → 压测校准阈值 → 定期复盘与优化索引/查询/实例规格。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS上MongoDB的性能监控如何实现
本文地址: https://pptw.com/jishu/772118.html
