Skip to main content

omnixys-observability

Omnixys shared observability package — OpenTelemetry tracing, structlog structured logging, Prometheus metrics, request-context propagation and error classification.

Installation

pip install omnixys-observability

Features

  • Tracing: OTLP HTTP trace export with ratio/always-on sampling, FastAPI/httpx/logging auto-instrumentation, and a @span decorator for functions and methods
  • Logging: structlog JSON (or colored pretty) console output, OTLP log export, context enrichment (request/correlation id, user, tenant, trace ids), and recursive secret redaction
  • Metrics: Prometheus counters/histograms/gauges for HTTP, GraphQL, DB, Kafka, cache, rate limiting, auth and outbox — plus RateLimitMetrics and SloMetrics helpers
  • Request context: contextvars-based RequestContext propagation across async boundaries
  • Errors: classify_error()/ErrorClassifier buckets into server_error / client_error / internal_error
  • Runtime: configure_observability() one-call setup of traces + logs with a shared service resource

Usage

One-call setup

from observability import configure_observability, shutdown_observability

configure_observability(
    service_name="ticketing",
    otlp_endpoint="http://collector:4318",
    environment="production",
)

Structured logging

from observability import configure_logging, get_logger, RequestContext, set_request_context

configure_logging("INFO", service_name="ticketing")

set_request_context(RequestContext(request_id="r1", user_id="u1", tenant_id="t1"))
log = get_logger("ticketing")
log.info("event_created", event_id="e1")
log.error("payment_failed", status=503, token="sk_live_...")  # token -> [REDACTED]

LOG_PRETTY=true forces colored console output; production defaults to JSON.

Console vs. Loki levels

The console threshold and the OTLP (Loki) threshold are independent:

  • configure_logging("INFO", ...) keeps the console at INFO.
  • The OTLP export defaults to DEBUG, so debug logs still appear in Grafana/Loki in production while the console stays quiet.

Override the Loki threshold via the OTEL_LOG_LEVEL environment variable or the otel_log_level parameter (values: TRACE, DEBUG, INFO, WARNING, ERROR; invalid values fall back to DEBUG):

OTEL_LOG_LEVEL=WARNING   # Loki receives WARNING and above only
configure_logging("INFO", service_name="ticketing", otel_log_level="DEBUG")

Spans

from observability import span

@span
async def process_event(event_id: str) -> None: ...

@span(name="billing.charge", attributes={"provider": "stripe"})
def charge(customer_id: str) -> None: ...

Metrics

from observability import SloMetrics, RateLimitMetrics, http_requests_total

http_requests_total.labels(method="POST", path="/events", status_code="201").inc()

slo = SloMetrics()
slo.record_success()
slo.record_error()
slo.error_rate()          # 0.5

rl = RateLimitMetrics()
rl.hit("sms:user:42")
rl.get("sms:user:42")     # 1

Error classification

from observability import classify_error

classify_error(HTTPException(status_code=503))   # "server_error"
classify_error(HTTPException(status_code=404))   # "client_error"
classify_error(RuntimeError("boom"))             # "internal_error"

Testing

uv run pytest -q          # 30 tests
uv run ruff check .       # lint
uv run mypy src/          # strict typing

License

GPL-3.0-or-later

Download files

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

Source Distribution

omnixys_observability-4.0.1.tar.gz (53.6 kB view details)

Uploaded Source

Built Distribution

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

omnixys_observability-4.0.1-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file omnixys_observability-4.0.1.tar.gz.

File metadata

  • Download URL: omnixys_observability-4.0.1.tar.gz
  • Upload date:
  • Size: 53.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for omnixys_observability-4.0.1.tar.gz
Algorithm Hash digest
SHA256 19c6c4e1e0bb44e170ea2a906935a149f2289420290942c7166ac081b512c6c5
MD5 9aa01b3d1d2288c3199b7e26b17dad91
BLAKE2b-256 9033db9176417d2722d28920bb5d94b405b5b35fd522a630d0289a9550fd0e90

See more details on using hashes here.

File details

Details for the file omnixys_observability-4.0.1-py3-none-any.whl.

File metadata

  • Download URL: omnixys_observability-4.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for omnixys_observability-4.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e4cd41d74fe54514bb3978d364e486a90f5bfd4909fe853171be9cb26a561134
MD5 3ae5c086113b63431b0265a2692c1422
BLAKE2b-256 48c4e400e015aa2de78b6e7249493471cca2e86780a8fbcdeb75df4473b77b7a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

4.0.1 This release

2 files

4.0.0

2 files

3.0.0

2 files

2.0.4

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page