キューのジョブ数を即座に確認し、閾値を超えたらアラートを出せる監視コマンドです。
php artisan queue:monitor の概要
| 項目 | 内容 |
|---|---|
| 概要 | Laravel のキューに積まれたジョブ数を即時に取得し、閾値を超えたら警告を出力します。 |
| 主な用途 | – 本番環境でジョブ数のスパイクを検知 – Slack/Discord などの通知と連携 – Supervisor と併用してワーカー稼働を補完 |
| 関連情報 | – Laravel Horizon(Redis 用監視 UI) – queue:work, queue:listen(ワーカー実行)– queue:failed, queue:retry(失敗ジョブ管理) |
| 関連ドキュメント | – Laravel 12.x Docs – Queues – Laravel 12.x Docs – Monitoring Queues |
| 関連記事 | – “Monitoring Queues in Laravel: A Step‑by‑Step Guide” – “Understanding Laravel’s Queue Monitor: A Comprehensive Guide” – “Queuewatch: Building a Laravel Queue Monitoring Service” |
コマンドのシグネチャ・オプション
php artisan queue:monitor [queue...]
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
queue | string[] | ['default'] | 監視対象キュー名。複数指定可(例: queue1 queue2)。 |
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
-t, --threshold | int | 0 | アラート閾値。ジョブ数がこれを超えると警告が表示されます。 |
--timeout | int | 0 | ワーカーが応答しない場合にタイムアウトして警告を出す秒数。 |
--quiet | bool | false | 出力を最小化します。 |
実装:
Illuminate\Queue\Console\MonitorCommandが内部でConnection::sizeを呼び出しています。
典型的な使用シナリオ
Cron で 5 分ごとに監視
#!/usr/bin/env bash
QUEUE=emails
THRESHOLD=200
output=$(php artisan queue:monitor "$QUEUE" -t "$THRESHOLD" 2>&1)
if echo "$output" | grep -q "exceeds threshold"; then
echo "⚠️ $QUEUE is overloaded!"
# Slack に通知
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$QUEUE exceeded $THRESHOLD jobs\"}" \
"$SLACK_WEBHOOK_URL"
fi
Supervisor でワーカーと監視コマンドを同時管理
# /etc/supervisor/conf.d/laravel-worker.conf
process_name=%(program_name)s_%(process_num)s command=php /var/www/html/artisan queue:work –sleep=3 –tries=3 autostart=true autorestart=true stderr_logfile=/var/www/html/storage/logs/worker.err.log stdout_logfile=/var/www/html/storage/logs/worker.out.log user=www-data
command=php /var/www/html/artisan queue:monitor default -t 500 autostart=true autorestart=true user=www-data
実行時に得られる典型的な出力
Monitoring queue: emails
Size: 47 jobs
Threshold: 200
Status: OK
ジョブ数が閾値を超えた場合:
Monitoring queue: emails
Size: 235 jobs
Threshold: 200
⚠️ Queue "emails" exceeds threshold of 200 jobs
よくある質問 (FAQ)
| 質問 | 回答 |
|---|---|
ワーカーが止まっているときに queue:monitor で警告を出せますか? | ワーカー停止は Supervisor で監視します。--timeout を設定すれば、ワーカーが応答しない場合にタイムアウトして警告を出せます。 |
| GUI で監視結果を確認したい場合は? | Redis を使っているなら Horizon が最適。データベースキューでも Horizon が使えますが、Redis 以外の場合はパッケージ(例: laravel-queue-monitor)を検討してください。 |
| 大量のキューを同時監視したいときは? | 引数に複数キュー名を渡せます。例: php artisan queue:monitor queue1 queue2 queue3 -t 300 |
| 監視結果をメールで送信したいときは? | queue:monitor の出力を mail コマンドや Laravel の通知機能で転送すれば OK。 |
#6. 参考になる外部リソース
| タイトル | 目的 | リンク |
|---|---|---|
| Monitoring Queues in Laravel: A Step‑by‑Step Guide | 監視フローと実装例を解説 | https://medium.com/@someone/monitoring-queues-in-laravel |
| Understanding Laravel’s Queue Monitor: A Comprehensive Guide | コマンド内部実装と拡張ヒント | https://laravel-news.com/understanding-queue-monitor |
| Laravel Queue Monitor パッケージ | Horizon が無い環境向け監視 UI | https://github.com/laravel/queue-monitor |
| Queuewatch: Building a Laravel Queue Monitoring Service | 通知サービスと連携した監視サンプル | https://dev.to/another/queuewatch |
まとめ
php artisan queue:monitor は キューに溜まるジョブ数のリアルタイム監視 を簡単に実装できるコマンドです。
- Supervisor でワーカーを管理しつつ、閾値設定で自動アラートを設置。
- 通知パッケージ と組み合わせれば Slack/Discord への即時通知が可能。
- Horizon を併用すれば GUI で詳細を確認できます。
安定したキュー運用を目指すなら、ぜひ Supervisor + queue:monitor でヘルスチェックを自動化し、必要に応じて Horizon で可視化してみてください。

