Using Queue exporters | laravel-prometheus | Spatie

 SPATIE

  Laravel Prometheus
=====================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-prometheus](https://spatie.be/docs/laravel-prometheus/v1)  Basic-usage  Using Queue exporters

 Version   v1

 Other versions for crawler [v1](https://spatie.be/docs/laravel-prometheus/v1)

- [ Introduction ](https://spatie.be/docs/laravel-prometheus/v1/introduction)
- [ Support us ](https://spatie.be/docs/laravel-prometheus/v1/support-us)
- [ Requirements ](https://spatie.be/docs/laravel-prometheus/v1/requirements)
- [ Installation &amp; setup ](https://spatie.be/docs/laravel-prometheus/v1/installation-setup)
- [ Questions and issues ](https://spatie.be/docs/laravel-prometheus/v1/questions-issues)
- [ Changelog ](https://spatie.be/docs/laravel-prometheus/v1/changelog)
- [ About us ](https://spatie.be/docs/laravel-prometheus/v1/about-us)

Basic usage
-----------

- [ Creating gauges ](https://spatie.be/docs/laravel-prometheus/v1/basic-usage/creating-gauges)
- [ Using Horizon exporters ](https://spatie.be/docs/laravel-prometheus/v1/basic-usage/using-horizon-exporters)
- [ Using Queue exporters ](https://spatie.be/docs/laravel-prometheus/v1/basic-usage/using-queue-exporters)

Setting up Prometheus and Grafana
---------------------------------

- [ Introduction ](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/introduction)
- [ Using grafana.com ](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/using-grafana-com)
- [ Self-hosted ](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/self-hosted)
- [ Using fly.io ](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/using-fly-metrics)

Advanced usage
--------------

- [ Creating multiple endpoints ](https://spatie.be/docs/laravel-prometheus/v1/advance-usage/using-multiple-endpoints)
- [ Creating collectors ](https://spatie.be/docs/laravel-prometheus/v1/advance-usage/creating-collectors)
- [ Using counter type metric ](https://spatie.be/docs/laravel-prometheus/v1/advance-usage/using-counter-metric)

 Using Queue exporters
=====================

###  On this page

1. [ Configuration ](#content-configuration)
2. [ Prometheus Metrics ](#content-prometheus-metrics)
3. [ Individual Collectors ](#content-individual-collectors)

> **Important**: If you are using Laravel Horizon, you should use the [Horizon exporters](./using-horizon-exporters.md) instead of these queue exporters. Horizon provides its own comprehensive queue monitoring and these two exporters should not be used together as they may conflict or provide duplicate metrics.

We can export key metrics from Laravel's built-in queue system to Prometheus. To enable this feature, uncomment this line in the `app/Providers/PrometheusServiceProvider.php` file.

```
$this->registerQueueCollectors(['default']);
```

This will register the following collectors for monitoring your Laravel queues:

- `queue_size`: exports the total number of jobs in each queue
- `queue_pending_jobs`: exports the number of pending jobs per queue
- `queue_delayed_jobs`: exports the number of delayed jobs per queue (supported drivers)
- `queue_reserved_jobs`: exports the number of reserved jobs per queue
- `queue_oldest_pending_job_age`: exports the age of the oldest pending job in seconds (supported drivers)

Configuration
-----------------------------------------------------------------------------------------------

### Basic Usage

Register collectors for the default connection and default queue:

```
$this->registerQueueCollectors(['default']);
```

### Custom Connection

Monitor queues on a specific connection:

```
$this->registerQueueCollectors(['high', 'low'], 'redis');
```

Prometheus Metrics
--------------------------------------------------------------------------------------------------------------

All metrics include `connection` and `queue` labels for filtering and aggregation:

```
# HELP app_queue_size The total number of jobs in the queue
# TYPE app_queue_size gauge
app_queue_size{connection="redis",queue="high"} 45
app_queue_size{connection="redis",queue="low"} 12

# HELP app_queue_delayed_jobs The number of delayed jobs in the queue
# TYPE app_queue_delayed_jobs gauge
app_queue_delayed_jobs{connection="redis",queue="high"} 3
app_queue_delayed_jobs{connection="redis",queue="low"} 0
```

Individual Collectors
-----------------------------------------------------------------------------------------------------------------------

You can also register collectors individually with custom parameters in your `PrometheusServiceProvider`.

```
use Spatie\Prometheus\Collectors\Queue\QueueSizeCollector;
use Spatie\Prometheus\Collectors\Queue\QueueDelayedJobsCollector;

Prometheus::registerCollectorClasses([
    QueueSizeCollector::class,
    QueueDelayedJobsCollector::class,
], ['connection' => 'redis', 'queues' => ['critical', 'high', 'normal']]);
```
