温馨提示×

MongoDB在CentOS上的监控配置方案

小樊
35
2025-11-17 19:50:43
栏目: 云计算

MongoDB在CentOS上的监控配置方案

一 监控目标与总体架构

  • 监控目标
    • 实例健康:进程存活、连接数、复制状态、错误日志。
    • 性能瓶颈:操作吞吐(insert/query/update/delete)、锁与队列、页面错误、WiredTiger缓存命中。
    • 资源与磁盘:CPU、内存、磁盘IO、网络、存储容量。
    • 可视化与告警:统一看板、阈值与事件通知、历史回溯。
  • 推荐架构
    • 主机层:使用系统工具与进程/日志巡检。
    • 数据库层:使用 MongoDB 自带工具与 Exporter 输出指标。
    • 采集与存储:Prometheus 抓取并存储时间序列。
    • 展示与告警:Grafana 可视化与告警规则,支持邮件、Webhook 等通道。

二 快速落地步骤

  • 主机与服务可达性
    • 检查服务状态:sudo systemctl status mongod
    • 实时性能巡检:mongostat --host 127.0.0.1 --port 27017 --username --password --authenticationDatabase admin
    • 集合级耗时:mongotop --host 127.0.0.1 --port 27017 --username --password --authenticationDatabase admin
    • 状态快照:mongo --eval ‘db.serverStatus()’
    • 日志跟踪:tail -f /var/log/mongodb/mongod.log
  • Prometheus + Grafana
    • 部署 MongoDB Exporter(监听 :9114),在 Prometheus 配置抓取 job:
      • scrape_configs:
        • job_name: ‘mongodb’ static_configs:
          • targets: [‘:9114’]
    • 启动 Prometheus:./prometheus --config.file=prometheus.yml
    • 安装 Grafana,添加 Prometheus 数据源(URL:http://:9090),导入 MongoDB 仪表盘并配置告警通道(Email/Slack/Webhook)。
  • 企业/托管方案(可选)
    • 使用 MongoDB Ops Manager(企业版)或 Percona Monitoring and Management(PMM) 实现更完善的监控、备份与诊断。

三 关键指标与阈值建议

维度 关键指标 建议阈值或动作
连接 connections.current / connections.available 使用率 > 80% 告警,检查连接泄漏或调整 maxIncomingConnections
操作吞吐 inserts/queries/updates/deletes per second 突降或异常尖峰,结合慢查询与 Profiler 排查
延迟与队列 operationLatencyMillis、globalLock.currentQueue.total 队列持续 > 10–50 ms 或明显上升,检查锁竞争与索引
页面错误 extra_info.page_faults 持续上升,检查内存与工作集是否超出 RAM
缓存与命中 wiredTiger.cache.*.bytes.readinto / cache.hitRatio hitRatio < 95% 时考虑增加内存或优化工作集
复制 replication.oplog.rs.size / replication.lag lag 持续增长或接近 oplog 窗口,评估扩容/分片
存储 db.stats().dataSize / free space 数据或日志盘使用率 > 80% 告警,预留增长与压缩/归档
错误日志 日志中 ERROR/WARNING 关键字 出现 FATAL/UNRECOVERABLE 立即处理,ERROR 持续出现需定位根因

四 告警规则示例

  • 实例不可用
    • expr: up{job=“mongodb”} == 0
    • for: 1m
    • severity: critical
    • annotations: summary=“MongoDB Exporter down”
  • 连接使用率过高
    • expr: (mongodb_connections_current{job=“mongodb”} / mongodb_connections_available{job=“mongodb”}) > 0.8
    • for: 5m
    • severity: warning
  • 复制延迟过高
    • expr: mongodb_replset_member_optime_lag_seconds{job=“mongodb”} > 30
    • for: 2m
    • severity: warning
  • 页面错误持续增长
    • expr: increase(mongodb_extra_info_page_faults_total{job=“mongodb”}[5m]) > 100
    • for: 10m
    • severity: warning
  • 磁盘空间紧张
    • expr: (1 - node_filesystem_avail_bytes{mountpoint=“/”} / node_filesystem_size_bytes{mountpoint=“/”}) > 0.8
    • for: 5m
    • severity: warning
  • 说明
    • 指标名称以实际使用的 MongoDB Exporter 标签为准;Grafana 中可基于这些规则配置通知渠道(Email、Slack、Webhook 等)。

五 日常巡检与维护

  • 日常巡检脚本(示例)
    • 进程与端口:systemctl is-active mongod && ss -lntp | grep 27017
    • 关键指标快照:mongo --eval ‘db.serverStatus().opcounters,db.serverStatus().mem,db.serverStatus().connections’
    • 复制状态:mongo --eval ‘rs.status().members’
    • 近期慢查询:mongo --eval ‘db.getProfilingStatus(); db.system.profile.find().sort({ts:-1}).limit(10).pretty()’
    • 日志异常:grep -E “ERROR|WARNING” /var/log/mongodb/mongod.log | tail -n 50
  • 维护要点
    • 为监控账号授予最小权限(如 clusterMonitor、readAnyDatabase)。
    • 为 Exporter 配置专用只读账号与连接串,启用 TLS/鉴权。
    • 合理设置抓取间隔(建议 15s),避免对实例造成额外压力。
    • 定期校验告警阈值与仪表盘变量(如环境、分片、实例标签)。
    • 保留至少 15–30 天历史数据用于容量与性能回溯分析。

0