Passer au contenu principal

Qu’est-ce que Laravel Pulse

Laravel Pulse est un tableau de bord qui donne une vue d’ensemble des performances et de l’usage de votre application. Identifiez les jobs lents ou les endpoints qui saturent, ou repérez vos utilisateurs les plus actifs.

Différence entre Telescope et Pulse

CaractéristiqueLaravel PulseLaravel Telescope
ObjectifTendances et métriques agrégéesDébogage détaillé par requête/événement
DonnéesMétriques agrégéesLog d’événements individuels
UsageSupervision de productionDébogage en dev/staging
Pour le débogage détaillé, utilisez Laravel Telescope.

Flux de données


Installation

Le stockage Pulse first-party nécessite MySQL, MariaDB ou PostgreSQL. Prévoyez une base dédiée si vous utilisez un autre moteur.
1

Installer le package

composer require laravel/pulse
2

Publier configuration et migrations

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

Exécuter les migrations

php artisan migrate
Après migration, accédez au dashboard sur /pulse.

Publier la configuration seule

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

Accès au dashboard

Configuration d’accès

Par défaut, seul local accède. En production, personnalisez la gate viewPulse.
use App\Models\User;
use Illuminate\Support\Facades\Gate;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Gate::define('viewPulse', function (User $user) {
        return $user->isAdmin();
    });
}
Ajoutez le code ci-dessus dans boot de app/Providers/AppServiceProvider.php.

Personnalisation du dashboard

Publiez la vue pour personnaliser cartes et layout.
php artisan vendor:publish --tag=pulse-dashboard
Éditez resources/views/vendor/pulse/dashboard.blade.php. Le dashboard tourne sur Livewire : aucun build JavaScript n’est requis.
{{-- Pleine largeur --}}
<x-pulse full-width>
    ...
</x-pulse>

{{-- Nombre de colonnes --}}
<x-pulse cols="16">
    ...
</x-pulse>
Chaque carte se dimensionne via cols et rows.
<livewire:pulse.usage cols="4" rows="2" />
<livewire:pulse.slow-queries expand />

Recorders

Les recorders capturent les événements et les stockent dans les tables Pulse. Configurés dans la section recorders de config/pulse.php.

Requests / Slow Requests

Requests capture les infos des requêtes. Seuil pour route lente (1000 ms par défaut), taux d’échantillonnage, chemins ignorés.
Recorders\SlowRequests::class => [
    // ...
    'threshold' => [
        '#^/admin/#' => 5000,
        'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
    ],
],

Slow Jobs

Capture les jobs dépassant le seuil (1000 ms par défaut). Seuil personnalisable par job.
Recorders\SlowJobs::class => [
    // ...
    'threshold' => [
        '#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
        'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
    ],
],

Exceptions

Capture les exceptions à rapporter. Regroupées par classe et lieu.

Cache

CacheInteractions capture hits et misses. Regroupement par regex des clés similaires.
Recorders\CacheInteractions::class => [
    // ...
    'groups' => [
        '/:\d+/' => ':*',
    ],
],

Queues

Débit des jobs (enfilés, en cours, terminés, released, failed).

Servers

CPU, mémoire, stockage des serveurs. Requiert pulse:check en permanence.
php artisan pulse:check
Nom du serveur : gethostname() par défaut ; personnalisable via variable.
PULSE_SERVER_NAME=load-balancer

Users

UserRequests et UserJobs capturent les utilisateurs pour la carte « Application Usage ».

Redis Ingest

Pour un trafic élevé, envoyez d’abord vers un flux Redis puis persistez.
PULSE_INGEST_DRIVER=redis
Utilisez pulse:work pour lire le flux.
php artisan pulse:work

Échantillonnage

À fort trafic, tout capturer produit des millions de lignes. L’échantillonnage n’enregistre qu’une fraction et affiche des approximations.
// config/pulse.php
Recorders\UserRequests::class => [
    'sample_rate' => 0.1, // 10 % des requêtes
],
Le dashboard préfixe la valeur par ~. Plus le volume est grand, plus vous pouvez baisser le taux sans perdre en précision.

Variables d’environnement

Principaux réglages via variables :
VariableDescriptionDéfaut
PULSE_ENABLEDActivation de Pulsetrue
PULSE_DB_CONNECTIONConnexion DB PulseDéfaut app
PULSE_INGEST_DRIVERDriver d’ingestion (redis…)storage
PULSE_SERVER_NAMENom du serveurgethostname()
PULSE_SLOW_REQUESTS_THRESHOLDSeuil requête lente (ms)1000
PULSE_SLOW_JOBS_THRESHOLDSeuil job lent (ms)1000
PULSE_SLOW_QUERIES_THRESHOLDSeuil requête SQL lente (ms)1000

Cartes personnalisées

Créez vos propres cartes en 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');
    }
}
Utilisez les composants Blade fournis pour un rendu cohérent.
<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>
Capture personnalisée via Pulse::record.
use Laravel\Pulse\Facades\Pulse;

Pulse::record('user_sale', $user->id, $sale->amount)
    ->sum()
    ->count();
Intégrez la carte dans le dashboard.
<x-pulse>
    ...
    <livewire:pulse.top-sellers cols="4" />
</x-pulse>

Récapitulatif

ObjectifMéthode
Installer Pulsecomposer require laravel/pulse
Accéder au dashboardRoute /pulse
Contrôle d’accès en prodDéfinir la gate viewPulse
Supervision serveurLancer php artisan pulse:check en continu
ÉchantillonnageRégler sample_rate

Prochaines étapes

Gestion des erreurs

Traitement des exceptions et rapports.

Journalisation

Configuration et utilisation du système de logs.
Dernière modification le 13 juillet 2026