> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel Pulse

> Installation et configuration du tableau de bord de supervision Laravel Pulse : recorders, échantillonnage et cartes personnalisées.

## Qu'est-ce que Laravel Pulse

[Laravel Pulse](https://github.com/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éristique | Laravel Pulse                   | Laravel Telescope                       |
| --------------- | ------------------------------- | --------------------------------------- |
| Objectif        | Tendances et métriques agrégées | Débogage détaillé par requête/événement |
| Données         | Métriques agrégées              | Log d'événements individuels            |
| Usage           | Supervision de production       | Débogage en dev/staging                 |

<Info>
  Pour le débogage détaillé, utilisez [Laravel Telescope](/fr/blog/telescope-introduction).
</Info>

### Flux de données

```mermaid theme={null}
flowchart LR
    A["Application Laravel"] -->|Événements| B["Recorders"]
    B -->|Entrées| C["Base de données<br>(tables Pulse)"]
    C -->|Agrégation / affichage| D["Dashboard<br>/pulse"]
    E["Démon<br>pulse:check"] -->|Infos serveur| C
```

***

## Installation

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

<Steps>
  <Step title="Installer le package">
    ```shell theme={null}
    composer require laravel/pulse
    ```
  </Step>

  <Step title="Publier configuration et migrations">
    ```shell theme={null}
    php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
    ```
  </Step>

  <Step title="Exécuter les migrations">
    ```shell theme={null}
    php artisan migrate
    ```
  </Step>
</Steps>

Après migration, accédez au dashboard sur `/pulse`.

### Publier la configuration seule

```shell theme={null}
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`.

```php theme={null}
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.

```shell theme={null}
php artisan vendor:publish --tag=pulse-dashboard
```

Éditez `resources/views/vendor/pulse/dashboard.blade.php`.
Le dashboard tourne sur [Livewire](https://livewire.laravel.com/) : aucun build JavaScript n'est requis.

```blade theme={null}
{{-- 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`.

```blade theme={null}
<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.

```php theme={null}
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.

```php theme={null}
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.

```php theme={null}
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.

```shell theme={null}
php artisan pulse:check
```

Nom du serveur : `gethostname()` par défaut ; personnalisable via variable.

```ini theme={null}
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.

```ini theme={null}
PULSE_INGEST_DRIVER=redis
```

Utilisez `pulse:work` pour lire le flux.

```shell theme={null}
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.

```php theme={null}
// 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 :

| Variable                        | Description                   | Défaut          |
| ------------------------------- | ----------------------------- | --------------- |
| `PULSE_ENABLED`                 | Activation de Pulse           | `true`          |
| `PULSE_DB_CONNECTION`           | Connexion DB Pulse            | Défaut app      |
| `PULSE_INGEST_DRIVER`           | Driver d'ingestion (`redis`…) | `storage`       |
| `PULSE_SERVER_NAME`             | Nom du serveur                | `gethostname()` |
| `PULSE_SLOW_REQUESTS_THRESHOLD` | Seuil requête lente (ms)      | `1000`          |
| `PULSE_SLOW_JOBS_THRESHOLD`     | Seuil job lent (ms)           | `1000`          |
| `PULSE_SLOW_QUERIES_THRESHOLD`  | Seuil requête SQL lente (ms)  | `1000`          |

***

## Cartes personnalisées

Créez vos propres cartes en [Livewire](https://livewire.laravel.com/).

```php theme={null}
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.

```blade theme={null}
<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`.

```php theme={null}
use Laravel\Pulse\Facades\Pulse;

Pulse::record('user_sale', $user->id, $sale->amount)
    ->sum()
    ->count();
```

Intégrez la carte dans le dashboard.

```blade theme={null}
<x-pulse>
    ...
    <livewire:pulse.top-sellers cols="4" />
</x-pulse>
```

***

## Récapitulatif

| Objectif                 | Méthode                                     |
| ------------------------ | ------------------------------------------- |
| Installer Pulse          | `composer require laravel/pulse`            |
| Accéder au dashboard     | Route `/pulse`                              |
| Contrôle d'accès en prod | Définir la gate `viewPulse`                 |
| Supervision serveur      | Lancer `php artisan pulse:check` en continu |
| Échantillonnage          | Régler `sample_rate`                        |

## Prochaines étapes

<Columns cols={2}>
  <Card title="Gestion des erreurs" icon="circle-x" href="/fr/error-handling">
    Traitement des exceptions et rapports.
  </Card>

  <Card title="Journalisation" icon="file-text" href="/fr/logging">
    Configuration et utilisation du système de logs.
  </Card>
</Columns>


## Related topics

- [Laravel Reverb](/fr/reverb.md)
- [Laravel Pennant](/fr/pennant.md)
- [Laravel Telescope](/fr/telescope.md)
- [Techniques pratiques de Laravel Telescope](/fr/blog/telescope-introduction.md)
- [Introduction à Laravel Nightwatch](/fr/blog/nightwatch-introduction.md)
