V roce 2017 představil Taylor Otwell, tvůrce Laravelu, nový balíček Laravel Horizon, který v pěkném designu nabízí velmi jednoduchý přehled pracujících jobů v zásobníku (queues). Dříve bylo velmi běžné, že jsme přes produkční serverovou konzoli zkoušeli znovu spustit joby které selhaly (a vyčistit si tak "zaseklé" joby) a pomocí příkazu redis-cli se snažili zjistit, jaké joby jsou ještě v zásobníku. Jinak řečeno, Laravel queues jsou skvělé a většinu času pracují fantasticky. Tedy do doby, kdy nějaký job padne a dohledávání problému může být občas detektivní práce.

A za tímto účelem vznikl Laravel Horizon, díky kterému lze jednoduše monitorovat joby a zásobník z webového rozhraní a dostávat notifikace v případě, že něco selže. Celý balíček je samozřejmě zdarma a open source.

Dashboard

enter image description here Dashboard Horizonu je velmi pěkný - single-page Vue aplikace, která se nainstaluje přímo do již existující aplikace jednoduchým příkazem composer require laravel/horizon. Horizon umožňuje real-time pohled přímo do zásobníku, právě běžících jobů, chybových jobů, jobů v přípravě, propustnosti a přehled metrik. Autentizace do dashboardu je řízena jednoduchým callbackem registrovaným přes Horizon::auth.

Konfigurace

Horizon nabízí nový způsob konfigurace Laravel zásobníku s joby. enter image description here Díky této konfiguraci je možné mít vše pod kontrolou. V souboru config/horizon.php můžete nakonfigurovat kolik procesů chcete vytvořit, jaké zásobníky mají být zpracovány, časovou expiraci zásobníku a mnoho dalších nastavení, které byste normálně museli pokaždé vložit do příkazu queue:work.

Poté nám pro spuštění všech workerů stačí jednoduchý příkaz php artisan horizon. Není potřeba žádný další konzolový flag. Příkaz si přečte Horizon konfiguraci a vše si již sám připraví.

Chybné joby

Horizon nabízí jasné a detailní rozhraní pro získání více informací o chybném jobu, který nebylo možné dokončit a také zde máme možnost job rovnou znovu zkusit spustit. Můžeme zde vidět stack trace výjimky, tagy a poslední pokusy o rozběhnutí jobu. enter image description here

Metriky

enter image description here Pomocí grafů Horizon nabízí možnost vidět propustnost a průměrný runtime. Tyto metriky navíc můžeme zaznamenat pomocí příkazu horizon:snapshot, který můžeme spouštět třeba každou minutu a díky tomu rychle najít výkonostní degradaci po deploymentu.

Notifikace

Horizon posílá notifikace přes SMS nebo do Slacku kdykoliv je jeden ze zásobníků plný. Jednoduše si můžete také nastavit limit, při kterém bude notifikace poslána. enter image description here

Závěr

Určitě doporučuji si projít oficiální dokumentaci Horizonu a případě zájmu si můžete přečíst článek od Mohameda Saida, který Laravel Horizon popisuje ještě více do hloubky.