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 (coming soon):

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

Building and Publishing

./build-publish.sh

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.0.1.tar.gz (11.1 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.0.1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: loki_reader_core-0.0.1.tar.gz
  • Upload date:
  • Size: 11.1 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.0.1.tar.gz
Algorithm Hash digest
SHA256 3b1fb1903e308d05e23f587984e706a76fd3e8077402880c4e4ad0a7821bc338
MD5 0d2112d67fe6d20450638d82033fcd99
BLAKE2b-256 7fa5b7f6149a12de53f3d16e41022e81cdc97b53e06788105708c87799751e24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for loki_reader_core-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 94128d8744b0233144f778bf517f22753effda3928a507211fef1076ebe917eb
MD5 00fed5ddd16bbaf5a29fddbbd37c934e
BLAKE2b-256 e83bf8f540f435f1ad56dd0bd69dc8b4cd7c77e4374d035ea39bf54ed6ad7cb6

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