MongoDB在CentOS上的监控实现
一 快速上手 内置工具与Shell
- 服务状态与健康检查
- 查看服务状态:sudo systemctl status mongod
- 快速连通性/状态:执行 mongo --eval ‘db.runCommand({ serverStatus: 1 })’,可获取包含版本、运行时间、连接数、缓存、操作计数等的详细JSON。
- 实时性能与负载
- mongostat:实时展示插入/查询/更新/删除等计数器与资源使用,便于定位吞吐与锁竞争。
- mongotop:按集合展示读写耗时占比,快速识别热点集合。
- 慢查询与执行分析
- 开启并查看Profiler(如设置db.setProfilingLevel(1, {slowms: 100})),结合日志定位慢查询与执行计划。
- 日志排查
- 默认日志路径:/var/log/mongodb/mongod.log,使用 tail -f /var/log/mongodb/mongod.log 实时跟踪错误与告警。
二 可视化与长期监控 Prometheus Grafana MongoDB Exporter
- 组件与数据流
- MongoDB Exporter 采集数据库指标 → Prometheus 抓取与存储 → Grafana 可视化与告警。
- 部署步骤(示例)
- 启动 Exporter(请替换连接串与认证库):
- ./mongodb_exporter --mongodb.uri=“mongodb://:@:/admin”
- 配置 Prometheus(prometheus.yml):
- scrape_configs:
- job_name: ‘mongodb’
static_configs:
- 启动 Prometheus:
- ./prometheus --config.file=prometheus.yml
- 安装并启动 Grafana(CentOS 7/8 可用 yum):
- sudo yum install -y @grafana
- sudo systemctl daemon-reload && sudo systemctl start grafana-server && sudo systemctl enable grafana-server
- Grafana 配置
- 访问 http://:3000,添加数据源 Prometheus(URL: http://:9090)。
- 导入 MongoDB 仪表盘(如社区仪表盘 ID: mongodb-dashboard),完成可视化。
三 企业级与替代方案
-
Zabbix:通过模板或自定义脚本采集 mongostat/mongotop 输出与系统指标,适合已有 Zabbix 体系的团队。
-
Percona Monitoring and Management(PMM):开源的一体化监控与诊断平台,覆盖 MongoDB 性能、慢查询分析与优化建议。
-
MongoDB Ops Manager / Atlas:官方企业级监控与管理(含性能监控、备份、告警等),适合需要合规与 SLA 管理的生产环境。
四 系统层面监控与日志联动
- 资源与磁盘
- top/htop:观察 CPU/内存 消耗,定位 mongod 进程是否受限。
- iostat -x 1:查看 磁盘 I/O 队列与利用率,排查慢盘与 I/O 瓶颈。
- vmstat 1:关注 swap、上下文切换、中断 等系统层面异常。
- 日志与审计
- 持续 tail -f /var/log/mongodb/mongod.log,结合 Profiler 结果,闭环慢查询与异常行为的定位与优化。
五 建议的告警阈值与落地实践
- 关键告警建议(按业务调整阈值与持续时间)
- 复制集健康:主节点不可用、复制滞后(如 > 10s)持续 1–2 个采集周期。
- 连接数:当前连接数接近 maxIncomingConnections 的 80%。
- 操作延迟:慢查询比例或平均操作耗时突增(如 > 50% 对比基线)。
- 资源瓶颈:CPU 持续 > 80%、可用内存低、磁盘 util > 80% 或 await 明显升高。
- 存储:数据目录所在磁盘 可用空间 < 10%。
- 落地步骤
- 在 Prometheus 中定义 Recording Rules/Alert Rules,基于 MongoDB Exporter 指标(如连接数、操作速率、复制滞后、WiredTiger 缓存命中率等)。
- 在 Grafana 配置通知渠道(如 Email/Slack/企业微信/钉钉),为不同严重级别设置升级策略与值班人。
- 建议以“基线 + 环比/同比”方式设置动态阈值,减少误报并提升告警有效性。