Loki
Basics
Every REST API has a base URL.
For Loki:
LOKI_URL = "https://loki.officevg.com/loki/api/v1/query"
https://loki.officevg.com→ host/loki/api/v1/query→ endpoint for querying logs.
Resources / Paths
Loki exposes different paths (resources) for different operations:
/loki/api/v1/query→ Instant query./loki/api/v1/query_range→ Range query./loki/api/v1/labels→ Get all labels./loki/api/v1/series→ Get time series.
Parameters
Parameters are sent in the URL (query string).
Example:
params = { "query": '{container="superset"}' }
queryis the LogQL expression.Other optional parameters (for
/query_range):start,end→ Time range.limit→ Number of log lines.
Headers
Extra metadata sent with request.
Example if Loki required
Authorization:headers = {"Authorization": "Bearer <token>"} response = requests.get(LOKI_URL, params=params, headers=headers)
Request Body
GETusually doesn’t send a body (only params).For Loki’s
POST /query_range, you can pass JSON body:response = requests.post( "https://loki.officevg.com/loki/api/v1/query_range", json={"query": '{container="superset"}', "limit": 100} )
same code python
import requests
# Loki endpoint
LOKI_URL = "https://loki.officevg.com/loki/api/v1/query"
# LogQL query - change this based on your actual labels
logql_query = '{container="superset"}'
# Prepare query parameters
params = {
"query": logql_query
}
try:
response = requests.get(LOKI_URL, params=params)
# Raise an exception if response code is not 200
response.raise_for_status()
# Parse JSON response
data = response.json()
# Extract and print log entries
for stream in data.get("data", {}).get("result", []):
print(f"Labels: {stream.get('stream')}")
for log in stream.get("values", []):
timestamp, log_line = log
print(f"{timestamp}: {log_line}")
except requests.exceptions.RequestException as e:
print(f"Error querying Loki: {e}")
Last updated
