Of course! The term "python mongostatus" isn't a single, built-in command, but it refers to the common task of checking the status and health of a MongoDB database using Python. This is a critical operation for any application that relies on MongoDB.

I'll guide you through the best ways to achieve this, from the most common library to more advanced monitoring techniques.
The Core Idea: What is "Status"?
When we check the "status" of a MongoDB server, we usually want to know:
- Is it running? Can we connect to it?
- Is it healthy? Is it under too much load?
- How much space is left? Are we running out of disk?
- How many clients are connected?
- What is its performance like? (Query rates, etc.)
The best tool for this in Python is the official pymongo library.
Method 1: The Standard pymongo Approach (Recommended)
This is the most direct and common way to check the status of a MongoDB instance from a Python script.

Step 1: Install pymongo and dnspython
If you haven't already, you'll need to install the necessary libraries. dnspython is often required for connection handling.
pip install pymongo dnspython
Step 2: Connect and Check Status
You can check the status by simply attempting to connect and running a simple command. The ping command is perfect for this, as it's lightweight and designed for health checks.
Here is a complete, well-commented Python script.
import pymongo
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure, ServerSelectionTimeoutError
def check_mongo_status(connection_string="mongodb://localhost:27017/", timeout=5):
"""
Checks the status of a MongoDB server.
Args:
connection_string (str): The MongoDB connection string.
timeout (int): Connection timeout in seconds.
Returns:
dict: A dictionary containing the status and details.
"""
status = {
"status": "unknown",
"details": {},
"error": None
}
try:
# The "serverSelectionTimeoutMS" option is crucial for preventing
# the script from hanging indefinitely if the server is down.
client = MongoClient(
connection_string,
serverSelectionTimeoutMS=timeout * 1000 # Convert to milliseconds
)
# The ismaster command is cheap and does not require auth.
# It's the recommended way to check the status of a server.
# The 'ping' command is also a good alternative.
server_info = client.server_info()
# If the command didn't raise an exception, the server is up.
status["status"] = "connected"
status["details"] = {
"host": client.address[0],
"port": client.address[1],
"version": server_info.get('version', 'N/A'),
"ok": server_info.get('ok', 0) # Should be 1.0
}
except ConnectionFailure as e:
status["status"] = "failed"
status["error"] = f"Connection failed: {e}"
except ServerSelectionTimeoutError as e:
status["status"] = "timeout"
status["error"] = f"Server selection timed out after {timeout}s: {e}"
except Exception as e:
status["status"] = "error"
status["error"] = f"An unexpected error occurred: {e}"
finally:
# Ensure the client is closed
if 'client' in locals():
client.close()
return status
# --- Example Usage ---
if __name__ == "__main__":
# Replace with your MongoDB connection string if it's not local
mongo_uri = "mongodb://localhost:27017/"
print("Checking MongoDB status...")
result = check_mongo_status(mongo_uri)
if result["status"] == "connected":
print("\n✅ MongoDB is UP and running!")
print(f" Host: {result['details']['host']}:{result['details']['port']}")
print(f" Version: {result['details']['version']}")
else:
print("\n❌ MongoDB is DOWN or unreachable.")
print(f" Status: {result['status'].upper()}")
print(f" Error: {result['error']}")
What this script does:
- Imports: It imports the necessary parts from
pymongo. - Handles Errors: It uses
try...exceptblocks to gracefully handle connection failures, timeouts, and other network issues. This is crucial for a robust status check. server_info(): This command is sent to the server. If it succeeds, it means the server is responsive and healthy. It also returns useful metadata like the MongoDB version.serverSelectionTimeoutMS: This is a critical parameter. It tells the driver to stop trying to connect after a certain number of milliseconds, preventing your script from hanging forever if the server is down.- Clean-up: The
finallyblock ensures that theMongoClientis always closed, freeing up resources.
Method 2: Getting More Detailed Status (Admin Commands)
If you want more detailed information (like database stats, memory usage, etc.), you can run admin commands. This usually requires authentication if your MongoDB instance has security enabled.
import pymongo
def get_detailed_mongo_status(connection_string="mongodb://admin:password@localhost:27017/"):
"""
Gets detailed status information from a MongoDB server using admin commands.
"""
try:
client = MongoClient(connection_string, serverSelectionTimeoutMS=2000)
# Run the serverStatus command
# This command provides a wealth of information about the server
server_status = client.admin.command('serverStatus')
print("--- MongoDB Detailed Status ---")
print(f"Host: {client.address[0]}:{client.address[1]}")
print(f"Version: {server_status.get('version', 'N/A')}")
print(f"Uptime: {server_status.get('uptime', 0)} seconds")
# Example: Get connections info
connections = server_status.get('connections', {})
print(f"\n--- Connections ---")
print(f"Current: {connections.get('current', 0)}")
print(f"Available: {connections.get('available', 0)}")
# Example: Get memory usage info (requires --auth or running without security)
mem = server_status.get('mem', {})
print(f"\n--- Memory Usage ---")
print(f"Resident: {mem.get('resident', 0)} MB")
print(f"Virtual: {mem.get('virtual', 0)} MB")
print(f"Mapped: {mem.get('mapped', 0)} MB")
# Example: Get database stats
db = client['admin']
db_stats = db.command('dbStats')
print(f"\n--- Database 'admin' Stats ---")
print(f"Data Size: {db_stats.get('dataSize', 0)} MB")
print(f"Storage Size: {db_stats.get('storageSize', 0)} MB")
print(f"Index Size: {db_stats.get('indexSize', 0)} MB")
client.close()
except Exception as e:
print(f"Error getting detailed status: {e}")
# --- Example Usage ---
if __name__ == "__main__":
# IMPORTANT: Replace with your actual admin credentials
# mongo_uri = "mongodb://admin:your_strong_password@localhost:27017/"
# get_detailed_mongo_status(mongo_uri)
print("Uncomment the lines above and provide credentials to run this example.")
Method 3: The "Production" Way - Using MongoDB's Built-in Monitoring
For any serious application, you should not build your own polling mechanism. Instead, use the powerful monitoring tools that come with MongoDB itself.
MongoDB Atlas (Cloud)
If you are using MongoDB Atlas (the cloud service), it has a world-class monitoring dashboard. You can:
- View CPU, memory, and disk usage in real-time.
- See query performance and slow queries.
- Set up alerts for when metrics cross certain thresholds.
- This is the recommended approach for any cloud-hosted database.
MongoDB Enterprise / Community (Self-Hosted)
For self-hosted instances, you have several options:
- MongoDB Cloud Manager: A free and paid service for monitoring, backup, and automation of your self-hosted MongoDB deployments.
- Ops Manager: The enterprise-grade version of Cloud Manager.
- Prometheus + Grafana: This is the most popular open-source stack for monitoring. You can use the MongoDB Exporter for Prometheus, which scrapes MongoDB's metrics and exposes them in a format Prometheus can understand. You then use Grafana to create beautiful, interactive dashboards from this data.
Why is this better than a Python script?
- Proactive: It can alert you before a problem becomes critical.
- Historical Data: It stores metrics over time, allowing you to see trends and debug past issues.
- Scalability: It's designed to monitor hundreds or thousands of servers.
- No Custom Code: You leverage battle-tested, dedicated tools for the job.
Summary
| Method | Best For | Pros | Cons |
|---|---|---|---|
Python pymongo |
Simple health checks, scripts, CI/CD pipelines. | Simple, no extra tools, great for automation. | Limited detail, not proactive, doesn't store history. |
| Admin Commands | Getting on-demand, detailed diagnostics. | Rich information about server internals. | Requires auth, can be heavy, not for continuous monitoring. |
| MongoDB Atlas/Cloud Manager | Production applications (Cloud). | Powerful dashboards, alerts, historical data, easy to use. | Costly for advanced features, tied to a cloud provider. |
| Prometheus/Grafana | Production applications (Self-Hosted). | Industry standard, highly customizable, proactive alerts, scalable. | Requires setup and maintenance of a monitoring stack. |
For your immediate need of a "python mongostatus" script, Method 1 is the perfect solution. For any long-term, production environment, invest time in setting up Method 3.
