MongoDB集群监控:Prometheus+Grafana实战指南

📅 2026/7/22 1:49:45
MongoDB集群监控:Prometheus+Grafana实战指南
1. MongoDB集群监控工具安装指南作为数据库管理员我深知MongoDB集群的健康监控对整个系统稳定运行的重要性。今天我将分享一套经过生产环境验证的MongoDB集群监控方案包含工具选型、安装配置和实际使用心得。2. 监控方案选型与设计思路2.1 为什么需要专业监控工具MongoDB集群的监控不同于单机实例需要关注分片间的数据均衡状态查询路由器的负载情况副本集的选举状态和同步延迟跨节点的连接池使用情况2.2 主流监控工具对比我们评估了三种主流方案工具名称数据采集方式可视化能力告警功能学习成本MongoDB Ops Manager专用Agent优秀完善较高Prometheus Grafana暴露metrics自定义强灵活中等DatadogSaaS集成开箱即用强大低最终选择PrometheusGrafana组合因其开源免费适合预算有限的企业可扩展性强能集成其他系统监控社区资源丰富问题容易解决3. 环境准备与组件安装3.1 基础环境要求MongoDB 3.6集群已配置副本集和分片Linux服务器本文以CentOS 7为例至少2GB空闲内存开放以下端口Prometheus: 9090Grafana: 3000MongoDB Exporter: 92163.2 安装Prometheus# 创建专用用户 useradd --no-create-home --shell /bin/false prometheus # 下载最新版请替换为当前版本 wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz tar xvf prometheus-*.tar.gz cd prometheus-2.30.3.linux-amd64 # 配置systemd服务 cat /etc/systemd/system/prometheus.service EOF [Unit] DescriptionPrometheus Wantsnetwork-online.target Afternetwork-online.target [Service] Userprometheus Groupprometheus ExecStart/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates/etc/prometheus/consoles \ --web.console.libraries/etc/prometheus/console_libraries [Install] WantedBymulti-user.target EOF # 启动服务 systemctl daemon-reload systemctl start prometheus systemctl enable prometheus3.3 安装MongoDB Exporter# 下载exporter wget https://github.com/percona/mongodb_exporter/releases/download/v0.30.0/mongodb_exporter-0.30.0.linux-amd64.tar.gz tar xvf mongodb_exporter-*.tar.gz mv mongodb_exporter /usr/local/bin/ # 创建服务文件 cat /etc/systemd/system/mongodb_exporter.service EOF [Unit] DescriptionMongoDB Exporter Afternetwork.target [Service] Userprometheus ExecStart/usr/local/bin/mongodb_exporter \ --mongodb.urimongodb://监控专用用户名:密码localhost:27017 \ --collect-all [Install] WantedBymulti-user.target EOF # 启动服务 systemctl daemon-reload systemctl start mongodb_exporter systemctl enable mongodb_exporter重要提示务必创建监控专用账号并限制其权限不要使用管理员账号4. Grafana配置与仪表盘导入4.1 安装Grafana# 添加Grafana仓库 cat /etc/yum.repos.d/grafana.repo EOF [grafana] namegrafana baseurlhttps://packages.grafana.com/oss/rpm repo_gpgcheck1 enabled1 gpgcheck1 gpgkeyhttps://packages.grafana.com/gpg.key EOF # 安装并启动 yum install grafana -y systemctl daemon-reload systemctl start grafana-server systemctl enable grafana-server4.2 配置数据源访问http://服务器IP:3000默认账号admin/admin添加Prometheus数据源URL: http://localhost:9090其他保持默认4.3 导入MongoDB仪表盘推荐使用Percona提供的官方仪表盘在Grafana界面点击 → Import输入仪表盘ID2583选择刚创建的Prometheus数据源5. 关键监控指标解析5.1 必须关注的集群级指标指标名称健康阈值异常处理建议mongodb_connections_current80%连接池上限检查客户端连接泄漏mongodb_replset_member_state1(Primary)或2副本集选举异常mongodb_opcounters_query同比增长50%检查慢查询或业务突增mongodb_memory_resident80%物理内存考虑扩容或优化索引5.2 分片集群特殊指标# 检查分片数据均衡情况 sum by (ns) (mongodb_mongos_sharding_chunks_balanced 0) # 监控迁移操作 rate(mongodb_sharding_total_moves_total[5m]) 06. 生产环境经验分享6.1 性能优化技巧调整Prometheus抓取间隔默认15s可能太频繁scrape_configs: - job_name: mongodb scrape_interval: 30s static_configs: - targets: [localhost:9216]为监控专用账号添加clusterMonitor角色db.createUser({ user: monitor_user, pwd: complex_password, roles: [clusterMonitor] })6.2 常见问题排查问题1Exporter连接失败检查防火墙规则验证mongodb_uri格式正确确认账号有足够权限问题2指标缺失添加--collect-all参数检查MongoDB版本兼容性更新exporter到最新版问题3Grafana面板无数据确认时间范围设置正确检查PromQL语法验证数据源连接状态7. 告警规则配置示例在Prometheus的rules.yml中添加groups: - name: mongodb-alerts rules: - alert: HighReplicationLag expr: mongodb_replset_oplog_tail_time_seconds 30 for: 5m labels: severity: critical annotations: summary: 副本集同步延迟过高 (instance {{ $labels.instance }}) description: 延迟达到 {{ $value }} 秒 - alert: TooManyConnections expr: mongodb_connections_current / mongodb_connections_available 0.8 for: 10m labels: severity: warning这套监控方案在我们生产环境已稳定运行2年成功预警了多次潜在故障。建议每月review一次监控指标阈值根据业务发展调整告警规则。