OpentelemetryExq

Hex HexDocs

OpenTelemetry tracing for Exq jobs. Creates spans for enqueue calls and job execution, propagating trace context from enqueueing to workers.

Setup

Add the dependencies to mix.exs and run mix deps.get:

defp deps do
  [
    {:opentelemetry_exq, "~> 0.3.0"},
    {:opentelemetry, "~> 1.0"},
    {:opentelemetry_exporter, "~> 1.0"}
  ]
end

Keep your existing worker middleware and add OpentelemetryExq.Middleware after Exq.Middleware.Job. Configure OpentelemetryExq.EnqueueMiddleware in the caller-side enqueue chain:

import Config

config :exq,
  middleware: [
    Exq.Middleware.Stats,
    Exq.Middleware.Job,
    Exq.Middleware.Manager,
    Exq.Middleware.Unique,
    Exq.Middleware.Logger,
    OpentelemetryExq.Middleware
  ],
  enqueue_middleware: [OpentelemetryExq.EnqueueMiddleware]

Span relationships

Choose how the job span relates to the propagated enqueue span with the :span_relationship application setting:

For example, in config/config.exs:

config :opentelemetry_exq, span_relationship: :child

Development

docker compose up -d
mix deps.get
mix test --cover