Skip to main content

Wat is Horizon

Laravel Horizon is een monitoringdashboard speciaal voor Redis-queues in Laravel. Het visualiseert de doorvoer, uitvoeringstijd en mislukkingen van jobs in realtime en laat je de workerconfiguratie in code beheren.
Horizon is een pakket dat de basisfunctionaliteit van queues uitbreidt. Zorg dat je eerst de basis van Queues en jobs begrijpt voordat je verder leest. Voor de backend is bovendien altijd Redis nodig.

Installatie

Horizon gebruikt Redis als queuebackend. Controleer dat QUEUE_CONNECTION in config/queue.php is ingesteld op redis. Redis Cluster wordt momenteel niet ondersteund.
Installeer met Composer.
Publiceer na de installatie de assets en het configuratiebestand van Horizon.
Dit commando genereert config/horizon.php en app/Providers/HorizonServiceProvider.php.

Configuratie

Opbouw van config/horizon.php

config/horizon.php is het bestand waarin alle workerconfiguratie wordt beheerd. De kern is de optie environments.
Horizon gebruikt intern een Redis-verbinding met de naam horizon. Gebruik deze naam in config/database.php niet voor een andere verbinding.

CSP-nonce (Content Security Policy)

Wil je als onderdeel van je Content Security Policy een nonce-attribuut instellen op de script- en style-tags in de views van Horizon, gebruik dan de methode Horizon::cspNonce. Omdat je per request een nieuwe nonce wilt toewijzen, roep je die meestal aan in een middleware.
Voeg deze middleware toe aan de optie middleware in config/horizon.php.

Supervisors

Elke omgeving kan één of meer “supervisors” hebben. Een supervisor is de beheereenheid voor een groep workers; je kunt in dezelfde omgeving meerdere supervisors draaien met verschillende queues, balanceerstrategieën en procesaantallen.

Standaardwaarden

Met de optie defaults stel je standaardwaarden in die op alle supervisors worden toegepast.

Onderhoudsmodus

Wanneer de applicatie in onderhoudsmodus staat, verwerkt Horizon standaard geen jobs. Wil je jobs toch geforceerd laten verwerken, gebruik dan de optie force.

Maximaal aantal pogingen per job

Zet je tries op 0, dan zijn onbeperkte nieuwe pogingen toegestaan.

Jobtimeout

Stel timeout een paar seconden korter in dan retry_after in config/queue.php. Bovendien kan de auto-balanceerstrategie jobs die langer duren dan deze waarde geforceerd beëindigen.

Backoff (wachttijd voor nieuwe pogingen)

Geeft het aantal seconden op dat wordt gewacht voordat na een exceptie een nieuwe poging wordt gedaan.

Overige workeropties

Naast tries, timeout en backoff accepteert elke supervisor opties die het gedrag van de workerprocessen en het moment van automatisch herstarten bepalen. Langlopende processen regelmatig herstarten is een goede gewoonte om geheugenlekken te voorkomen.
  • memory — de maximale hoeveelheid geheugen (MB) die een workerproces mag verbruiken voordat het wordt herstart. Standaard 128
  • maxJobs — het aantal jobs dat wordt verwerkt voordat het proces wordt herstart. 0 betekent onbeperkt. Standaard 0
  • maxTime — het aantal seconden dat een worker mag draaien voordat hij wordt herstart. 0 betekent geen herstart op basis van tijd. Standaard 0
  • sleep — het aantal seconden dat wordt gewacht tot de volgende poll wanneer er geen jobs zijn. Standaard 3
  • rest — het aantal seconden pauze tussen het verwerken van jobs. Standaard 0
  • nice — de prioriteit (“niceness”) van het workerproces. Hoe hoger de waarde, hoe lager de prioriteit. Standaard 0

Balanceerstrategieën

Horizon kent drie balanceerstrategieën voor workers.
Past het aantal workers automatisch aan op basis van de belasting van de queues. Met minProcesses en maxProcesses geef je het bereik op.
  • time — schalen op basis van de geschatte tijd om de queue leeg te maken
  • size — schalen op basis van het aantal jobs in de queue
Bij de auto-strategie betekent de volgorde van de queues geen prioriteit. Wil je prioriteit afdwingen, gebruik dan meerdere supervisors.
Houdt het aantal workers vast en verdeelt ze gelijkmatig over de opgegeven queues.
In het bovenstaande voorbeeld krijgen default en notifications elk vijf processen toegewezen.
Geeft strikt prioriteit aan de queues in de volgorde waarin ze zijn opgesomd. Dit gedraagt zich zoals het standaard queuesysteem van Laravel, maar schaalt het aantal workers op basis van de achterstand.
Jobs in de default-queue worden altijd vóór die in de notifications-queue verwerkt.

Autorisatie van het dashboard

Het Horizon-dashboard bereik je via de route /horizon. In een lokale omgeving is het standaard voor iedereen toegankelijk, maar in productie beperk je de toegang met een gate-definitie. Bewerk de methode gate() in app/Providers/HorizonServiceProvider.php.
Is authenticatie niet nodig (bijvoorbeeld omdat je met IP-restricties beschermt), maak het argument dan optioneel.

Horizon starten

Basiscommando’s

Lokale ontwikkeling: automatisch herstarten

Om Horizon automatisch te herstarten bij bestandswijzigingen gebruik je het commando horizon:listen.

Continu draaien met Supervisor

In productie houd je Horizon continu draaiend met Supervisor.

Supervisor installeren

Het configuratiebestand aanmaken

Maak /etc/supervisor/conf.d/horizon.conf aan.
Stel stopwaitsecs in op een waarde die groter is dan de uitvoeringstijd van je langste job. Is de waarde te klein, dan beëindigt Supervisor jobs halverwege geforceerd.

Supervisor starten

Bij het deployen

Herstart Horizon bij elke code-deploy om de wijzigingen door te voeren.
Staan autostart=true / autorestart=true in Supervisor, dan wordt Horizon na het afsluiten automatisch opnieuw gestart.

Jobbeheer

Tags

Horizon detecteert automatisch de Eloquent-modellen die aan een job zijn gekoppeld en voegt tags toe.
Wil je tags handmatig definiëren, implementeer dan de methode tags().
Bij event listeners wordt de eventinstantie doorgegeven aan de methode tags().

Silencen

Jobs die je niet wilt tonen in de lijst “voltooide jobs” van het dashboard kun je silencen in config/horizon.php.
Je kunt ook de interface Silenced implementeren.

Metrics en monitoring

Het metricsdashboard van Horizon toont de doorvoer en uitvoeringstijd van jobs en queues. Stel een schedule in om regelmatig snapshots te maken.
Met de optie metrics.trim_snapshots in config/horizon.php stel je in hoeveel snapshots er worden bewaard voor de metricsgrafieken. Deze instelling begrenst het aantal snapshots, niet hun leeftijd; de daadwerkelijke bewaartermijn hangt dus af van hoe vaak het commando horizon:snapshot draait.
Om alle metricsdata te verwijderen voer je dit uit:

Notificaties bij mislukte jobs

Je kunt een notificatie ontvangen wanneer de wachttijd van een queue oploopt. Configureer dit in de methode boot() van app/Providers/HorizonServiceProvider.php.

Drempelwaarden voor wachttijden

Met de optie waits in config/horizon.php stel je het aantal seconden wachttijd in dat een notificatie activeert.
Stel je 0 in, dan zijn notificaties voor die queue uitgeschakeld.

Mislukte jobs beheren

Mislukte jobs kun je verwijderen op ID of UUID.
Om alle jobs uit een queue te wissen gebruik je het volgende:

Upgraden

Raadpleeg bij een major-versie-upgrade van Horizon altijd de upgradegids.

Gerelateerde pagina’s

Queues en jobs

De basis van Laravel-queues. Behandelt het aanmaken, dispatchen, batchen en afhandelen van mislukte jobs.

Redis

De configuratie en het gebruik van Redis, dat als backend voor Horizon nodig is.
Laatst gewijzigd op 6 september 2026