Skip to main content

ekosis-jaeger-http

Jaeger distributed tracing for EcoSystem applications, via OTLP HTTP.

Wires into the EcoSystem middleware system. Every endpoint in a service is automatically traced. No changes to endpoint-code required. 😎


How it works

Every EcoSystem request carries a request_uid, ekosis-jaeger-http uses that UUID as the Jaeger trace ID. One request_uid, one trace, full distributed trace visible across all services.

For regular endpoints, a span opens when the request arrives (before_routing) and closes when the response is sent (after_routing). For buffered endpoints, the receive span is linked to child process spans via the metadata mechanism, so the trace survives the async gap between queuing and processing, including across retries.


Install

pip install ekosis-jaeger-http

Configuration

Set the Jaeger OTLP HTTP endpoint via ECOENV_EXTRA_*:

ECOENV_EXTRA_JAEGER_ENDPOINT=http://your-jaeger-host:4318/v1/traces

The service name in Jaeger auto-derives from {app_name}-{instance} (e.g. tracker-0). No explicit configuration required.


Wiring

Setup helper (recommended)

from ekosis_jaeger_http.setup import initiate_jaeger_tracing

initiate_jaeger_tracing()

One call. Reads ECOENV_EXTRA_JAEGER_ENDPOINT, creates both middleware instances, and registers them with MiddlewareManager and BufferedMiddlewareManager.

Place the call before app.start(), typically at the top of your application's __init__:

from ekosis.application_base          import ApplicationBase
from ekosis_jaeger_http.setup         import initiate_jaeger_tracing

initiate_jaeger_tracing()

# --------------------------------------------------------------------------------
class MyServer(ApplicationBase):
    def __init__(self):
        super().__init__()

# --------------------------------------------------------------------------------
def main():
    with MyServer() as app:
        app.start()

# --------------------------------------------------------------------------------
if __name__ == '__main__':
    main()

Manual wiring

If you need access to the middleware instances directly (for example, to compose with your own middleware):

from ekosis.middleware                      import MiddlewareManager, BufferedMiddlewareManager
from ekosis_jaeger_http                     import JaegerHttpTracingMiddleware
from ekosis_jaeger_http.buffered_middleware import JaegerHttpBufferedTracingMiddleware

tracer = JaegerHttpTracingMiddleware(endpoint="http://your-jaeger-host:4318/v1/traces")
MiddlewareManager().add(tracer)
BufferedMiddlewareManager().add(JaegerHttpBufferedTracingMiddleware(tracer))

JaegerHttpBufferedTracingMiddleware takes the JaegerHttpTracingMiddleware instance as an argument. It is used to retrieve the active receive-span at push time and link the process spans to it.


Span structure

Regular endpoint

One span per request, named with the route key:

tracker.log_request     (trace_id = request_uid)
  |
  +-> request.uid       = "3f2a1b..."
  |
  +-> request.route_key = "tracker.log_request"

Buffered endpoint

The receive span is the root. Each process attempt (including retries) produces a child span linked back to the receive span via the persisted trace and span IDs:

tracker.log_request_fail        (receive span)
  |
  +-> LogRequestFailDTO.process (retries=0, process.success=False)
  |
  +-> LogRequestFailDTO.process (retries=1, process.success=True)

The child span name is the DTO class name + .process. The retries attribute shows which attempt produced the span. process.success=False means the item was returned to the queue for retry or moved to the error queue.


Dependencies

Package Licence
opentelemetry-api Apache 2.0
opentelemetry-sdk Apache 2.0
opentelemetry-exporter-otlp-proto-http Apache 2.0

Metadata

Release files for ekosis-jaeger-http 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ekosis-jaeger-http 0.1.0
File Size Uploaded
ekosis_jaeger_http-0.1.0.tar.gz 5.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ekosis-jaeger-http 0.1.0
File Interpreter ABI Platform
ekosis_jaeger_http-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 12.0 kB

Release files / ekosis_jaeger_http-0.1.0.tar.gz

Download URL ekosis_jaeger_http-0.1.0.tar.gz
Size 5.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d80ef6bf2327e8b40d0a811d33ab25f88200bce5a457212ebfa60a1804cebe3c
BLAKE2b-256 checksum
How to use checksums
782cca732cf7006914c90b81b0998d1594ad431e11ba3f7acd7b030ab832b942
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / ekosis_jaeger_http-0.1.0-py3-none-any.whl

Download URL ekosis_jaeger_http-0.1.0-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
548698c6e0aeadcbd7b4b14e6ec910db1662c5b7408c83bebea636621a7dd63a
BLAKE2b-256 checksum
How to use checksums
e566c8103ea95a35bb40cecdf2a3e663317d3e48423cc418f483ec0701469b1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release 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