温馨提示×

如何监控Linux MongoDB的运行状态

小樊
35
2025-12-20 11:48:22
栏目: 云计算

Linux 上监控 MongoDB 运行状态的实用方案

一 内置工具快速查看

  • 使用 mongostat 实时查看关键吞吐与资源:每秒插入/查询/更新/删除、连接数、内存映射、页面错误、队列等。示例:mongostat --host localhost --port 27017 --username admin --password yourpassword --authenticationDatabase admin。关注字段:inserts/s、queries/s、updates/s、deletes/s、getmore/s、command/s、conn、faults/s、res、vsize、mapped、q r w。当 faults/s 持续偏高或 res 接近物理内存,可能存在内存压力;q/r/w 队列升高说明并发拥塞。
  • 使用 mongotop 按数据库/集合观察读写耗时:示例:mongotop --host localhost --port 27017 --username admin --password yourpassword --authenticationDatabase admin。用于定位最繁忙的集合与异常读写的命名空间。
  • mongo shell 中查看全局与库级状态:
    • 全局:db.serverStatus()(返回连接、内存、网络、磁盘、操作计数、锁、后台刷新等)。
    • 库级:db.stats()(返回集合数、对象数、数据/存储大小、索引数量与大小等)。
    • 集合级:db.yourCollection.stats()(定位单个集合的空间与索引使用)。

二 慢查询与 Profiling

  • 开启 Profiling 捕获慢操作(仅在需要时开启,避免性能开销):
    • 全量开启并设定阈值(单位毫秒):db.setProfilingLevel(2, { slowms: 100 })
    • 仅记录慢查询:db.setProfilingLevel(1, { slowms: 100 })
    • 查看:db.getProfilingLevel();查询记录:db.system.profile.find().sort({$natural: -1}).limit(20)
  • 结合 db.serverStatus().opcountersdb.currentOp() 观察当前执行与累计操作,辅助定位异常来源。

三 系统层面资源监控

  • 进程与资源:top -u mongodhtop(观察 CPU%、MEM%、负载 等)。
  • 磁盘与 I/O:iostat -x 1(关注 await、svctm、util 与读写吞吐);vmstat 1(观察 si/so 是否发生换入换出)。
  • 与 MongoDB 指标联动:当系统 iowait 升高或 mongostat 显示 faults/s 增加,通常意味着工作集超出内存或索引缺失导致磁盘读放大。

四 图形化与长期监控

  • 官方与常用工具:
    • MongoDB Compass(可视化查看性能、索引、查询分析);
    • Ops Manager(企业级监控与备份管理,适合生产环境)。
  • 自建可观测性栈:
    • Prometheus + Grafana:将 MongoDB 指标暴露给 Prometheus(通过 exportermongostat/mongo shell 脚本采集),在 Grafana 中构建面板实现可视化与告警。
    • 传统监控:Zabbix、Nagios 通过插件/脚本采集 MongoDB 指标并设置阈值告警。

五 关键指标与告警阈值示例

指标 含义 建议关注 告警示例
connections.current / connections.available 当前/可用连接数 连接数接近上限 使用率 > 80%
opcounters.insert/query/update/delete 每秒操作数 突增或异常下降 5 分钟内增幅 > 50%
faults/s 页面错误/秒 持续大于 0 且升高 持续 > 100 或持续上升
res / vsize / mapped(mongostat) 物理/虚拟内存与映射 res 接近物理内存 res > 物理内存 90%
q r w 队列(mongostat) 总/读/写队列长度 队列长期不为 0 任一队列 > 10 持续 1 分钟
backgroundFlushing(serverStatus) 后台 fsync flush 频繁或耗时变长 平均 flush 时间突增
iowait / util(iostat) 磁盘等待与利用率 高 iowait、util 接近 100% util > 80% 持续 5 分钟

0