Laravel ma trzy narzędzia monitoringu — Horizon, Pulse i Telescope — i najczęstszy błąd to traktowanie ich zamiennie. Każde odpowiada na inne pytanie: Horizon na „co robią moje kolejki?", Pulse na „jak czuje się cała aplikacja?", Telescope na „co się stało w tym konkretnym żądaniu?". Ten poradnik pokazuje, co włączyć na produkcji, co zostawić lokalnie i jak nie zabić serwera monitoringiem.
Najważniejsze: Najważniejsze — na produkcji zostają Horizon (panel operacyjny kolejek na Redisie) i Pulse (lekki health-check całej aplikacji: serwer, wolne zapytania, wyjątki, cache, kolejki). Telescope jest zbyt ciężki na produkcję — zapisuje każde żądanie i każde zapytanie SQL; włączaj go lokalnie albo na staging, gdy debugujesz konkretny problem.
Trzy narzędzia, trzy pytania
| Narzędzie | Pytanie, na które odpowiada | Dane zbierane | Gdzie działa |
|---|---|---|---|
| Laravel Horizon | Co robią moje kolejki? | Przepustowość, czasy oczekiwania, failed jobs, stan workerów, metryki per kolejka | Produkcja (wymaga Redis) |
| Laravel Pulse | Jak czuje się aplikacja? | CPU/RAM serwera, wolne zapytania, wolne endpointy, wyjątki, użycie cache, kolejki, zewnętrzne API | Produkcja (dane w bazie) |
| Laravel Telescope | Co się stało w tym żądaniu? | Pełny log: żądania, zapytania SQL, maile, notyfikacje, zadania, wyjątki, cache | Lokalnie / staging |
Trzy narzędzia się nie wykluczają — uzupełniają. Horizon to panel operacyjny (codzienna praca z kolejkami), Pulse to tablica zdrowia (coś zwalnia — gdzie?), Telescope to mikroskop (to konkretne żądanie zachowało się dziwnie — dlaczego?).
Laravel Horizon — panel operacyjny kolejek
Horizon znasz z poradnika o kolejkach — tu tylko przypomnienie roli w monitoringu: dashboard z przepustowością i czasami oczekiwania, historia metryk, lista failed jobs z ponawianiem jednym kliknięciem i alerty przy przekroczeniu progów waits. Horizon wymaga Redisa i sterownika kolejek redis — nie działa z database ani SQS.
W kontekście monitoringu najważniejsze są dwie rzeczy
waits— progi czasu oczekiwania, po których Horizon wysyła alert (Slack, mail, webhook). Ustaw realistycznie: 60 s dladefault, 120 s dla kolejek wsadowych.- Przepustowość vs. napływ — wykres, który pokazuje, czy workery nadążają. Jeśli napływ zadań rośnie szybciej niż przepustowość, dołóż procesy (albo popraw wydajność zadań), zanim kolejka zapcha się na dobre.
Laravel Pulse — tablica zdrowia aplikacji
Pulse to odpowiedź Laravela na New Relic i Sentry w wersji „dla aplikacji Laravel". Instalacja
composer require laravel/pulse
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
php artisan migrate
Dane trafiają do bazy (tabele pulse_*) i są agregowane przez komendę php artisan pulse:check, którą uruchamia się w tle (pulse:work pod Supervisorem) albo przez cron. Dashboard dostępny jest pod /pulse, chroniony bramką viewPulse — na produkcji bezwzględnie za logowaniem.
Karty, które faktycznie się przydają na produkcji
| Karta Pulse | Co pokazuje | Kiedy ratuje życie |
|---|---|---|
| Slow queries | Zapytania SQL powyżej progu z czasem i miejscem wywołania | Aplikacja zwalnia po wdrożeniu — od razu widać które zapytanie |
| Slow requests | Endpointy z najwyższym czasem odpowiedzi | „Strona główna działa wolno" → konkretna trasa i czas |
| Exceptions | Wyjątki zgrupowane po typie | Ciche błędy w tle, których nikt nie zgłosił |
| Queues | Rozmiar kolejek i przepustowość | Uzupełnia Horizon dla sterowników innych niż Redis |
| Servers | CPU i pamięć serwera | Zanim monitoring zewnętrzny zauważy, Pulse pokazuje trend |
| Cache | Hit ratio i operacje | Spadek hit ratio = cache przestał działać |
| Slow outgoing requests | Wolne wywołania zewnętrznych API | Partner zwalnia — widzisz to u siebie |
Zaleta Pulse nad rozwiązaniami zewnętrznymi: zero dodatkowej infrastruktury (dane w twojej bazie), pełna integracja z ekosystemem (kolejki, cache, scheduler) i dane, które nie wychodzą z serwera. Ograniczenie: nie zastąpi APM-a z alertami i tracingiem na skalę enterprise — dla większości aplikacji biznesowych jest jednak w zupełności wystarczający.
Laravel Telescope — mikroskop, nie monitoring
Telescope zapisuje wszystko: każde żądanie HTTP, każde zapytanie SQL, każdy mail, notyfikację, zadanie w kolejce, wyjątek i operację cache. To jego siła i przekleństwo:
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate
Uwaga: Telescope na produkcji potrafi wygenerować dziesiątki tysięcy wpisów dziennie, znacząco obciążać bazę i zapisywać dane wrażliwe (payloady żądań, treści maili, dane sesji). Jeśli musisz mieć go na produkcji — ogranicz przez
Telescope::filter(), włącz pruning (telescope:prune --hours=48w schedulerze) i trzymaj dashboard za silnym logowaniem. Domyślnie: tylko lokalnie.
Kiedy Telescope jest niezastąpiony: debugujesz konkretne żądanie (co dokładnie poszło do bazy i z jakim wynikiem?), analizujesz, dlaczego mail nie wyszedł, śledzisz kolejność zdarzeń w błędzie. Wtedy otwierasz Telescope, znajdujesz wpis i widzisz pełny kontekst — czego Horizon ani Pulse nie pokażą.
Które narzędzie kiedy — drzewko decyzyjne
| Sytuacja | Narzędzie |
|---|---|
| „Kolejka rośnie / zadania się nie wykonują" | Horizon |
| „Nie wiem, czy workery nadążają" | Horizon (przepustowość) |
| „Aplikacja zwalnia, nie wiem gdzie" | Pulse (slow queries, slow requests) |
| „Coś rzuca wyjątki w tle" | Pulse (exceptions) |
| „Serwer ma wysokie CPU" | Pulse (servers) |
| „To konkretne żądanie zwróciło dziwne dane" | Telescope (lokalnie) |
| „Mail nie dotarł, co poszło?" | Telescope (maile) |
| „Partner API odpowiada wolno" | Pulse (slow outgoing) + Horizon (czasy zadań) |
Konfiguracja produkcyjna — minimalny zestaw
Zestaw, który wdrażamy w projektach
- Horizon pod Supervisorem (jeden proces), dashboard za bramką
viewHorizon, alertywaitsna Slacka. - Pulse z
pulse:checkw tle i pruningiem w schedulerze (pulse:prune), dashboard za bramkąviewPulse. - Telescope tylko lokalnie (
--dev), z pruningiem gdy używany intensywnie.
Do tego zewnętrzny uptime monitoring (Better Stack, UptimeRobot) na najważniejsze endpointy — bo żadne z trzech narzędzi nie powiadomi, że aplikacja w ogóle nie odpowiada. Pulse i Horizon odpowiadają na pytanie „co się dzieje w środku", uptime monitoring na „czy w ogóle działa".
Najczęściej zadawane pytania
Czy Laravel Pulse zastępuje Horizon?
Nie — uzupełnia go. Pulse pokazuje rozmiar kolejek i przepustowość w ujęciu ogólnym (działa też dla sterowników innych niż Redis), ale nie ma operacyjnego panelu Horizon: zarządzania workerami, podglądu failed jobs z ponawianiem, autoskalowania i alertów per kolejka. Horizon = kolejki, Pulse = cała aplikacja.
Czy Telescope można włączyć na produkcji?
Technicznie tak, ale domyślnie nie należy. Telescope zapisuje każde żądanie i zapytanie SQL — generuje duże obciążenie bazy i zbiera dane wrażliwe. Jeśli musi działać na produkcji: ogranicz filtry (Telescope::filter()), włącz automatyczne czyszczenie (telescope:prune) i zabezpiecz dashboard logowaniem. Standardowo: Telescope tylko lokalnie i na staging.
Jak monitorować kolejki bez Redisa (sterownik database lub SQS)?
Pulse pokazuje rozmiar i przepustowość kolejek dla dowolnego sterownika. Do alertów użyj php artisan queue:monitor redis:default --max=100 (działa też dla innych kolejek) w cronie albo zewnętrznego monitoringu. Horizon w tym układzie nie zadziała — wymaga Redisa.
Gdzie są przechowywane dane Pulse?
W twojej bazie danych, w tabelach pulse_* (agregaty per karta). Dane nie wychodzą z serwera — to jedna z głównych zalet nad zewnętrznymi APM-ami. Pamiętaj o czyszczeniu danych (pulse:prune w schedulerze), żeby tabele nie rosły w nieskończoność, oraz o włączeniu zapisu w konfiguracji.
Ile kosztuje wdrożenie monitoringu w projekcie?
Horizon to element standardu kolejek (wliczony we wdrożenie kolejek — 2 000–10 000 zł przy istniejącym projekcie). Pulse: instalacja i konfiguracja to 2–4 godziny pracy plus drobne zmiany w konfiguracji serwera. Telescope lokalnie: kilkanaście minut. Największy koszt to zwykle nie instalacja, a wybór progów alertów i podłączenie powiadomień.
👉 Aplikacja zwalnia, a nie wiesz gdzie?
Kolejki rosną, a nikt nie dostaje alertu? Wdrożymy Horizon i Pulse razem z alertami. Opisz projekt na kontakt@informatix.com.pl lub przez formularz — wycena jest bezpłatna.
📖 Zobacz również: Kolejki w Laravel i Laravel Horizon — poradnik, Supervisor i systemd dla kolejek Laravel, optymalizacja wydajności aplikacji Laravel oraz usługa Laravel development.