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
@spandecorator 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
RateLimitMetricsandSloMetricshelpers - Request context: contextvars-based
RequestContextpropagation across async boundaries - Errors:
classify_error()/ErrorClassifierbuckets intoserver_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 atINFO.- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19c6c4e1e0bb44e170ea2a906935a149f2289420290942c7166ac081b512c6c5
|
|
| MD5 |
9aa01b3d1d2288c3199b7e26b17dad91
|
|
| BLAKE2b-256 |
9033db9176417d2722d28920bb5d94b405b5b35fd522a630d0289a9550fd0e90
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4cd41d74fe54514bb3978d364e486a90f5bfd4909fe853171be9cb26a561134
|
|
| MD5 |
3ae5c086113b63431b0265a2692c1422
|
|
| BLAKE2b-256 |
48c4e400e015aa2de78b6e7249493471cca2e86780a8fbcdeb75df4473b77b7a
|