Skip to main content

Python library for querying Grafana Loki logs via REST API

Project description

loki-reader-core

A lightweight Python library for querying Grafana Loki logs via REST API.

Features

  • Simple, intuitive client for Loki's HTTP API
  • Supports query, query_range, label discovery, and series matching
  • SSL/TLS support including custom CA certificates for self-signed certs
  • Multi-tenant support via X-Scope-OrgID header
  • Basic authentication
  • Clean dataclass models with to_dict()/from_dict() serialization
  • All timestamps as Unix nanoseconds (Loki's native format)

Installation

From PyPI:

pip install loki-reader-core

From GitHub:

pip install loki-reader-core @ git+ssh://git@github.com/jmazzahacks/loki-reader-core.git@main

Usage

Basic Query

from loki_reader_core import LokiClient
from loki_reader_core.utils import hours_ago_ns, now_ns

client = LokiClient(base_url="https://loki.example.com")

result = client.query_range(
    logql='{job="api-server"} |= "error"',
    start=hours_ago_ns(1),
    end=now_ns(),
    limit=500
)

for stream in result.streams:
    print(f"Labels: {stream.labels}")
    for entry in stream.entries:
        print(f"  [{entry.timestamp}] {entry.message}")

With Authentication and Self-Signed Certificates

client = LokiClient(
    base_url="https://loki.internal.company.com:8443",
    auth=("username", "password"),
    ca_cert="/path/to/ca.pem"
)

Multi-Tenant Setup

client = LokiClient(
    base_url="https://loki.example.com",
    org_id="tenant-1"
)

Exploring Labels

labels = client.get_labels()
values = client.get_label_values("application")
series = client.get_series(match=['{application="my-app"}'])

Context Manager

with LokiClient(base_url="https://loki.example.com") as client:
    result = client.query(logql='{job="api"}')

API Reference

LokiClient

Parameter Type Default Description
base_url str required Loki server URL
auth tuple[str, str] None Basic auth (username, password)
org_id str None X-Scope-OrgID for multi-tenant
ca_cert str None Path to CA certificate PEM file
verify_ssl bool True Set False to disable SSL verification
timeout int 30 Request timeout in seconds

Methods

Method Description
query(logql, time, limit) Instant query at a single point in time
query_range(logql, start, end, limit, direction) Query across a time range
get_labels(start, end) List available label names
get_label_values(label, start, end) List values for a specific label
get_series(match, start, end) List streams matching selectors

Timestamp Utilities

from loki_reader_core.utils import (
    now_ns,          # Current time as nanoseconds
    seconds_to_ns,   # Convert Unix seconds to nanoseconds
    ns_to_seconds,   # Convert nanoseconds to Unix seconds
    minutes_ago_ns,  # Timestamp N minutes ago
    hours_ago_ns,    # Timestamp N hours ago
    days_ago_ns,     # Timestamp N days ago
)

Development

Setup

# Create virtual environment
python -m venv .

# Activate virtual environment
source bin/activate

# Install dependencies
pip install -r dev-requirements.txt
pip install -e .

Running Tests

source bin/activate
pytest tests/ -v

License

MIT

Author

Jason Byteforge (@jmazzahacks)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

loki_reader_core-0.2.0.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

loki_reader_core-0.2.0-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file loki_reader_core-0.2.0.tar.gz.

File metadata

  • Download URL: loki_reader_core-0.2.0.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for loki_reader_core-0.2.0.tar.gz
Algorithm Hash digest
SHA256 79bd06024913cf3285dc65aa56d0cd49e85dba23801271ae17a962a1018606de
MD5 8c58973bc7a42ce6740d8098f35d5389
BLAKE2b-256 52d167e6239968fdd54e471810628ee5252565ebccc128482773cbdf57a4a0e7

See more details on using hashes here.

File details

Details for the file loki_reader_core-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for loki_reader_core-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 afa99f419d666762ffb6e9a48268c45a82d8b8a3afd68df513900ef715cc39e9
MD5 977ce06c4acb49270f2f795da1d79142
BLAKE2b-256 695f44bc66221b6cb79b2cb34e862067b2355db702fa794e9750736b65abc436

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page