Skip to main content

Was ist Horizon?

Laravel Horizon ist ein Überwachungs-Dashboard speziell für Redis-Queues in Laravel. Es visualisiert Job-Durchsatz, Laufzeiten und Fehler in Echtzeit und ermöglicht es, Worker-Einstellungen im Code zu verwalten.
Horizon erweitert die Basisfunktionalität der Queue. Machen Sie sich zunächst mit den Grundlagen zu Queues und Jobs vertraut. Als Backend ist zwingend Redis erforderlich.

Installation

Horizon nutzt Redis als Queue-Backend. Stellen Sie sicher, dass QUEUE_CONNECTION in config/queue.php auf redis gesetzt ist. Redis Cluster wird derzeit nicht unterstützt.
Installation via Composer:
Veröffentlichen Sie anschließend die Assets und die Konfigurationsdatei.
Dabei werden config/horizon.php und app/Providers/HorizonServiceProvider.php erzeugt.

Konfiguration

Aufbau der Datei config/horizon.php

config/horizon.php bündelt sämtliche Worker-Einstellungen. Kern ist die Option environments.
Horizon nutzt intern eine Redis-Verbindung namens horizon. Vergeben Sie diesen Namen in config/database.php nicht an eine andere Verbindung.

Supervisor

Jede Umgebung kann einen oder mehrere „Supervisor” enthalten. Ein Supervisor ist die Verwaltungseinheit für eine Worker-Gruppe; Sie können pro Umgebung mehrere Supervisor mit unterschiedlichen Queues, Balance-Strategien und Prozessanzahlen betreiben.

Standardwerte

In defaults legen Sie Standardwerte fest, die für alle Supervisor gelten.

Wartungsmodus

Ist die Anwendung im Wartungsmodus, verarbeitet Horizon standardmäßig keine Jobs. Um die Verarbeitung dennoch zu erzwingen, verwenden Sie die Option force.

Maximale Anzahl an Versuchen

Mit tries auf 0 erlauben Sie unbegrenzte Wiederholungen.

Job-Timeout

Setzen Sie timeout einige Sekunden kürzer als retry_after in config/queue.php. Mit der Balance-Strategie auto beendet Horizon zudem Jobs, die diesen Wert überschreiten, gegebenenfalls zwangsweise.

Backoff (Wartezeit vor Wiederholung)

Wartezeit in Sekunden nach einer Ausnahme bis zum nächsten Versuch.

Balance-Strategien

Horizon kennt drei Strategien zur Worker-Balancierung.
Passt die Worker-Anzahl automatisch an die Queue-Auslastung an. Über minProcesses und maxProcesses bestimmen Sie den Rahmen.
  • time – Skalierung nach geschätzter Zeit bis zur Leerung der Queue
  • size – Skalierung nach Anzahl der Jobs in der Queue
Bei der Strategie auto bestimmt die Reihenfolge der Queues nicht deren Priorität. Für strikte Prioritäten verwenden Sie mehrere Supervisor.
Legt eine feste Anzahl Worker fest und verteilt sie gleichmäßig auf die angegebenen Queues.
Im Beispiel erhalten default und notifications jeweils fünf Prozesse.
Priorisiert die Queues strikt in der angegebenen Reihenfolge. Das Verhalten entspricht dem Standard-Queue-System, skaliert die Worker-Anzahl aber dennoch bedarfsabhängig.
Jobs der Queue default werden immer vor denen der Queue notifications verarbeitet.

Autorisierung des Dashboards

Das Horizon-Dashboard ist unter der Route /horizon erreichbar. Lokal ist es standardmäßig für alle zugänglich; in der Produktion schränken Sie den Zugriff über ein Gate ein. Passen Sie die Methode gate() in app/Providers/HorizonServiceProvider.php an.
Ist keine Authentifizierung erforderlich (weil Sie z. B. IP-Einschränkungen nutzen), machen Sie das Argument optional.

Horizon starten

Grundlegende Befehle

Lokale Entwicklung: automatisches Neustarten

Um Horizon bei Änderungen an Quellcode automatisch neu zu starten, verwenden Sie horizon:listen.

Dauerbetrieb mit Supervisor

In der Produktion betreiben Sie Horizon mit Supervisor dauerhaft.

Supervisor installieren

Konfigurationsdatei anlegen

Legen Sie /etc/supervisor/conf.d/horizon.conf an.
Setzen Sie stopwaitsecs höher als die längste erwartete Jobdauer. Ist der Wert zu klein, kann Supervisor Jobs abbrechen, bevor sie fertig sind.

Supervisor starten

Beim Deployment

Starten Sie Horizon nach jedem Deployment neu, damit Änderungen greifen.
Sofern Supervisor mit autostart=true und autorestart=true konfiguriert ist, startet Horizon anschließend automatisch neu.

Jobs verwalten

Tags

Horizon erkennt Eloquent-Modelle, die einem Job übergeben werden, automatisch und versieht Jobs mit passenden Tags.
Um Tags manuell zu definieren, implementieren Sie die Methode tags().
Bei Event-Listenern wird der Methode tags() die Event-Instanz übergeben.

Ausblenden (Silence)

Jobs, die nicht in der Liste „abgeschlossener Jobs” im Dashboard erscheinen sollen, können Sie in config/horizon.php ausblenden.
Alternativ implementieren Sie das Interface Silenced.

Metriken und Monitoring

Das Metrik-Dashboard von Horizon zeigt den Durchsatz und die Laufzeit von Jobs und Queues. Damit die Daten fortlaufend aktualisiert werden, richten Sie einen Snapshot-Zeitplan ein.
Um alle Metrikdaten zu löschen, führen Sie folgenden Befehl aus:

Benachrichtigungen zu Job-Fehlern

Bei langen Wartezeiten in der Queue können Sie sich benachrichtigen lassen. Konfigurieren Sie dies in der boot()-Methode von app/Providers/HorizonServiceProvider.php.

Schwellenwerte für Wartezeiten

In config/horizon.php legen Sie mit der Option waits die Wartezeit fest, ab der Benachrichtigungen gesendet werden.
Der Wert 0 deaktiviert die Benachrichtigung für die betreffende Queue.

Umgang mit fehlgeschlagenen Jobs

Fehlgeschlagene Jobs können Sie über ID oder UUID löschen.
Um alle Jobs einer Queue zu löschen, verwenden Sie:

Upgrades

Vor einem Major-Update von Horizon sollten Sie stets die Upgrade-Anleitung lesen.

Verwandte Seiten

Queues und Jobs

Grundlagen der Laravel-Queue: Job-Erstellung, Dispatchen, Batches und Fehlerbehandlung.

Redis

Konfiguration und Nutzung von Redis als Backend für Horizon.
Zuletzt geändert am 13. Juli 2026