> ## 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

> Uitleg over het opzetten en configureren van een applicatiemonitoringdashboard met Laravel Pulse. Behandelt recorders, sampling en het maken van eigen kaarten.

## Wat is Laravel Pulse

[Laravel Pulse](https://github.com/laravel/pulse) is een monitoringdashboard waarmee je in één oogopslag de prestaties en het gebruik van je applicatie ziet.
Je kunt knelpunten opsporen, zoals trage jobs en trage endpoints, of nagaan wie de meest actieve gebruikers zijn.

### Het verschil tussen Telescope en Pulse

| Kenmerk       | Laravel Pulse                                          | Laravel Telescope                                         |
| ------------- | ------------------------------------------------------ | --------------------------------------------------------- |
| Doel          | Trends en geaggregeerde data van de hele app monitoren | Gedetailleerd debuggen van individuele requests en events |
| Data          | Geaggregeerde metrics                                  | Logs van individuele events                               |
| Geschikt voor | Prestatiemonitoring in productie                       | Debuggen in ontwikkel- en stagingomgevingen               |

<Info>
  Gebruik [Laravel Telescope](/nl/blog/telescope-introduction) voor gedetailleerd debuggen van individuele events.
</Info>

### Dataflowdiagram

```mermaid theme={null}
flowchart LR
    A["Laravel-app"] -->|Events detecteren| B["Recorders<br>(Recorders)"]
    B -->|Entries vastleggen| C["Database<br>(Pulse-tabellen)"]
    C -->|Aggregeren en tonen| D["Dashboard<br>/pulse"]
    E["pulse:check<br>daemon"] -->|Serverinformatie| C
```

***

## Installatie

<Warning>
  De first-party storage-implementatie van Pulse vereist een MySQL-, MariaDB- of PostgreSQL-database. Gebruik je een andere database-engine, zet dan een aparte MySQL-, MariaDB- of PostgreSQL-database op speciaal voor de Pulse-data.
</Warning>

<Steps>
  <Step title="Het pakket installeren">
    Installeer Pulse met Composer.

    ```shell theme={null}
    composer require laravel/pulse
    ```
  </Step>

  <Step title="Configuratiebestand en migraties publiceren">
    Publiceer de bestanden met het Artisan-commando `vendor:publish`.

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

  <Step title="De migraties uitvoeren">
    Maakt de tabellen aan waarin Pulse zijn data opslaat.

    ```shell theme={null}
    php artisan migrate
    ```
  </Step>
</Steps>

Na het uitvoeren van de migraties bereik je het dashboard via de route `/pulse`.

### Het configuratiebestand publiceren

Je kunt het configuratiebestand ook apart publiceren om aan te passen.

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

***

## Toegang tot het dashboard

### Autorisatie instellen

Standaard is het dashboard alleen toegankelijk in de `local`-omgeving.
Stel in productie toegangscontrole in door de autorisatiegate `viewPulse` aan te passen.

```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();
    });
}
```

Voeg bovenstaande code toe aan de `boot`-methode van `app/Providers/AppServiceProvider.php`.

### Het dashboard aanpassen

Je kunt de dashboardview publiceren om de kaarten en de lay-out aan te passen.

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

Bewerk na het publiceren `resources/views/vendor/pulse/dashboard.blade.php`.
Omdat het dashboard op [Livewire](https://livewire.laravel.com/) draait, kun je het aanpassen zonder JavaScript te bouwen.

```blade theme={null}
{{-- Volledige breedte gebruiken --}}
<x-pulse full-width>
    ...
</x-pulse>

{{-- Het aantal kolommen wijzigen --}}
<x-pulse cols="16">
    ...
</x-pulse>
```

Van elke kaart kun je de grootte en positie aanpassen met de props `cols` en `rows`.

```blade theme={null}
<livewire:pulse.usage cols="4" rows="2" />
<livewire:pulse.slow-queries expand />
```

***

## Recorders

Recorders vangen events van je applicatie op en leggen ze vast in de Pulse-database.
De configuratie beheer je in de sectie `recorders` van `config/pulse.php`.

### Requests / Slow Requests

De `Requests`-recorder legt informatie vast over de requests naar je applicatie.
Je kunt de drempel voor trage routes (standaard: 1000 ms), de samplerate en te negeren paden instellen.

```php theme={null}
Recorders\SlowRequests::class => [
    // ...
    'threshold' => [
        '#^/admin/#' => 5000,
        'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
    ],
],
```

### Slow Jobs

De `SlowJobs`-recorder legt trage jobs vast die de drempel overschrijden (standaard: 1000 ms).
Je kunt per job een andere drempel instellen.

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

### Exceptions

De `Exceptions`-recorder legt de rapporteerbare exceptions vast die in je applicatie optreden.
Ze worden gegroepeerd op exceptionklasse en de plek waar ze optraden.

### Cache

De `CacheInteractions`-recorder legt cache-hits en -misses vast.
Je kunt ook reguliere expressies instellen om vergelijkbare sleutels te groeperen.

```php theme={null}
Recorders\CacheInteractions::class => [
    // ...
    'groups' => [
        '/:\d+/' => ':*',
    ],
],
```

### Queues

De `Queues`-recorder legt de doorvoer van jobs in de queues vast (in de wachtrij gezet, in verwerking, verwerkt, released, mislukt).

### Servers

De `Servers`-recorder legt het CPU-, geheugen- en opslaggebruik vast van de servers waarop je applicatie draait.
Om deze recorder te gebruiken moet op elke te monitoren server het commando `pulse:check` continu draaien.

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

Als servernaam wordt standaard de waarde van PHP's `gethostname()` gebruikt. Om die aan te passen stel je een omgevingsvariabele in.

```ini theme={null}
PULSE_SERVER_NAME=load-balancer
```

### Users

De recorders `UserRequests` en `UserJobs` leggen informatie vast over de gebruikers die requests of jobs hebben verstuurd en tonen die op de kaart "Application Usage".

### Redis Ingest

In omgevingen met veel verkeer kun je entries eerst naar een Redis-stream sturen en daarna in de database opnemen.

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

Gebruik je Redis-ingest, dan moet je de stream monitoren met het commando `pulse:work`.

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

***

## Sampling

In omgevingen met veel verkeer kunnen er bij het vastleggen van alle events miljoenen rijen in de database ontstaan.
Schakel je **sampling** in, dan wordt slechts een deel van de events vastgelegd en toont het dashboard benaderingen.

```php theme={null}
// config/pulse.php
Recorders\UserRequests::class => [
    'sample_rate' => 0.1, // Slechts 10% van de requests vastleggen
],
```

Op het dashboard staat vóór benaderde waarden een `~`.
Hoe meer entries een metric heeft, hoe lager je de samplerate kunt zetten met behoud van nauwkeurigheid.

***

## Omgevingsvariabelen

De belangrijkste instellingen stuur je aan via omgevingsvariabelen.

| Omgevingsvariabele              | Beschrijving                             | Standaard                  |
| ------------------------------- | ---------------------------------------- | -------------------------- |
| `PULSE_ENABLED`                 | Pulse aan/uit                            | `true`                     |
| `PULSE_DB_CONNECTION`           | De databaseverbinding die Pulse gebruikt | Standaard van de app       |
| `PULSE_INGEST_DRIVER`           | De ingest-driver (bijvoorbeeld `redis`)  | `storage`                  |
| `PULSE_SERVER_NAME`             | Naam ter identificatie van de server     | Waarde van `gethostname()` |
| `PULSE_SLOW_REQUESTS_THRESHOLD` | Drempel voor trage requests (ms)         | `1000`                     |
| `PULSE_SLOW_JOBS_THRESHOLD`     | Drempel voor trage jobs (ms)             | `1000`                     |
| `PULSE_SLOW_QUERIES_THRESHOLD`  | Drempel voor trage query's (ms)          | `1000`                     |

***

## Eigen kaarten

Je kunt eigen Pulse-kaarten maken om applicatiespecifieke data te tonen.
Kaarten implementeer je als [Livewire](https://livewire.laravel.com/)-componenten.

```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');
    }
}
```

In de view van je kaart kun je de door Pulse geleverde Blade-componenten gebruiken voor een consistente uitstraling.

```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>
```

Gebruik de methode `Pulse::record` om eigen data vast te leggen.

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

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

Het gemaakte component neem je op in de dashboardview.

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

***

## Samenvatting

| Wat je wilt doen              | Methode                                          |
| ----------------------------- | ------------------------------------------------ |
| Pulse installeren             | `composer require laravel/pulse`                 |
| Het dashboard openen          | De route `/pulse`                                |
| Toegangscontrole in productie | Definieer de `viewPulse`-gate                    |
| Servermonitoring inschakelen  | Laat `php artisan pulse:check` continu draaien   |
| Sampling instellen            | Geef de verhouding op met de optie `sample_rate` |

## Volgende stappen

<Columns cols={2}>
  <Card title="Foutafhandeling" icon="circle-x" href="/nl/error-handling">
    Leer hoe exceptions en rapportage in je applicatie werken.
  </Card>

  <Card title="Logging" icon="file-text" href="/nl/logging">
    Uitleg over het configureren en benutten van het logsysteem van Laravel.
  </Card>
</Columns>


## Related topics

- [Laravel Reverb](/nl/reverb.md)
- [Laravel Telescope](/nl/telescope.md)
- [Laravel Pennant](/nl/pennant.md)
- [Praktische technieken voor Laravel Telescope](/nl/blog/telescope-introduction.md)
- [Introductie tot Laravel Nightwatch](/nl/blog/nightwatch-introduction.md)
