Qu’est-ce que Horizon ?
Laravel Horizon est le tableau de bord de supervision dédié aux queues Redis de Laravel. Il permet de visualiser en temps réel le débit des jobs, leur temps d’exécution et leurs échecs, tout en gérant la configuration des workers par le code.Horizon est un package qui étend les fonctionnalités de base de la queue. Assurez-vous d’avoir d’abord assimilé les bases de la section Queues et jobs. Le backend Redis est également obligatoire — voir Redis.
Installation
Installez le package avec Composer.config/horizon.php et app/Providers/HorizonServiceProvider.php.
Configuration
Structure de config/horizon.php
Le fichierconfig/horizon.php centralise toute la configuration des workers. Son cœur est l’option environments.
Horizon utilise en interne une connexion Redis appelée
horizon. Ne réutilisez pas ce nom pour une autre connexion dans config/database.php.CSP nonce (Content Security Policy)
Pour intégrer un attribut nonce sur les balisesscript / style des vues Horizon dans le cadre d’une Content Security Policy, utilisez la méthode Horizon::cspNonce. Comme il faut un nonce par requête, on l’appelle généralement depuis un middleware.
middleware de config/horizon.php.
Supervisors
Chaque environnement peut contenir un ou plusieurs « supervisors ». Un supervisor est l’unité de gestion d’un groupe de workers ; vous pouvez en faire cohabiter plusieurs dans le même environnement, chacun avec ses propres queues, sa propre stratégie d’équilibrage et son propre nombre de processus.Valeurs par défaut
L’optiondefaults permet de définir des valeurs par défaut communes à tous les supervisors.
Mode maintenance
Lorsque l’application est en mode maintenance, Horizon ne traite pas les jobs par défaut. Pour forcer le traitement, utilisezforce.
Nombre maximum de tentatives
0 pour tries autorise un nombre illimité de tentatives.
Timeout des jobs
Backoff (délai avant nouvelle tentative)
Nombre de secondes à attendre avant de rejouer un job après une exception.Autres options de worker
En plus detries, timeout et backoff, chaque supervisor accepte des options qui contrôlent le comportement des processus workers et leurs redémarrages automatiques. Redémarrer régulièrement des processus de longue durée est une bonne pratique pour prévenir les fuites mémoire.
memory— mémoire maximale (en Mo) qu’un worker peut consommer avant redémarrage. Par défaut :128.maxJobs— nombre de jobs à traiter avant redémarrage.0= sans limite. Par défaut :0.maxTime— durée maximale (en secondes) d’exécution avant redémarrage.0= pas de redémarrage temporel. Par défaut :0.sleep— attente en secondes entre deux polls quand il n’y a pas de job. Par défaut :3.rest— pause en secondes entre chaque job. Par défaut :0.nice— priorité (« niceness ») du processus worker. Plus la valeur est élevée, plus la priorité est basse. Par défaut :0.
Stratégies d’équilibrage
Horizon propose trois stratégies d’équilibrage.auto (par défaut)
auto (par défaut)
Le nombre de workers s’ajuste automatiquement selon la charge.
minProcesses et maxProcesses définissent l’intervalle.time— mise à l’échelle selon le temps estimé pour vider la queue.size— mise à l’échelle selon le nombre de jobs dans la queue.
Avec
auto, l’ordre des queues n’implique aucune priorité. Pour imposer une priorité, utilisez plusieurs supervisors.simple
simple
Fixe le nombre de workers et les répartit uniformément entre les queues indiquées.Dans cet exemple, 5 workers sont attribués à
default et 5 à notifications.false (sans équilibrage)
false (sans équilibrage)
Traite les queues dans l’ordre strict de leur déclaration. Le comportement est celui de la queue Laravel classique, avec un scaling du nombre de workers selon le retard.Les jobs de la queue
default seront toujours traités avant ceux de notifications.Autorisation du tableau de bord
Le tableau de bord est accessible via la route/horizon. En environnement local, il est ouvert à tous par défaut, mais en production, il faut restreindre son accès par une gate.
Éditez la méthode gate() dans app/Providers/HorizonServiceProvider.php.
Démarrer Horizon
Commandes de base
Développement local : redémarrage automatique
Pour redémarrer Horizon automatiquement à chaque changement de fichier, utilisezhorizon:listen.
Lancement permanent avec Supervisor
En production, utilisez Supervisor pour maintenir Horizon en vie.Installation de Supervisor
Création du fichier de configuration
Créez/etc/supervisor/conf.d/horizon.conf.
Démarrer Supervisor
Lors du déploiement
À chaque déploiement, redémarrez Horizon pour prendre en compte les changements.autostart=true / autorestart=true, Supervisor relance Horizon automatiquement après l’arrêt.
Gestion des jobs
Tags
Horizon détecte automatiquement les modèles Eloquent liés à un job et lui ajoute des tags.tags().
tags().
Sourdine (silence)
Pour ne pas afficher certains jobs dans la liste « jobs terminés » du tableau de bord, mettez-les en sourdine dansconfig/horizon.php.
Silenced.
Métriques et supervision
Le tableau de bord des métriques d’Horizon affiche le débit et les temps d’exécution par job et par queue. Planifiez la prise de snapshots régulière.metrics.trim_snapshots de config/horizon.php définit le nombre de snapshots conservés pour les graphiques. Le seuil s’appliquant au nombre et non à l’ancienneté, la durée effective de rétention dépend de la fréquence de horizon:snapshot.
Notifications d’échec de job
Vous pouvez être notifié lorsque le temps d’attente d’une queue devient trop long. Configurez cela dans la méthodeboot() de app/Providers/HorizonServiceProvider.php.
Seuil d’attente
L’optionwaits de config/horizon.php fixe le nombre de secondes d’attente qui déclenche une notification.
0 désactive la notification pour la queue concernée.
Gestion des jobs en échec
Vous pouvez supprimer un job en échec par son ID ou son UUID.Mise à niveau
À chaque changement de version majeure d’Horizon, consultez le guide de mise à niveau.Pages associées
Queues et jobs
Les bases des queues Laravel : création de job, dispatch, batching, gestion des échecs.
Redis
Configuration et utilisation de Redis, indispensable comme backend d’Horizon.