Skip to main content

Qx observability: structlog logging, OpenTelemetry tracing, Prometheus metrics, health probes

Project description

qx-observability

One-call observability setup for Qx services — structured logging (structlog), distributed tracing (OpenTelemetry), Prometheus metrics, and health probes.

What lives here

  • qx.observability.setup_observability — configures logging and tracing, returns a (Metrics, HealthRegistry) pair. This is the only call most services need.
  • qx.observability.Metrics — Prometheus counter/histogram wrapper. Pass a custom CollectorRegistry in tests to avoid collisions.
  • qx.observability.HealthRegistry — register named health checks; aggregates their results for /healthz and /readyz.
  • qx.observability.configure_logging — structlog pipeline with JSON output in production and pretty console output in development.
  • qx.observability.configure_tracing — OpenTelemetry SDK setup; exports to an OTLP endpoint (Tempo, Jaeger, etc.) or console.
  • qx.observability.get_logger — returns a bound structlog logger for a given name.
  • qx.observability.get_tracer — returns an OTel Tracer; use with trace_span.
  • qx.observability.trace_span — async context manager that wraps a block in an OTel span.
  • qx.observability.inject_context / extract_context — propagate trace context through message headers (W3C TraceContext format).
  • qx.observability.MetricsBehavior / TracingBehavior — Mediator pipeline behaviors that instrument every command/query automatically.

Usage

from qx.observability import setup_observability

# In application bootstrap
metrics, health = setup_observability(
    settings,
    otlp_endpoint="http://tempo:4317",
)

# Register a health check
@health.check("database")
async def _db_check() -> bool:
    return await db.ping()

# In any module
from qx.observability import get_logger, trace_span

log = get_logger(__name__)

async def do_work() -> None:
    async with trace_span("my-operation"):
        log.info("doing work", key="value")

Mediator pipeline wiring

from qx.cqrs import compose
from qx.observability import MetricsBehavior, TracingBehavior

pipeline = compose(
    TracingBehavior(get_tracer("mediator")),
    MetricsBehavior(metrics),
)
mediator = Mediator(container, pipeline=pipeline)

Design rules

  • Logging is structured (key-value) everywhere — no f-string log messages in framework code.
  • setup_observability() is idempotent in tests when a fresh CollectorRegistry is passed via metrics_registry.
  • Trace context is propagated automatically via RequestContextMiddleware on ingress and inject_context on egress (outbox relay, NATS publisher).

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

qx_observability-1.1.0.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

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

qx_observability-1.1.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file qx_observability-1.1.0.tar.gz.

File metadata

  • Download URL: qx_observability-1.1.0.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qx_observability-1.1.0.tar.gz
Algorithm Hash digest
SHA256 c4399803b6eb9e7a6bf3fd9756a6a53bbfb1c4ac083585adf3634b21f462515f
MD5 adf3bd71b0d2c4dd85c6b26dd161dfcf
BLAKE2b-256 2b7d5becd38daa844c31747fa3b5b2d67a9d5cd2334b8a76f91b7505613d6c2c

See more details on using hashes here.

File details

Details for the file qx_observability-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for qx_observability-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 faef3234231f6ce104e44cee0035b43d7d543a703c9563cc9f55af6120ac1efc
MD5 5b50834b0e290e87e83e8ff79ae81e9d
BLAKE2b-256 6f726c2e16084c4df21e31b0eecfc505297b48e8b6fa6eaf097dae81ba4749a9

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