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
Installeer met Composer.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 descript- 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.
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 optiedefaults 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 optieforce.
Maximaal aantal pogingen per job
tries op 0, dan zijn onbeperkte nieuwe pogingen toegestaan.
Jobtimeout
Backoff (wachttijd voor nieuwe pogingen)
Geeft het aantal seconden op dat wordt gewacht voordat na een exceptie een nieuwe poging wordt gedaan.Overige workeropties
Naasttries, 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. Standaard128maxJobs— het aantal jobs dat wordt verwerkt voordat het proces wordt herstart.0betekent onbeperkt. Standaard0maxTime— het aantal seconden dat een worker mag draaien voordat hij wordt herstart.0betekent geen herstart op basis van tijd. Standaard0sleep— het aantal seconden dat wordt gewacht tot de volgende poll wanneer er geen jobs zijn. Standaard3rest— het aantal seconden pauze tussen het verwerken van jobs. Standaard0nice— de prioriteit (“niceness”) van het workerproces. Hoe hoger de waarde, hoe lager de prioriteit. Standaard0
Balanceerstrategieën
Horizon kent drie balanceerstrategieën voor workers.auto (standaard)
auto (standaard)
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 makensize— 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.simple
simple
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.false (geen balancering)
false (geen balancering)
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.
Horizon starten
Basiscommando’s
Lokale ontwikkeling: automatisch herstarten
Om Horizon automatisch te herstarten bij bestandswijzigingen gebruik je het commandohorizon: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.
Supervisor starten
Bij het deployen
Herstart Horizon bij elke code-deploy om de wijzigingen door te voeren.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.tags().
tags().
Silencen
Jobs die je niet wilt tonen in de lijst “voltooide jobs” van het dashboard kun je silencen inconfig/horizon.php.
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.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.
Notificaties bij mislukte jobs
Je kunt een notificatie ontvangen wanneer de wachttijd van een queue oploopt. Configureer dit in de methodeboot() van app/Providers/HorizonServiceProvider.php.
Drempelwaarden voor wachttijden
Met de optiewaits in config/horizon.php stel je het aantal seconden wachttijd in dat een notificatie activeert.
0 in, dan zijn notificaties voor die queue uitgeschakeld.
Mislukte jobs beheren
Mislukte jobs kun je verwijderen op ID of UUID.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.