Qué es Horizon
Laravel Horizon es el dashboard de monitorización específico para colas Redis de Laravel. Visualiza en tiempo real la productividad, los tiempos de ejecución y los fallos de los jobs, y permite gestionar por código la configuración de los workers.Horizon es un paquete que extiende la funcionalidad base de colas. Antes de continuar, familiarízate con lo básico de Colas y jobs. Además, el backend debe ser necesariamente Redis.
Instalación
Instala con Composer.config/horizon.php y app/Providers/HorizonServiceProvider.php.
Configuración
Estructura de config/horizon.php
config/horizon.php es el archivo donde se gestiona toda la configuración de los workers. La opción central es environments.
Horizon usa internamente una conexión Redis llamada
horizon. No utilices ese nombre para otras conexiones en config/database.php.CSP nonce (Content Security Policy)
Si quieres, como parte de tu Content Security Policy, añadir el atributo nonce a las etiquetasscript / style de las vistas de Horizon, usa el método Horizon::cspNonce. Como se debe asignar un nonce nuevo por petición, normalmente se invoca desde un middleware.
middleware de config/horizon.php.
Supervisores (Supervisor)
Cada entorno puede tener uno o varios «supervisores». Un supervisor es la unidad de gestión de un grupo de workers; en un mismo entorno pueden convivir varios supervisores con distintas colas, estrategias de balance y número de procesos.Valores por defecto
En la opcióndefaults puedes fijar valores por defecto que se aplican a todos los supervisores.
Modo mantenimiento
Cuando la aplicación está en modo mantenimiento, Horizon no procesa jobs por defecto. Para forzar el procesamiento usa la opciónforce.
Número máximo de intentos de un job
tries a 0 permite reintentos ilimitados.
Timeout del job
Backoff (tiempo de espera antes de reintentar)
Indica los segundos de espera antes de reintentar tras una excepción.Otras opciones del worker
Además detries, timeout y backoff, cada supervisor admite opciones que controlan el comportamiento del proceso worker y el momento de reinicio automático. Reiniciar periódicamente los procesos de larga duración es una buena práctica para prevenir fugas de memoria.
memory— cantidad máxima de memoria (MB) que puede consumir un worker antes de reiniciarse. Por defecto128.maxJobs— número de jobs a procesar antes del reinicio.0significa sin límite. Por defecto0.maxTime— segundos que puede estar corriendo un worker antes del reinicio.0significa sin reinicio por tiempo. Por defecto0.sleep— segundos de espera hasta el siguiente polling cuando no hay jobs. Por defecto3.rest— segundos de pausa entre procesamiento de jobs. Por defecto0.nice— prioridad («niceness») del proceso worker. Cuanto más alto, menor prioridad. Por defecto0.
Estrategias de balance
Horizon dispone de tres estrategias de balance de workers.auto (por defecto)
auto (por defecto)
Ajusta automáticamente el número de workers según la carga de la cola. Indica el rango con
minProcesses y maxProcesses.time— escala según el tiempo estimado para vaciar la cola.size— escala según el número de jobs en la cola.
Con la estrategia
auto, el orden de las colas no implica prioridad. Si necesitas forzar prioridades, utiliza varios supervisores.simple
simple
Fija el número de workers y los distribuye equitativamente entre las colas indicadas.En este ejemplo se asignan 5 procesos a
default y otros 5 a notifications.false (sin balance)
false (sin balance)
Prioriza estrictamente las colas en el orden enumerado. Se comporta como el sistema de colas por defecto de Laravel, pero escala el número de workers según el backlog.Los jobs de la cola
default se procesan siempre antes que los de notifications.Autorización del dashboard
El dashboard de Horizon está en la ruta/horizon. En local es accesible por defecto para cualquiera, pero en producción debes restringir el acceso mediante una gate.
Edita el método gate() de app/Providers/HorizonServiceProvider.php.
Arrancar Horizon
Comandos básicos
Desarrollo local: reinicio automático
Para reiniciar Horizon automáticamente al detectar cambios en los archivos, usahorizon:listen.
Ejecución permanente con Supervisor
En producción se mantiene Horizon en marcha permanente con Supervisor.Instalar Supervisor
Crear el archivo de configuración
Crea/etc/supervisor/conf.d/horizon.conf.
Arrancar Supervisor
En cada despliegue
Cada vez que despliegues código, reinicia Horizon para reflejar los cambios.autostart=true / autorestart=true en Supervisor, se reiniciará automáticamente tras el apagado.
Gestión de jobs
Etiquetas
Horizon detecta automáticamente los modelos Eloquent relacionados con un job y les asigna etiquetas.tags().
tags().
Silenciado
Los jobs que no quieras que aparezcan en la lista de «jobs completados» del dashboard pueden silenciarse enconfig/horizon.php.
Silenced.
Métricas y monitorización
El dashboard de métricas de Horizon muestra el throughput y los tiempos de ejecución de jobs y colas. Programa la toma periódica de snapshots.metrics.trim_snapshots de config/horizon.php te permite configurar cuántos snapshots se conservan para las gráficas. Como este ajuste limita por número de entradas y no por antigüedad, el período efectivo de retención depende de la frecuencia con la que ejecutes horizon:snapshot.
Notificaciones de fallo de jobs
Puedes recibir notificaciones cuando el tiempo de espera de la cola aumenta. Configúralo en el métodoboot() de app/Providers/HorizonServiceProvider.php.
Umbrales de espera
En la opciónwaits de config/horizon.php configura los segundos de espera que disparan la notificación.
0 se desactiva la notificación para esa cola.
Gestión de jobs fallidos
Puedes borrar jobs fallidos por su ID o UUID.Actualización
Al actualizar a una nueva versión mayor de Horizon, consulta siempre la guía de actualización.Páginas relacionadas
Colas y jobs
Fundamentos de las colas de Laravel. Explica la creación, el despacho, el procesamiento por lotes y el manejo de fallos de los jobs.
Redis
Configuración y uso de Redis, necesario como backend de Horizon.