Loki

chevron-rightBasicshashtag

  • 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"}'
    }
    

  • query is 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

  • GET usually 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}
    )
    

chevron-rightHttpie Outputhashtag

chevron-rightsame code pythonhashtag

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