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.2.tar.gz (18.0 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.2-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: loki_reader_core-0.2.2.tar.gz
  • Upload date:
  • Size: 18.0 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.2.tar.gz
Algorithm Hash digest
SHA256 44bacb437a166cb386cd37c3554ced3503e541b041707186f4917e994bd378f5
MD5 f1b5c10b7c331fd92d780aa336a7842e
BLAKE2b-256 c80a2bb3ceb91c2446a94a3fa4345867eb818a4dc7332586afc5b118993a00dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for loki_reader_core-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d353a280f58767a1082514d7573b90f56b4679ea2a103d2f250c34ed115c3cfc
MD5 ac253a5328a214ac7ebca7381415ab3a
BLAKE2b-256 35f0ea0ce668861c0ce73481235ec2c78509c8716279d482004a4dbf456e7f64

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