Ubuntu上MongoDB如何监控
导读:Ubuntu 上 MongoDB 监控实践指南 一 监控方案总览 系统与服务层:用 systemd 管理进程、查看状态与日志,快速判断实例是否存活与异常。 数据库自带工具:用 mongostat、mongotop 实时查看操作统计与集合读...
Ubuntu 上 MongoDB 监控实践指南
一 监控方案总览
- 系统与服务层:用 systemd 管理进程、查看状态与日志,快速判断实例是否存活与异常。
- 数据库自带工具:用 mongostat、mongotop 实时查看操作统计与集合读写耗时;用 mongo shell 执行 db.serverStatus()、db.collection.stats() 获取更细指标与诊断信息。
- 可视化与长期存储:用 Prometheus + MongoDB Exporter + Grafana 搭建指标采集、存储与可视化;或用 MongoDB Compass 做图形化的实时洞察;有云需求可用 MongoDB Cloud Manager 集中监控与告警。
二 快速上手 系统与服务层监控
- 服务状态与自启动
- 查看状态:sudo systemctl status mongod
- 启用自启:sudo systemctl enable mongod & & sudo systemctl start mongod
- 实时日志与故障排查
- 跟踪日志:sudo journalctl -u mongod -f
- 一键健康检查脚本示例
- 保存为 /usr/local/bin/check_mongo.sh
#!/usr/bin/env bash if systemctl is-active --quiet mongod; then echo "MongoDB is running." exit 0 else echo "MongoDB is down. Restarting..." sudo systemctl restart mongod exit 1 fi - 赋权并加入定时任务(每 5 分钟检查一次)
chmod +x /usr/local/bin/check_mongo.sh crontab -e */5 * * * * /usr/local/bin/check_mongo.sh
- 保存为 /usr/local/bin/check_mongo.sh
- 常用排障
- 端口占用:sudo lsof -i :27017
- 日志过大:sudo journalctl --vacuum-size=100M
三 数据库自带与命令行监控
- 实时性能概览
- 操作统计:mongostat --host 127.0.0.1:27017
- 集合读写耗时:mongotop --host 127.0.0.1:27017
- 关键指标与诊断
- 连接与内存:db.serverStatus().connections、.mem
- 操作计数:db.serverStatus().opcounters
- 复制状态(副本集):rs.status()
- 集合统计:db.collection.stats()
- 图形化客户端
- MongoDB Compass:连接实例后可直观查看性能指标、索引、查询分析等。
四 Prometheus Grafana MongoDB Exporter 监控与告警
- 准备监控专用账号(推荐最小权限)
- 在 mongo shell 中执行
use admin db.createUser({ user: "exporter", pwd: "StrongPassw0rd", roles: [ { role: "readAnyDatabase", db: "admin" } , { role: "clusterMonitor", db: "admin" } ] } )
- 在 mongo shell 中执行
- 部署 MongoDB Exporter(以容器为例)
- docker-compose.yml
version: "3.8" services: mongodb_exporter: image: bitnami/mongodb-exporter:latest environment: MONGODB_URI: "mongodb://exporter:StrongPassw0rd@mongo:27017/admin?ssl=false" ports: - "9216:9216" restart: always - 启动:docker-compose up -d
- 验证:curl http://localhost:9216/metrics
- docker-compose.yml
- 配置 Prometheus 抓取
- prometheus.yml
scrape_configs: - job_name: 'mongodb' static_configs: - targets: ['< mongo_host_or_ip> :9216'] - 热加载:curl -X POST http://:9090/-/reload
- prometheus.yml
- Grafana 可视化
- 添加数据源:Prometheus URL http://:9090
- 导入社区面板:搜索并导入 MongoDB Exporter / Percona MongoDB Exporter 面板(如 ID 2583 等),或自建面板
- 常用查询示例
- 实例存活:mongodb_up
- 连接数:mongodb_connections{ state=“current”}
- 每秒操作数:rate(mongodb_op_counters_total[5m])
- 数据库大小:mongodb_db_size_bytes
- 基础告警规则示例
- Prometheus 规则
groups: - name: mongodb rules: - alert: MongoDBDown expr: mongodb_up == 0 for: 0m labels: severity: critical annotations: summary: "MongoDB Down on { { $labels.instance } } " description: "MongoDB instance is unreachable." - alert: MongoDBTooManyOpenCursors expr: mongodb_ss_metrics_cursor_open{ csr_type="total"} > 10000 for: 2m labels: severity: warning annotations: summary: "MongoDB open cursors high on { { $labels.instance } } " description: "Open cursors: { { $value } } " - 在 Grafana 中配置 Alertmanager 接收与通知。
- Prometheus 规则
五 关键指标与告警建议
- 建议重点关注的指标与阈值
- 可用性:mongodb_up == 0(立即告警)
- 连接数:当前连接接近 net.maxIncomingConnections 上限(结合业务评估阈值)
- 游标:mongodb_ss_metrics_cursor_open 长时间很高或 mongodb_ss_metrics_cursor_timedout 增长快(可能客户端未正确关闭游标)
- 操作速率:rate(mongodb_op_counters_total[5m]) 突降/突升(异常波动)
- 复制与延迟(副本集):rs.status().optimeDate 各节点差距过大(网络或节点异常)
- 存储与内存:mongodb_db_size_bytes 增长趋势、mem.resident 接近物理内存(结合 WiredTiger 缓存设置)
- 优化与排障联动
- 慢查询:开启并分析 profiling,配合 explain(“executionStats”) 优化索引与查询
- 索引:为高频查询字段建立合适索引,定期清理无用索引
- 配置:在 /etc/mongod.conf 中合理设置 storage.wiredTiger.engineConfig.cacheSizeGB、net.maxIncomingConnections 等参数,必要时结合 SSD 与内存扩容。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上MongoDB如何监控
本文地址: https://pptw.com/jishu/773509.html
