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 itsqueueoption, on by default.- BullMQ, through
@unhandled/instrumentation-bullmq. - Any other library that sets the attributes below on its spans.
| Attribute | Used for |
|---|---|
messaging.system | Marks the span as a job |
messaging.job.name | Job name and grouping key |
messaging.destination.name | Queue name, and the key when there is no job name |
messaging.operation.type | send counts as a publish |
messaging.message.retry.count | Retry attempt |
messaging.job.queue_time_ms | Time the job waited before a worker picked it up |
error.type | Failure 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
| Card | Value | Hint |
|---|---|---|
| Processed | Executions | Jobs published |
| Failed | Failed executions | Error rate |
| Processing Time · P95 | 95th percentile execution time | P50 and P99 |
| Queue Time | Mean wait before processing | P95 |
| Retried | Executions with a retry count above 0 | Share 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?"
- Open
ProcessOrderand compare Queue Time with Processing Time. - A high Queue Time with a normal Processing Time means jobs wait for a free worker. Add workers or concurrency.
- A high Processing Time means the job itself is slow. Switch Show to Slowest and open the slowest trace.
- If Retried is high, read Failure reasons to see what makes the first attempt fail.