hexastack-otel
Vendor-agnostic OpenTelemetry distributed tracing and CQRS telemetry middleware for Hexastack.
Part of the Hexastack Framework.
1. Architectural Overview
hexastack-otel provides pure hexagonal port interfaces for distributed tracing (TracingPort) and metrics collection (MetricsPort).
- Distributed Tracing: Backed by the official OpenTelemetry Python SDK (
OtelTracingAdapter,InMemoryTracingAdapter), linking correlation IDs and creating spans across CQRS Command/Query executions, HTTP endpoints, and gRPC RPCs. - Prometheus Metrics Engine: Backed by
prometheus_client(PrometheusMetricsAdapter), tracking throughput counters, execution duration histograms, and system gauges exposed over/metrics.
graph TD
CQRS["CQRS Command / Query Dispatch"]
MW["TracingMiddleware (order=12)"]
PORT["TracingPort"]
OTEL["OtelTracingAdapter\n(OpenTelemetry SDK)"]
MEM["InMemoryTracingAdapter\n(Test Isolation)"]
OTLP["OTLP Exporter\n(gRPC / HTTP)"]
COLLECTOR["OTel Collector / Jaeger / Grafana Tempo / Sift"]
CQRS --> MW
MW --> PORT
PORT -.-> OTEL
PORT -.-> MEM
OTEL --> OTLP
OTLP --> COLLECTOR
2. Quickstart
Installation
# Core OpenTelemetry SDK & TracingPort
pip install hexastack-otel
# With OTLP Protobuf Exporters (gRPC & HTTP)
pip install hexastack-otel[otlp]
Configuration (hexastack.toml or pyproject.toml)
[hexastack.otel]
service_name = "order-service"
endpoint = "http://localhost:4317"
exporter = "otlp_grpc" # "memory", "console", "otlp_grpc", "otlp_http"
sample_rate = 1.0
enabled = true
3. Automatic CQRS Tracing & Dynamic Feature Flagging
The TracingMiddleware automatically wraps every dispatched command or query in a scoped span:
- Dynamic Feature Flag Control: Evaluates
features.otel.tracingviaFeatureFlagPortdynamically per-message, enabling zero-downtime activation/deactivation of telemetry spans. - Span Name:
cqrs.CreateOrderCommand - Attributes:
message.name:CreateOrderCommandmessage.type:commandcorrelation.id:0724ec78-f952-4467...tenant.id:tenant-alphauser.id:usr_123
- Error Capture: Automatically catches unhandled exceptions, records them as span exception events, and sets span status to
ERROR.
Metadata
Release files for hexastack-otel 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hexastack_otel-0.5.0.tar.gz | 10.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hexastack_otel-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.3 kB
Release files / hexastack_otel-0.5.0.tar.gz
| Download URL | hexastack_otel-0.5.0.tar.gz |
|---|---|
| Size | 10.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dabc76ac0f2b413440c78993637357580c49d0a97385fdd74d152505f6a68ea6
|
|
BLAKE2b-256 checksum How to use checksums |
834b47c8f6ffc8e97a3b07914056219236a118945e46542166d86ac4cebf0621
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hexastack_otel-0.5.0-py3-none-any.whl
| Download URL | hexastack_otel-0.5.0-py3-none-any.whl |
|---|---|
| Size | 18.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f857658fdb2fc317275479f3262accae90ae047befed8746871892dfcdeb8cf
|
|
BLAKE2b-256 checksum How to use checksums |
4fcec274febf96afc09fba80a5ccc20cc955d9aed595a5fb0f704a4e60153310
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|