Vai al contenuto principale

Cos’è Laravel Pulse

Laravel Pulse è una dashboard di monitoraggio che ti mostra a colpo d’occhio prestazioni e utilizzo dell’applicazione. Individua job lenti, endpoint lenti e utenti più attivi.

Differenza con Telescope

CaratteristicaLaravel PulseLaravel Telescope
ScopoTrend e metriche aggregateDebug dettagliato di richieste ed eventi
DatiMetriche aggregateLog per singolo evento
Ambiente idealeProduzioneSviluppo/staging
Per il debug dettagliato di singoli eventi usa Laravel Telescope.

Flusso dei dati


Installazione

Lo storage first-party richiede MySQL, MariaDB o PostgreSQL. Se usi altro DB, predisponi un DB dedicato.
1

Pacchetto

composer require laravel/pulse
2

Pubblica config e migration

php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
3

Migrate

php artisan migrate
Dashboard: /pulse.

Pubblicare solo la config

php artisan vendor:publish --tag=pulse-config

Accesso alla dashboard

Autenticazione

Di default solo local. Definisci la gate viewPulse in AppServiceProvider.
use App\Models\User;
use Illuminate\Support\Facades\Gate;

public function boot(): void
{
    Gate::define('viewPulse', function (User $user) {
        return $user->isAdmin();
    });
}

Personalizzazione

php artisan vendor:publish --tag=pulse-dashboard
Modifica resources/views/vendor/pulse/dashboard.blade.php. La dashboard è Livewire, niente build JS.
<x-pulse full-width>
    ...
</x-pulse>

<x-pulse cols="16">
    ...
</x-pulse>
cols e rows regolano dimensioni e posizione.
<livewire:pulse.usage cols="4" rows="2" />
<livewire:pulse.slow-queries expand />

Recorder

Registrano gli eventi. Configurazione in config/pulse.php sezione recorders.

Requests / Slow Requests

Cattura info sulle richieste. Soglia di route lente (default 1000ms), sample rate, path da ignorare.
Recorders\SlowRequests::class => [
    // ...
    'threshold' => [
        '#^/admin/#' => 5000,
        'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
    ],
],

Slow Jobs

Recorders\SlowJobs::class => [
    // ...
    'threshold' => [
        '#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
        'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
    ],
],

Exceptions

Cattura eccezioni segnalabili. Raggruppate per classe e posizione.

Cache

Hit/miss della cache.
Recorders\CacheInteractions::class => [
    // ...
    'groups' => [
        '/:\d+/' => ':*',
    ],
],

Queues

Throughput dei job (in coda, in elaborazione, completati, rilasciati, falliti).

Servers

CPU, memoria, storage. Richiede pulse:check in esecuzione su ogni server.
php artisan pulse:check
Nome server con variabile d’ambiente:
PULSE_SERVER_NAME=load-balancer

Users

UserRequests e UserJobs catturano info utente per la card “Application Usage”.

Redis Ingest

Per alto traffico invia le entry a uno stream Redis prima di scriverle in DB.
PULSE_INGEST_DRIVER=redis
Serve il worker:
php artisan pulse:work

Sampling

In produzioni ad alto traffico, con il sampling registri solo una parte degli eventi.
Recorders\UserRequests::class => [
    'sample_rate' => 0.1, // 10%
],
Nella dashboard il valore approssimato è preceduto da ~.

Variabili d’ambiente

VariabileDescrizioneDefault
PULSE_ENABLEDAttivo/disattivotrue
PULSE_DB_CONNECTIONConnessione DBDefault dell’app
PULSE_INGEST_DRIVERDriver di ingest (redis, ecc.)storage
PULSE_SERVER_NAMENome servergethostname()
PULSE_SLOW_REQUESTS_THRESHOLDSoglia richieste lente (ms)1000
PULSE_SLOW_JOBS_THRESHOLDSoglia job lenti (ms)1000
PULSE_SLOW_QUERIES_THRESHOLDSoglia query lente (ms)1000

Card personalizzate

Card come componenti Livewire.
namespace App\Livewire\Pulse;

use Laravel\Pulse\Livewire\Card;
use Livewire\Attributes\Lazy;

#[Lazy]
class TopSellers extends Card
{
    public function render()
    {
        return view('livewire.pulse.top-sellers');
    }
}
Vista con i componenti Blade di Pulse:
<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s="">
    <x-pulse::card-header name="Top Sellers">
        <x-slot:icon>
            ...
        </x-slot:icon>
    </x-pulse::card-header>

    <x-pulse::scroll :expand="$expand">
        ...
    </x-pulse::scroll>
</x-pulse::card>
Cattura dati custom con Pulse::record.
use Laravel\Pulse\Facades\Pulse;

Pulse::record('user_sale', $user->id, $sale->amount)
    ->sum()
    ->count();
Aggiungi la card alla dashboard:
<x-pulse>
    ...
    <livewire:pulse.top-sellers cols="4" />
</x-pulse>

ObiettivoMetodo
Installazionecomposer require laravel/pulse
Accesso dashboardRoute /pulse
Controllo accessi in produzioneGate viewPulse
Monitor serverphp artisan pulse:check sempre attivo
SamplingOpzione sample_rate

Prossimi passi

Gestione errori

Gestione delle eccezioni.

Logging

Configurazione e uso del logging.
Ultima modifica il 13 luglio 2026