Monitoring with Atlas metrics in MongoDB - Time & Space Complexity
When monitoring MongoDB with Atlas metrics, we want to understand how the cost of gathering and processing metrics changes as the amount of data grows.
We ask: How does the time to collect and analyze metrics scale with the number of monitored database operations?
Analyze the time complexity of this MongoDB aggregation to get operation counts per collection.
db.system.profile.aggregate([
{ $match: { ns: { $exists: true } } },
{ $group: { _id: "$ns", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
])
This code groups profiling data by namespace (collection) and counts operations per collection, then sorts by count.
Look for repeated work done on data.
- Primary operation: Scanning all profiling documents to group by collection.
- How many times: Once per profiling document, which grows with the number of operations logged.
As the number of profiling documents increases, the aggregation must process each one.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 document reads and group updates |
| 100 | About 100 document reads and group updates |
| 1000 | About 1000 document reads and group updates |
Pattern observation: The work grows roughly in direct proportion to the number of profiling entries.
Time Complexity: O(n)
This means the time to process metrics grows linearly with the number of profiling records.
[X] Wrong: "The aggregation runs instantly no matter how many profiling entries exist."
[OK] Correct: Each profiling document must be read and processed, so more data means more work and longer time.
Understanding how monitoring queries scale helps you design efficient dashboards and alerts that stay fast as your data grows.
What if we added an index on the "ns" field? How would that affect the time complexity of this aggregation?
Practice
Solution
Step 1: Understand the role of monitoring
Monitoring helps watch how well the database is working and if there are any problems.Step 2: Identify the purpose of Atlas metrics
Atlas metrics provide data about database health and performance to keep it running smoothly.Final Answer:
To track database health and performance -> Option AQuick Check:
Monitoring = Track health and performance [OK]
- Confusing monitoring with query writing
- Thinking monitoring creates users
- Assuming monitoring is for manual backups
Solution
Step 1: Identify the HTTP method for fetching data
To get metrics, we use the GET method because it retrieves information.Step 2: Confirm the API endpoint format
The endpoint includes group and process IDs and ends with /measurements to fetch metrics.Final Answer:
GET /api/atlas/v1.0/groups/{GROUP-ID}/processes/{PROCESS-ID}/measurements -> Option AQuick Check:
GET method fetches data [OK]
- Using POST instead of GET to fetch data
- Confusing DELETE or PUT with data retrieval
- Missing required path parameters
curl -X GET \ 'https://cloud.mongodb.com/api/atlas/v1.0/groups/12345/processes/cluster0-shard-00-00/measurements?granularity=PT1M&metricNames=CPU_USER'
What does the response mainly contain?
Solution
Step 1: Analyze the API parameters
The metricNames=CPU_USER means it requests CPU usage by user processes.Step 2: Understand granularity=PT1M
This means data is sampled every 1 minute (PT1M is ISO 8601 duration for 1 minute).Final Answer:
A list of CPU user usage values sampled every minute -> Option DQuick Check:
CPU_USER metric with 1-minute samples = CPU usage data [OK]
- Thinking it returns user accounts
- Confusing metrics with backups
- Assuming error logs are returned
curl -X GET \ 'https://cloud.mongodb.com/api/atlas/v1.0/groups/12345/processes/cluster0-shard-00-00/measurements?granularity=1m&metricNames=CPU_USER'
What is the likely cause?
Solution
Step 1: Check the granularity parameter format
The API expects granularity in ISO 8601 duration format, e.g., PT1M for 1 minute.Step 2: Identify the error cause
Using '1m' instead of 'PT1M' causes the 400 Bad Request error due to invalid parameter format.Final Answer:
Incorrect granularity format; should be ISO 8601 duration like PT1M -> Option BQuick Check:
Granularity format must be ISO 8601 [OK]
- Using shorthand time like '1m' instead of 'PT1M'
- Forgetting API key causes 401, not 400
- Using wrong HTTP method causes 405, not 400
Solution
Step 1: Understand metricNames format
Multiple metrics are separated by commas, so 'CPU_USER,MEMORY_USAGE' is correct.Step 2: Use correct granularity format
Granularity must be ISO 8601 duration, so 'PT5M' means 5 minutes.Final Answer:
metricNames=CPU_USER,MEMORY_USAGE&granularity=PT5M -> Option CQuick Check:
Comma separates metrics; PT5M means 5 minutes [OK]
- Using semicolons or plus signs instead of commas
- Using '5m' or '5minutes' instead of PT5M
- Mixing wrong separators and time formats
Ready to prove it?
Pass the test and this pattern moves unknown
