docs

Jobs

Background job throughput, failures, retries, processing time and queue time, grouped by job name.

Jobs shows the work your queue workers run: how many jobs were published and processed, how many failed or retried, how long they took and how long they waited. Use it when emails arrive late, a backlog builds up, or one job keeps failing.

The list lives at /o/:org/projects/:project/jobs and a job at /o/:org/projects/:project/jobs/detail?key=ProcessOrder.

Where the data comes from

Any span with messaging.system is a job span. The queue library decides how they are produced:

  • @adonisjs/queue, traced by the AdonisJS agent through its queue option, on by default.
  • BullMQ, through @unhandled/instrumentation-bullmq.
  • Any other library that sets the attributes below on its spans.
AttributeUsed for
messaging.systemMarks the span as a job
messaging.job.nameJob name and grouping key
messaging.destination.nameQueue name, and the key when there is no job name
messaging.operation.typesend counts as a publish
messaging.message.retry.countRetry attempt
messaging.job.queue_time_msTime the job waited before a worker picked it up
error.typeFailure reason

When messaging.job.name is missing, the key falls back to messaging.bullmq.job.name, then messaging.destination.name, then the span name.

Published and processed

A PRODUCER span is a publish: your app put a job on a queue. Every other job span is an execution: a worker ran it. Executions, error rate and processing time leave PRODUCER spans out, so dispatching a job never inflates its run count. The Published figures count PRODUCER spans plus any span with messaging.operation.type=send.

The list

CardValueHint
ProcessedExecutionsJobs published
FailedFailed executionsError rate
Processing Time · P9595th percentile execution timeP50 and P99
Queue TimeMean wait before processingP95
RetriedExecutions with a retry count above 0Share of executions

Five charts follow: Throughput (succeeded and failed per bucket), Error Rate, Processing Time (median and P95, with P99 in the legend), Queue Time (average and P95 of messaging.job.queue_time_ms) and Published vs Processed. When Published climbs above Processed for a while, workers are not keeping up.

The table lists up to 200 jobs with Service, Job, Executions, Errors, Error rate, Avg, P95 and Last run. Sort by Executions (the default), Failures, Avg or P95.

Job detail

The detail page repeats the cards and charts for one job. When several services run it and you arrived without a service, it asks you to choose one first.

Failure reasons groups failed executions by error.type, falling back to the span status message and then "Unknown error", with a count and last seen time for the top 20.

Recent executions lists the 50 latest processed runs with Time, Queue, Retry, Waited, Status, Error, Duration and a trace link. Status filters to All or Failed, and Show switches to Slowest executions, the 50 longest runs.

High-volume jobs can be sampled before export, which lowers the counts here. See Job sampling.

Answering "why do order confirmations arrive late?"

  1. Open ProcessOrder and compare Queue Time with Processing Time.
  2. A high Queue Time with a normal Processing Time means jobs wait for a free worker. Add workers or concurrency.
  3. A high Processing Time means the job itself is slow. Switch Show to Slowest and open the slowest trace.
  4. If Retried is high, read Failure reasons to see what makes the first attempt fail.