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

> Wie Sie mit Laravel Pulse ein Monitoring-Dashboard für Ihre Anwendung einrichten und konfigurieren. Von Recordern über Sampling bis zu eigenen Cards.

## Was ist Laravel Pulse

[Laravel Pulse](https://github.com/laravel/pulse) ist ein Monitoring-Dashboard, das Ihnen Performance und Nutzung Ihrer Anwendung auf einen Blick zeigt.
Sie identifizieren Bottlenecks bei langsamen Jobs oder Endpunkten und finden die aktivsten Benutzer.

### Unterschied zwischen Telescope und Pulse

| Merkmal      | Laravel Pulse                                    | Laravel Telescope                                 |
| ------------ | ------------------------------------------------ | ------------------------------------------------- |
| Zweck        | Trends und aggregierte Daten für die gesamte App | Detailliertes Debugging einzelner Requests/Events |
| Daten        | Bereits aggregierte Metriken                     | Log einzelner Events                              |
| Geeignet für | Performance-Monitoring in Produktion             | Debugging in Dev/Staging                          |

<Info>
  Für detailliertes Debugging einzelner Events verwenden Sie [Laravel Telescope](/de/blog/telescope-introduction).
</Info>

### Datenfluss

```mermaid theme={null}
flowchart LR
    A["Laravel-App"] -->|Events erkennen| B["Recorders"]
    B -->|Einträge speichern| C["Datenbank<br>(Pulse-Tabellen)"]
    C -->|aggregieren und anzeigen| D["Dashboard<br>/pulse"]
    E["pulse:check<br>-Daemon"] -->|Serverinfos| C
```

***

## Installation

<Warning>
  Die First-Party-Storage-Implementierung von Pulse benötigt MySQL, MariaDB oder PostgreSQL. Wenn Sie eine andere Datenbank-Engine verwenden, richten Sie eine dedizierte MySQL-, MariaDB- oder PostgreSQL-Datenbank speziell für die Pulse-Daten ein.
</Warning>

<Steps>
  <Step title="Paket installieren">
    Installieren Sie Pulse mit Composer.

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

  <Step title="Konfigurationsdatei und Migrationen veröffentlichen">
    Veröffentlichen Sie die Dateien mit dem Artisan-Befehl `vendor:publish`.

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

  <Step title="Migrationen ausführen">
    Legt die Tabellen für die Pulse-Daten an.

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

Nach Abschluss der Migration ist das Dashboard unter der Route `/pulse` erreichbar.

### Konfigurationsdatei veröffentlichen

Sie können die Konfigurationsdatei separat veröffentlichen, um sie anzupassen.

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

***

## Zugriff auf das Dashboard

### Authentifizierung

Standardmäßig ist das Dashboard nur in der Umgebung `local` zugänglich.
In Produktivumgebungen richten Sie den Zugriff über das `viewPulse`-Gate ein.

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

Fügen Sie den obigen Code in die `boot`-Methode von `app/Providers/AppServiceProvider.php` ein.

### Dashboard anpassen

Sie können die Dashboard-View veröffentlichen und Cards sowie Layout anpassen.

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

Nach der Veröffentlichung bearbeiten Sie `resources/views/vendor/pulse/dashboard.blade.php`.
Da das Dashboard mit [Livewire](https://livewire.laravel.com/) läuft, sind Anpassungen ohne JavaScript-Build möglich.

```blade theme={null}
{{-- Volle Breite --}}
<x-pulse full-width>
    ...
</x-pulse>

{{-- Anzahl der Spalten ändern --}}
<x-pulse cols="16">
    ...
</x-pulse>
```

Jede Card lässt sich über die Attribute `cols` und `rows` in Größe und Position steuern.

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

***

## Recorders

Recorders fangen Events in Ihrer Anwendung ab und schreiben sie in die Pulse-Datenbank.
Die Konfiguration finden Sie in `config/pulse.php` unter `recorders`.

### Requests / Slow Requests

Der Recorder `Requests` erfasst Informationen zu eingehenden Requests.
Sie können den Schwellenwert für langsame Routen (Standard: 1000 ms), die Sampling-Rate und zu ignorierende Pfade festlegen.

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

### Slow Jobs

`SlowJobs` erfasst Jobs, die den Schwellenwert (Standard: 1000 ms) überschreiten.
Sie können pro Job unterschiedliche Werte definieren.

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

### Exceptions

Der Recorder `Exceptions` erfasst gemeldete Ausnahmen der Anwendung.
Sie werden nach Exception-Klasse und Fundort gruppiert.

### Cache

`CacheInteractions` erfasst Hits und Misses des Caches.
Sie können reguläre Ausdrücke definieren, um ähnliche Schlüssel zusammenzufassen.

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

### Queues

`Queues` erfasst den Durchsatz der Queue-Jobs (eingereiht, in Bearbeitung, erledigt, freigegeben, fehlgeschlagen).

### Servers

`Servers` erfasst CPU-, Speicher- und Storage-Auslastung der Server, auf denen die App läuft.
Auf jedem überwachten Server muss der Befehl `pulse:check` dauerhaft laufen.

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

Als Servername wird standardmäßig der Wert von PHPs `gethostname()` verwendet. Für einen abweichenden Namen setzen Sie eine Umgebungsvariable.

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

### Users

`UserRequests` und `UserJobs` erfassen, welche Benutzer Requests bzw. Jobs ausgelöst haben, und zeigen sie in der Card „Application Usage“ an.

### Redis Ingest

In High-Traffic-Umgebungen können Sie Einträge zunächst in einen Redis-Stream schicken und erst dann in die Datenbank übernehmen.

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

Bei Redis-Ingest müssen Sie mit `pulse:work` den Stream verarbeiten.

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

***

## Sampling

Bei hohem Traffic können durch das Erfassen aller Events Millionen von Zeilen in der Datenbank entstehen.
Mit **Sampling** protokollieren Sie nur einen Teil der Events und zeigen sie im Dashboard als Näherungswerte an.

```php theme={null}
// config/pulse.php
Recorders\UserRequests::class => [
    'sample_rate' => 0.1, // Nur 10 % der Requests protokollieren
],
```

Näherungswerte werden im Dashboard mit vorangestelltem `~` gekennzeichnet.
Je mehr Einträge eine Metrik erhält, desto stärker können Sie die Sampling-Rate senken, ohne die Aussagekraft zu verlieren.

***

## Umgebungsvariablen

Wichtige Einstellungen lassen sich per Umgebungsvariable steuern.

| Umgebungsvariable               | Beschreibung                        | Standard                 |
| ------------------------------- | ----------------------------------- | ------------------------ |
| `PULSE_ENABLED`                 | Pulse aktivieren/deaktivieren       | `true`                   |
| `PULSE_DB_CONNECTION`           | DB-Verbindung von Pulse             | Voreinstellung der App   |
| `PULSE_INGEST_DRIVER`           | Ingest-Treiber (z. B. `redis`)      | `storage`                |
| `PULSE_SERVER_NAME`             | Server-Kennname                     | Wert von `gethostname()` |
| `PULSE_SLOW_REQUESTS_THRESHOLD` | Schwelle für langsame Requests (ms) | `1000`                   |
| `PULSE_SLOW_JOBS_THRESHOLD`     | Schwelle für langsame Jobs (ms)     | `1000`                   |
| `PULSE_SLOW_QUERIES_THRESHOLD`  | Schwelle für langsame Queries (ms)  | `1000`                   |

***

## Eigene Cards

Sie können eigene Pulse-Cards erstellen, um anwendungsspezifische Daten darzustellen.
Cards werden als [Livewire](https://livewire.laravel.com/)-Komponente implementiert.

```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 der Card-View verwenden Sie die von Pulse mitgelieferten Blade-Komponenten für ein einheitliches Aussehen.

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

Zum Erfassen eigener Daten verwenden Sie `Pulse::record`.

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

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

Die erstellte Komponente binden Sie in die Dashboard-View ein.

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

***

## Zusammenfassung

| Ziel                         | Vorgehen                                          |
| ---------------------------- | ------------------------------------------------- |
| Pulse installieren           | `composer require laravel/pulse`                  |
| Auf das Dashboard zugreifen  | Route `/pulse`                                    |
| Zugriff in Produktion regeln | `viewPulse`-Gate definieren                       |
| Server-Monitoring aktivieren | `php artisan pulse:check` dauerhaft laufen lassen |
| Sampling konfigurieren       | Sampling-Rate über `sample_rate` festlegen        |

## Nächste Schritte

<Columns cols={2}>
  <Card title="Error Handling" icon="circle-x" href="/de/error-handling">
    Erfahren Sie, wie Ihre Anwendung Ausnahmen behandelt und meldet.
  </Card>

  <Card title="Logging" icon="file-text" href="/de/logging">
    Konfiguration und Nutzung des Logsystems von Laravel.
  </Card>
</Columns>


## Related topics

- [Laravel Reverb](/de/reverb.md)
- [Laravel Telescope](/de/telescope.md)
- [Laravel Pennant](/de/pennant.md)
- [Laravel Telescope – Praxistechniken](/de/blog/telescope-introduction.md)
- [Einführung in Laravel Nightwatch](/de/blog/nightwatch-introduction.md)
