Skip to main content

Log Range Query

A log range query evaluates a LogQL expression over a time range, returning log streams or a metric matrix suitable for graphing.

Endpoint: GET https://euw1-01.l.xscalerlabs.com/api/v1/logs/query_range


Parameters

ParameterRequiredDescription
queryYesLogQL expression
startYesRange start — RFC3339 or Unix timestamp
endYesRange end — RFC3339 or Unix timestamp
limitNoMaximum log lines for log queries. Default: 100.
stepNoResolution step for metric queries — e.g. 60s, 5m.
directionNoforward or backward (default) for log queries.
timeoutNoQuery timeout override. Maximum: 2m.

Examples

Fetch logs over a time window

curl "https://euw1-01.l.xscalerlabs.com/api/v1/logs/query_range" \
-H "Authorization: Bearer <token>" \
-H "X-Scope-OrgID: <tenant-id>" \
--data-urlencode 'query={job="app"} |= "error"' \
--data-urlencode 'start=2024-01-01T00:00:00Z' \
--data-urlencode 'end=2024-01-01T01:00:00Z' \
--data-urlencode 'limit=200' \
--data-urlencode 'direction=forward'

Error rate over the last hour (metric query)

curl "https://euw1-01.l.xscalerlabs.com/api/v1/logs/query_range" \
-H "Authorization: Bearer <token>" \
-H "X-Scope-OrgID: <tenant-id>" \
--data-urlencode 'query=sum by (service) (rate({job="app"} |= "error" [5m]))' \
--data-urlencode 'start=2024-01-01T00:00:00Z' \
--data-urlencode 'end=2024-01-01T01:00:00Z' \
--data-urlencode 'step=60s'

Log volume by level over 24 hours

curl "https://euw1-01.l.xscalerlabs.com/api/v1/logs/query_range" \
-H "Authorization: Bearer <token>" \
-H "X-Scope-OrgID: <tenant-id>" \
--data-urlencode 'query=sum by (level) (count_over_time({job="app"} | json [5m]))' \
--data-urlencode 'start=2024-01-01T00:00:00Z' \
--data-urlencode 'end=2024-01-02T00:00:00Z' \
--data-urlencode 'step=5m'

Response — log streams

{
"status": "success",
"data": {
"resultType": "streams",
"result": [
{
"stream": { "job": "app", "level": "error" },
"values": [
["1716300123000000000", "database connection failed"],
["1716300456000000000", "timeout waiting for upstream"]
]
}
]
}
}

Response — metric matrix

{
"status": "success",
"data": {
"resultType": "matrix",
"result": [
{
"metric": { "service": "api" },
"values": [
[1704067200, "1.2"],
[1704067260, "2.8"],
[1704067320, "0.9"]
]
}
]
}
}

Choosing the right step

Rule of thumbRationale
Aim for 200–400 data points per graphstep = (end - start) / 300 is a good default.
Match the range to at least 4× the steprate({...}[5m]) works well with a step of 60s90s.
Wider step = faster queryFor long time ranges, increase step to reduce query cost.

Example: 24-hour graph

# 24 hours / 300 points = 288s ≈ 5m step
--data-urlencode 'step=5m'

Example: 7-day graph

# 7 days / 300 points ≈ 2016s ≈ 30m step
--data-urlencode 'step=30m'