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.1.0.tar.gz (13.4 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.1.0-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: loki_reader_core-0.1.0.tar.gz
  • Upload date:
  • Size: 13.4 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.1.0.tar.gz
Algorithm Hash digest
SHA256 abc7e2fff11e84fc987d6c9eda5e48441503c53062def81c0ddc4ca9e75ced63
MD5 7303717675376a4cfe61e55724ab5ef2
BLAKE2b-256 b7566166c12cde3705a5e9359fe3e0a05d80cde1942a5d2b04d69c167e1e5c06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for loki_reader_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f3134cd9e5981e97d7b369fa78f274447b0365a6b78397e9eaa1a16fbd4fae9d
MD5 e28284a6c67469f86bf3c768a478598a
BLAKE2b-256 5dc1a74cfd88228cf44d818f6095ba0206f60d57c629d33700c1ac04fbf353d3

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