This guide covers essential MongoDB monitoring and maintenance concepts commonly asked in technical interviews. Each question includes detailed answers and practical examples.
Key MongoDB metrics to monitor:
MongoDB monitoring implementation:
# Basic monitoring
mongostat --uri="mongodb://localhost:27017"
# Detailed monitoring
mongostat --uri="mongodb://localhost:27017" \
--discover \
--json \
--rowcount 10
# Custom metrics
mongostat --uri="mongodb://localhost:27017" \
--rowcount 5 \
--discover \
--json \
--all
# Collection-level monitoring
mongotop --uri="mongodb://localhost:27017"
# Detailed collection stats
mongotop --uri="mongodb://localhost:27017" \
--json \
--rowcount 5
# Namespace-specific monitoring
mongotop --uri="mongodb://localhost:27017" \
--rowcount 5 \
--json \
myapp.users
Custom monitoring implementation:
# Server status
db.serverStatus()
# Current operations
db.currentOp()
# Database stats
db.stats()
# Collection stats
db.users.stats()
# Replication status
rs.status()
# Sharding status
sh.status()
#!/bin/bash
# Monitoring configuration
MONGO_URI="mongodb://localhost:27017"
LOG_FILE="/var/log/mongodb/monitoring.log"
ALERT_THRESHOLD=80
# Check memory usage
MEMORY_USAGE=$(mongosh "$MONGO_URI" --eval "db.serverStatus().mem.resident" --quiet)
if [ "$MEMORY_USAGE" -gt "$ALERT_THRESHOLD" ]; then
echo "High memory usage: $MEMORY_USAGE%" >> "$LOG_FILE"
fi
# Check disk space
DISK_USAGE=$(df -h /data/db | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt "$ALERT_THRESHOLD" ]; then
echo "High disk usage: $DISK_USAGE%" >> "$LOG_FILE"
fi
# Check replication lag
REPL_LAG=$(mongosh "$MONGO_URI" --eval "rs.status().members[1].lag" --quiet)
if [ "$REPL_LAG" -gt 10 ]; then
echo "High replication lag: $REPL_LAG seconds" >> "$LOG_FILE"
fi
Maintenance procedure implementation:
# List all indexes
db.users.getIndexes()
# Create index
db.users.createIndex({ "email": 1 }, { unique: true })
# Drop index
db.users.dropIndex("email_1")
# Rebuild index
db.users.reIndex()
# Compact collection
db.runCommand({ compact: "users" })
# Repair database
db.repairDatabase()
# Check database integrity
db.runCommand({ validate: "users" })
# Clean up orphaned documents
db.users.remove({ _id: { $exists: false } })
# Update statistics
db.users.stats()
# Compact database
db.runCommand({ compact: "myapp" })
Follow these monitoring and maintenance best practices:
# Set up monitoring alerts
db.adminCommand({
setParameter: 1,
slowms: 100,
logLevel: 1
})
# Configure profiler
db.setProfilingLevel(1, { slowms: 100 })
# Set up monitoring thresholds
MONITORING_THRESHOLDS = {
"memory_usage": 80,
"disk_usage": 85,
"replication_lag": 10,
"connection_count": 1000
}
# Implement monitoring checks
function checkSystemHealth() {
const status = db.serverStatus();
if (status.mem.resident > MONITORING_THRESHOLDS.memory_usage) {
print("High memory usage alert");
}
// Add more checks...
}
# Daily maintenance tasks
0 2 * * * /scripts/mongodb-daily-maintenance.sh
# Weekly maintenance tasks
0 3 * * 0 /scripts/mongodb-weekly-maintenance.sh
# Monthly maintenance tasks
0 4 1 * * /scripts/mongodb-monthly-maintenance.sh
# Maintenance script example
#!/bin/bash
mongosh "$MONGO_URI" --eval "
// Check and repair indexes
db.users.reIndex();
// Update statistics
db.users.stats();
// Clean up old data
db.users.deleteMany({
createdAt: { $lt: new Date(Date.now() - 90*24*60*60*1000) }
});
"
Continue your MongoDB interview preparation with: