温馨提示×

MongoDB在Ubuntu上的监控怎么做

小樊
45
2025-12-28 12:11:07
栏目: 云计算

MongoDB 在 Ubuntu 上的监控实践

一 快速上手 内置与命令行工具

  • 服务与日志
    • 检查运行状态:sudo systemctl status mongod
    • 实时查看日志:journalctl -u mongod -f
  • 实时性能
    • 吞吐与锁:mongostat --host localhost --port 27017 --username admin --password --authenticationDatabase admin
      • 关注:insert/query/update/delete、getmore、command、flushes、mapped、faults、locked、qr/qw、ar/aw
    • 集合热点:mongotop --host localhost --port 27017 --username admin --password --authenticationDatabase admin
      • 关注:按 ns(库.集合)read/write 时间占比
  • Shell 诊断
    • 全局状态:db.serverStatus()(含 connections、mem、metrics、opcounters、wiredTiger、repl 等)
    • 集合统计:db.collection.stats()(含 count、size、storageSize、totalIndexSize、indexSizes
    • 查询诊断:db.collection.find({…}).explain(“executionStats”)(看 executionTimeMillis、totalKeysExamined、totalDocsExamined、stage
    • 当前操作:db.currentOp() 定位长事务/慢操作

二 图形化与托管监控

  • 官方 GUI:MongoDB Compass
    • 安装示例:wget https://downloads.mongodb.com/compass/mongodb-compass_1.26.0_amd64.deb && sudo dpkg -i mongodb-compass_1.26.0_amd64.deb
    • 连接实例后可查看 性能指标、索引、查询分析,适合日常巡检与开发排障
  • 官方托管:MongoDB Cloud Manager
    • 提供 监控、告警、备份、性能顾问 等,适合生产环境的持续观测与合规
  • 企业/传统平台
    • Zabbix:通过模板/自定义键值采集并做阈值告警,适合已有 Zabbix 体系的团队

三 自建可观测性平台 Prometheus Grafana

  • 组件与端口
    • mongodb_exporter(Percona):默认 9216
    • Prometheus:默认 9090
    • Alertmanager:默认 9093
    • Grafana:默认 3000
  • 部署示例(Docker)
    • 启动 exporter:docker run -d --name mongodb_exporter -p 9216:9216 -e MONGODB_URI=mongodb://:@:27017 percona/mongodb_exporter:latest
  • Prometheus 抓取配置片段
    • scrape_configs:
      • job_name: ‘mongodb’ static_configs:
        • targets: [‘<exporter_host>:9216’]
  • Grafana
    • 添加 Prometheus 数据源,导入社区仪表盘(如 ID 2583 或 Percona 提供的 MongoDB Exporter 仪表盘)
  • 告警规则示例(rules.yml)
    • groups:
      • name: mongodb-alerts rules:
        • alert: MongodbDown expr: mongodb_up == 0 for: 0m labels: { severity: critical } annotations: summary: “MongoDB Down on {{ $labels.instance }}” description: “MongoDB 实例不可达,当前值:{{ $value }}”
        • alert: MongodbTooManyConnections expr: avg by(instance) (rate(mongodb_ss_connections{conn_type=“current”}[1m])) / avg by(instance) (sum by(instance)(mongodb_ss_connections)) * 100 > 80 for: 2m labels: { severity: warning } annotations: summary: “MongoDB 连接数超过 80%({{ $labels.instance }})” description: “当前连接占用率:{{ $value | humanizePercentage }}”
        • alert: MongodbCursorsTimeouts expr: increase(mongodb_ss_metrics_cursor_timedout[1m]) > 100 for: 2m labels: { severity: warning } annotations: summary: “MongoDB 游标超时过多({{ $labels.instance }})” description: “1 分钟内超时游标数:{{ $value }}”
        • alert: MongodbVirtualMemoryUsage expr: (sum by(instance)(mongodb_ss_mem_virtual)) / (sum by(instance)(mongodb_ss_mem_resident)) > 3 for: 2m labels: { severity: warning } annotations: summary: “MongoDB 虚拟内存倍数过高({{ $labels.instance }})” description: “虚拟/常驻内存比:{{ $value | humanizePercentage }}”
  • 生效与验证
    • 配置检查:docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml
    • 热加载:curl -X POST http://localhost:9090/-/reload
    • 在 Prometheus:Status → Targets 确认 UP;Alerts 页面查看规则与触发状态

四 关键指标与告警建议

  • 连接与队列
    • 关注:connections.current/available、qr/qw
    • 判定:持续接近上限或队列增长,可能预示阻塞或并发不足
  • 操作与错误
    • 关注:opcounters.insert/query/update/delete 的突增;asserts.regular/warning 异常
  • 内存与页面错误
    • 关注:mem.resident、mem.virtual、faults
    • 判定:缺页升高常提示工作集超过内存或索引/数据未充分缓存
  • 落盘与 WiredTiger
    • 关注:flushes(落盘次数)、wiredTiger.cache.*(bytes currently in cache、pages read/write)
    • 判定:评估 缓存命中I/O 压力
  • 复制健康(副本集)
    • 关注:replSetGetStatus 中的 optimeDate、health、lastHeartbeat
    • 判定:设置 复制延迟阈值告警
  • 慢查询
    • 开启并分析 profiling,结合 db.currentOp()explain(“executionStats”) 定位高成本查询与缺失/低效索引

五 安全与连通性配置要点

  • 启用鉴权
    • 配置 /etc/mongod.confsecurity.authorization: enabled
    • 监控采集使用具备只读/监控所需角色的专用账户
  • 网络与防火墙
    • 如需远程采集,配置 net.bindIp(如 0.0.0.0 或白名单),并放行 27017
    • 仅开放必要来源 IP
  • 最小权限
    • 避免使用高权限账户进行日常采集,遵循 最小权限原则

0