Skip to main content
This guide covers how to instrument BullMQ queues and workers. You will learn how to:
  • Install and configure the instrumentation
  • Track job dispatch and processing
  • Understand producer and consumer spans
For the full list of required span attributes and what powers the Jobs dashboard, see the Jobs feature page.

Installation

Peer dependency: bullmq >= 5.0.0

Usage

Create an instance of BullMQInstrumentation and call enable(). This must happen before you import or create any BullMQ Queue, Worker, or FlowProducer instances.
instrumentation.ts
Once enabled, all Queue.add, Queue.addBulk, FlowProducer.add, FlowProducer.addBulk, and Worker processing calls are automatically instrumented.
example.ts

Configuration

Span linking vs parenting

By default, consumer spans are linked to the producer span. This means they appear as separate traces connected by a link. Set useProducerSpanAsConsumerParent: true to make the consumer span a child of the producer, keeping them in the same trace.

Spans

Producer spans

Queue.add creates a PRODUCER span named Queue.add {queueName}. Queue.addBulk creates an INTERNAL parent span named Queue.addBulk {queueName}, with individual PRODUCER child spans for each job (named Job.addJob {queueName}). FlowProducer.add creates an INTERNAL parent span named FlowProducer.add {queueName}, with child spans for each job in the flow tree. FlowProducer.addBulk creates an INTERNAL parent span named FlowProducer.addBulk, with child spans per flow.

Consumer spans

Worker processing creates a CONSUMER span named Worker.run {queueName} for each job processed. The span captures job metadata, queue time, and any errors thrown during processing.

Lifecycle events

Lock extensions, job removals, and retries are recorded as events on the active consumer span (not separate spans).

BullMQ-specific attributes

In addition to the standard job attributes, the BullMQ instrumentation emits these extra attributes: