Infrastructure monitoring in Elasticsearch - Time & Space Complexity
When monitoring infrastructure with Elasticsearch, we want to know how the time to get results changes as we add more data.
We ask: How does searching logs or metrics grow when the system gets bigger?
Analyze the time complexity of the following Elasticsearch query for monitoring.
GET /infrastructure-logs/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "host.name": "server1" } },
{ "range": { "@timestamp": { "gte": "now-1h" } } }
]
}
}
}
This query finds logs from one server in the last hour to monitor its status.
Look for repeated work done by Elasticsearch when running this query.
- Primary operation: Scanning log entries matching the filters.
- How many times: Once for each log entry in the time range and server.
As the number of logs grows, the work to find matching entries grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 logs | About 10 checks |
| 100 logs | About 100 checks |
| 1000 logs | About 1000 checks |
Pattern observation: The work grows roughly in direct proportion to the number of logs checked.
Time Complexity: O(n)
This means the time to get results grows linearly with the number of logs to check.
[X] Wrong: "The query time stays the same no matter how many logs there are."
[OK] Correct: More logs mean more data to scan, so the query takes longer as logs increase.
Understanding how query time grows helps you design better monitoring and explain system behavior clearly.
What if we added an index on the "host.name" field? How would the time complexity change?