1. 首页 > MongoDB教程 > 正文

MongoDB教程FG076-MongoDB数据库日常巡检与健康检查实战

本文主要介绍MongoDB数据库的日常巡检与健康检查方法,包括巡检内容、健康检查指标和巡检自动化等核心功能。风哥教程参考MongoDB官方文档Monitoring相关章节。

目录大纲

Part01-基础概念与理论知识

Part02-生产环境规划与建议

Part03-生产环境项目实施方案

Part04-生产案例与实战讲解

Part05-风哥经验总结与分享

Part01-基础概念与理论知识

1.1 日常巡检概述

日常巡检是数据库运维的重要组成部分,它通过定期检查数据库的运行状态、性能指标和安全状况,及时发现和解决潜在问题,确保数据库的稳定运行。

日常巡检可以帮助运维人员了解数据库的健康状况,预测可能出现的问题,提前采取措施避免故障的发生。学习交流加群风哥微信: itpux-com

1.2 健康检查指标

MongoDB的健康检查指标包括:

  • 服务状态:MongoDB服务是否正常运行
  • 连接数:当前连接数和最大连接数
  • 内存使用:内存使用情况
  • CPU使用率:CPU使用情况
  • 磁盘空间:磁盘使用情况
  • 复制状态:副本集的复制状态
  • 操作延迟:操作执行的延迟时间
  • 慢查询:慢查询的数量和详情
  • 索引使用:索引的使用情况
  • 安全状态:安全配置和审计日志

更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 巡检计划制定

巡检计划制定包括:

  • 巡检频率:根据数据库的重要性和负载情况确定
  • 巡检内容:明确每次巡检需要检查的项目
  • 巡检人员:指定负责巡检的人员
  • 巡检工具:选择合适的巡检工具和脚本
  • 巡检报告:建立巡检报告制度,记录巡检结果

风哥提示:合理的巡检计划可以提高巡检的效率和效果。

2.2 健康检查策略

健康检查策略包括:

  • 实时监控:使用监控工具实时监控数据库状态
  • 定期检查:定期执行健康检查脚本
  • 异常告警:设置异常告警机制,及时发现问题
  • 趋势分析:分析监控数据的趋势,预测潜在问题
  • 问题跟踪:建立问题跟踪机制,确保问题得到解决

更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 巡检工具与脚本

编写日常巡检脚本:

#!/bin/bash
# daily_inspection.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 定义变量
MONGODB_HOME=”/mongodb/app”
HOST=”192.168.1.100″
PORT=”27017″
USER=”fgedu”
PASSWORD=”fgedu123″
AUTH_DB=”admin”
LOG_FILE=”/mongodb/logs/inspection_$(date +%Y%m%d).log”

# 创建日志文件
echo “===== MongoDB日常巡检报告 $(date) =====” > $LOG_FILE

# 检查MongoDB服务状态
echo “检查MongoDB服务状态…” >> $LOG_FILE
systemctl status mongodb >> $LOG_FILE 2>&1

# 检查MongoDB连接
echo “检查MongoDB连接…” >> $LOG_FILE
$MONGODB_HOME/bin/mongosh –host $HOST –port $PORT -u $USER -p $PASSWORD –authenticationDatabase $AUTH_DB –eval “db.adminCommand(‘ping’)” >> $LOG_FILE 2>&1

# 检查数据库状态
echo “检查数据库状态…” >> $LOG_FILE
$MONGODB_HOME/bin/mongosh –host $HOST –port $PORT -u $USER -p $PASSWORD –authenticationDatabase $AUTH_DB –eval “db.serverStatus()” >> $LOG_FILE 2>&1

# 检查复制状态
echo “检查复制状态…” >> $LOG_FILE
$MONGODB_HOME/bin/mongosh –host $HOST –port $PORT -u $USER -p $PASSWORD –authenticationDatabase $AUTH_DB –eval “rs.status()” >> $LOG_FILE 2>&1

# 检查慢查询
echo “检查慢查询…” >> $LOG_FILE
$MONGODB_HOME/bin/mongosh –host $HOST –port $PORT -u $USER -p $PASSWORD –authenticationDatabase $AUTH_DB –eval “db.currentOp({ ‘secs_running’: { ‘$gt’: 1 } })” >> $LOG_FILE 2>&1

# 检查磁盘空间
echo “检查磁盘空间…” >> $LOG_FILE
df -h >> $LOG_FILE

# 检查内存使用
echo “检查内存使用…” >> $LOG_FILE
free -h >> $LOG_FILE

# 检查CPU使用
echo “检查CPU使用…” >> $LOG_FILE
top -b -n 1 >> $LOG_FILE

echo “===== 巡检完成 =====” >> $LOG_FILE
echo “巡检报告已保存到: $LOG_FILE”

3.2 健康检查流程

健康检查流程:

  1. 准备阶段:确定检查内容和工具
  2. 执行阶段:运行健康检查脚本
  3. 分析阶段:分析检查结果,识别问题
  4. 处理阶段:对发现的问题进行处理
  5. 记录阶段:记录检查结果和处理情况
  6. 改进阶段:根据检查结果,提出改进措施

Part04-生产案例与实战讲解

4.1 日常巡检实战

执行日常巡检脚本:

# 执行巡检脚本
bash /mongodb/scripts/daily_inspection.sh

# 输出日志
巡检报告已保存到: /mongodb/logs/inspection_20260408.log

# 查看巡检报告
tail -n 50 /mongodb/logs/inspection_20260408.log

# 输出日志
===== MongoDB日常巡检报告 2026年04月08日 10:00:00 =====
检查MongoDB服务状态…
● mongodb.service – MongoDB Database Server
Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: disabled)
Active: active (running) since 2026-04-07 10:00:00 CST; 1 day ago
Docs: https://docs.mongodb.org/manual
Process: 1234 ExecStart=/mongodb/app/bin/mongod –config /mongodb/app/mongod.conf (code=exited, status=0/SUCCESS)
Main PID: 1234 (mongod)
CGroup: /system.slice/mongodb.service
└─1234 /mongodb/app/bin/mongod –config /mongodb/app/mongod.conf
检查MongoDB连接…
MongoDB shell version v5.0.0
connecting to: mongodb://192.168.1.100:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“12345678-1234-5678-1234-567812345678”) }
MongoDB server version: 5.0.0
{ “ok” : 1 }
检查数据库状态…
{ “host” : “fgedu.net.cn”, “version” : “5.0.0”, “process” : “mongod”, “pid” : 1234, “uptime” : 86400, “uptimeMillis” : 86400000, “uptimeEstimate” : 86400, “localTime” : ISODate(“2026-04-08T10:00:00Z”), “asserts” : { “regular” : 0, “warning” : 0, “msg” : 0, “user” : 0, “rollovers” : 0 }, “connections” : { “current” : 10, “available” : 5000, “totalCreated” : 100 }, “extra_info” : { “note” : “fields vary by platform”, “versionString” : “#1 SMP Tue Mar 1 10:00:00 CST 2026”, “kernelVersion” : “5.4.0-100.el7.x86_64” }, “mem” : { “bits” : 64, “resident” : 2048, “virtual” : 4096, “supported” : true, “mapped” : 1024, “mappedWithJournal” : 2048 }, “metrics” : { “commands” : { “total” : 1000, “failed” : 0, “latencies” : { “commands” : { “latency” : 10, “ops” : 1000 } } }, “cursor” : { “timedOut” : 0, “open” : { “noTimeout” : 0, “pinned” : 0, “total” : 0 } }, “network” : { “bytesIn” : 1048576, “bytesOut” : 2097152, “numRequests” : 1000 }, “operation” : { “insert” : { “total” : 100, “latencies” : { “latency” : 5, “ops” : 100 } }, “query” : { “total” : 500, “latencies” : { “latency” : 8, “ops” : 500 } }, “update” : { “total” : 200, “latencies” : { “latency” : 7, “ops” : 200 } }, “delete” : { “total” : 50, “latencies” : { “latency” : 6, “ops” : 50 } }, “getmore” : { “total” : 100, “latencies” : { “latency” : 3, “ops” : 100 } }, “command” : { “total” : 50, “latencies” : { “latency” : 12, “ops” : 50 } } }, “repl” : { “apply” : { “batches” : { “total” : 100, “ops” : 1000, “latency” : 10 }, “ops” : 1000 }, “buffer” : { “count” : 0, “maxSizeBytes” : 268435456, “sizeBytes” : 0 }, “network” : { “bytes” : 1048576, “ops” : 1000 }, “oplog” : { “insert” : { “total” : 1000, “latencies” : { “latency” : 2, “ops” : 1000 } } }, “retries” : { “network” : 0, “storage” : 0 } }, “storage” : { “freelist” : { “search” : { “misses” : 0, “hits” : 100, “scanned” : 100 } } }, “ttl” : { “deletedDocuments” : 0, “passes” : 10 } }, “ok” : 1 }
检查复制状态…
{ “set” : “fgedu-repl”, “date” : ISODate(“2026-04-08T10:00:00Z”), “myState” : 1, “term” : NumberLong(1), “syncSourceHost” : “”, “syncSourceId” : -1, “heartbeatIntervalMillis” : NumberLong(2000), “majorityVoteCount” : 2, “writeMajorityCount” : 2, “optimes” : { “lastCommittedOpTime” : { “ts” : Timestamp(1712544000, 1), “t” : NumberLong(1) }, “lastCommittedWallTime” : ISODate(“2026-04-08T10:00:00Z”), “readConcernMajorityOpTime” : { “ts” : Timestamp(1712544000, 1), “t” : NumberLong(1) }, “appliedOpTime” : { “ts” : Timestamp(1712544000, 1), “t” : NumberLong(1) }, “durableOpTime” : { “ts” : Timestamp(1712544000, 1), “t” : NumberLong(1) }, “lastAppliedWallTime” : ISODate(“2026-04-08T10:00:00Z”), “lastDurableWallTime” : ISODate(“2026-04-08T10:00:00Z”) }, “lastStableRecoveryTimestamp” : Timestamp(1712544000, 1), “electionCandidateMetrics” : { “lastElectionReason” : “electionTimeout”, “lastElectionDate” : ISODate(“2026-04-07T10:00:00Z”), “electionTerm” : NumberLong(1), “lastCommittedOpTimeAtElection” : { “ts” : Timestamp(0, 0), “t” : NumberLong(-1) }, “lastSeenOpTimeAtElection” : { “ts” : Timestamp(1712457600, 1), “t” : NumberLong(-1) }, “numVotesNeeded” : 2, “priorityAtElection” : 1, “electionTimeoutMillis” : NumberLong(10000), “newTermStartDate” : ISODate(“2026-04-07T10:00:00Z”), “wMajorityWriteAvailabilityDate” : ISODate(“2026-04-07T10:00:01Z”) }, “members” : [ { “_id” : 0, “name” : “192.168.1.100:27017”, “health” : 1, “state” : 1, “stateStr” : “PRIMARY”, “uptime” : 86400, “optime” : { “ts” : Timestamp(1712544000, 1), “t” : NumberLong(1) }, “optimeDate” : ISODate(“2026-04-08T10:00:00Z”), “syncSourceHost” : “”, “syncSourceId” : -1, “infoMessage” : “”, “electionTime” : Timestamp(1712457600, 1), “electionDate” : ISODate(“2026-04-07T10:00:00Z”), “configVersion” : 1, “self” : true, “lastHeartbeatMessage” : “” }, { “_id” : 1, “name” : “192.168.1.101:27017”, “health” : 1, “state” : 2, “stateStr” : “SECONDARY”, “uptime” : 86400, “optime” : { “ts” : Timestamp(1712544000, 1), “t” : NumberLong(1) }, “optimeDate” : ISODate(“2026-04-08T10:00:00Z”), “syncSourceHost” : “192.168.1.100:27017”, “syncSourceId” : 0, “infoMessage” : “”, “configVersion” : 1, “lastHeartbeat” : ISODate(“2026-04-08T10:00:00Z”), “lastHeartbeatRecv” : ISODate(“2026-04-08T10:00:00Z”), “pingMs” : NumberLong(1), “lastHeartbeatMessage” : “” } ], “ok” : 1, “$clusterTime” : { “clusterTime” : Timestamp(1712544000, 1), “signature” : { “hash” : BinData(0, “AAAAAAAAAAAAAAAAAAAAAAAAAAA=”), “keyId” : NumberLong(0) } }, “operationTime” : Timestamp(1712544000, 1) }
检查慢查询…
{ “inprog” : [ ] }
检查磁盘空间…
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 20G 60% /
/dev/sdb1 200G 100G 100G 50% /mongodb
检查内存使用…
total used free shared buff/cache available
Mem: 8G 4G 2G 1G 2G 4G
Swap: 4G 0G 4G
检查CPU使用…
top – 10:00:00 up 1 day, 0:00, 1 user, load average: 0.50, 0.40, 0.30
Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 93.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8388608 total, 2097152 free, 4194304 used, 2097152 buff/cache
KiB Swap: 4194304 total, 4194304 free, 0 used.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 mongodb 20 0 4194304 2097152 1048576 S 5.0 25.0 1:00.00 mongod
===== 巡检完成 =====

from MongoDB视频:www.itpux.com

4.2 健康检查实战

使用mongostat进行实时监控:

# 运行mongostat
/mongodb/app/bin/mongostat

# 输出日志
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 8.0G 2.0G 0|0 0|0 62b 11k 10 Apr 8 10:00:00.000
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 8.0G 2.0G 0|0 0|0 62b 11k 10 Apr 8 10:00:01.000
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 8.0G 2.0G 0|0 0|0 62b 11k 10 Apr 8 10:00:02.000
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 8.0G 2.0G 0|0 0|0 62b 11k 10 Apr 8 10:00:03.000

使用mongotop监控集合操作:

# 运行mongotop
/mongodb/app/bin/mongotop

# 输出日志
2026-04-08T10:00:00Z connected to: mongodb://192.168.1.100:27017
ns total read write 2026-04-08T10:00:00Z
fgedudb.fgedu_users 0ms 0ms 0ms
fgedudb.fgedu_orders 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
2026-04-08T10:00:01Z connected to: mongodb://192.168.1.100:27017
ns total read write 2026-04-08T10:00:01Z
fgedudb.fgedu_users 0ms 0ms 0ms
fgedudb.fgedu_orders 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms

风哥提示:定期进行健康检查,及时发现和解决潜在问题。

Part05-风哥经验总结与分享

5.1 日常巡检最佳实践

风哥建议的日常巡检最佳实践:

  • 制定合理的巡检计划,确保巡检的全面性和及时性
  • 使用自动化工具和脚本,提高巡检效率
  • 建立巡检报告制度,记录巡检结果和问题处理情况
  • 定期分析巡检数据,识别潜在问题和趋势
  • 与监控系统结合,实现实时监控和异常告警
  • 定期更新巡检内容,适应数据库的变化
  • 培训团队成员,提高巡检技能

学习交流加群风哥QQ113257174

5.2 健康检查建议

健康检查建议:

  • 定期检查MongoDB服务状态,确保服务正常运行
  • 监控连接数,避免连接数过高
  • 监控内存和CPU使用情况,确保资源充足
  • 监控磁盘空间,避免磁盘空间不足
  • 监控复制状态,确保副本集正常同步
  • 监控慢查询,优化查询性能
  • 监控索引使用情况,优化索引设计
  • 定期检查安全配置,确保数据库安全

更多视频教程www.fgedu.net.cn

注意事项

  • 日常巡检应在非业务高峰期执行,避免影响业务
  • 巡检脚本应具有错误处理和日志记录功能
  • 定期备份巡检报告,便于后续分析
  • 对发现的问题应及时处理,避免问题扩大
  • 持续优化巡检内容和方法,提高巡检效果
  • 建立巡检知识库,积累巡检经验

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息