Metrics

In addition to traces, BullMQ also supports collecting metrics through OpenTelemetry. Metrics provide quantitative data about your job processing, such as counts of completed/failed jobs and processing durations.

Enabling Metrics

To enable metrics collection, pass the enableMetrics option when creating the BullMQOtel instance:

import { Queue } from 'bullmq';
import { BullMQOtel } from 'bullmq-otel';

const telemetry = new BullMQOtel({
  tracerName: 'my-app',
  meterName: 'my-app',
  version: '1.0.0',
  enableMetrics: true,
});

const queue = new Queue('myQueue', {
  connection: {
    host: '127.0.0.1',
    port: 6379,
  },
  telemetry,
});

Available Metrics

BullMQ automatically records the following metrics:

Counters

Metric Name
Description

bullmq.jobs.completed

Number of jobs that completed successfully

bullmq.jobs.failed

Number of jobs that failed (after all retries exhausted)

bullmq.jobs.delayed

Number of jobs moved to delayed state (including retry delays)

bullmq.jobs.retried

Number of jobs that were retried immediately

bullmq.jobs.waiting

Number of jobs moved back to waiting state

bullmq.jobs.waiting_children

Number of jobs moved to waiting-children state

Histograms

Metric Name
Description
Unit

bullmq.job.duration

Job processing duration

milliseconds

Metric Attributes

All metrics include the following attributes for filtering and grouping:

Attribute
Description

bullmq.queue.name

Name of the queue

bullmq.job.name

Name of the job

bullmq.job.status

Status of the job (completed, failed, delayed, retried, waiting, waiting-children)

Configuration Options

The BullMQOtel constructor accepts the following options:

Custom Metric Options

BullMQOtel allows you to pre-configure counters and histograms with custom options before passing the telemetry instance to a Worker or Queue. Once a metric is created with custom options, BullMQ will reuse it and the default options defined internally will be ignored.

This is useful when you want to customize metric descriptions, units, or other OpenTelemetry metric options:

circle-info

The BullMQOTelMeter caches all created counters and histograms by name. When BullMQ internally calls createCounter or createHistogram with the same name, the cached instance is returned, effectively ignoring the default options passed by BullMQ.

Backward Compatibility

The original constructor signature is still supported for backward compatibility:

Exporting Metrics

To export metrics to an observability backend, you need to configure an OpenTelemetry metrics exporter. Here's an example using the OTLP exporter:

circle-info

Make sure to set up the meter provider before creating BullMQ instances with telemetry enabled.

Last updated

Was this helpful?