Zum Hauptinhalt springen

Was ist Laravel Pulse

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

MerkmalLaravel PulseLaravel Telescope
ZweckTrends und aggregierte Daten für die gesamte AppDetailliertes Debugging einzelner Requests/Events
DatenBereits aggregierte MetrikenLog einzelner Events
Geeignet fürPerformance-Monitoring in ProduktionDebugging in Dev/Staging
Für detailliertes Debugging einzelner Events verwenden Sie Laravel Telescope.

Datenfluss


Installation

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.
1

Paket installieren

Installieren Sie Pulse mit Composer.
composer require laravel/pulse
2

Konfigurationsdatei und Migrationen veröffentlichen

Veröffentlichen Sie die Dateien mit dem Artisan-Befehl vendor:publish.
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
3

Migrationen ausführen

Legt die Tabellen für die Pulse-Daten an.
php artisan migrate
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.
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.
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.
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 läuft, sind Anpassungen ohne JavaScript-Build möglich.
{{-- 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.
<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.
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.
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.
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.
php artisan pulse:check
Als Servername wird standardmäßig der Wert von PHPs gethostname() verwendet. Für einen abweichenden Namen setzen Sie eine Umgebungsvariable.
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.
PULSE_INGEST_DRIVER=redis
Bei Redis-Ingest müssen Sie mit pulse:work den Stream verarbeiten.
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.
// 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.
UmgebungsvariableBeschreibungStandard
PULSE_ENABLEDPulse aktivieren/deaktivierentrue
PULSE_DB_CONNECTIONDB-Verbindung von PulseVoreinstellung der App
PULSE_INGEST_DRIVERIngest-Treiber (z. B. redis)storage
PULSE_SERVER_NAMEServer-KennnameWert von gethostname()
PULSE_SLOW_REQUESTS_THRESHOLDSchwelle für langsame Requests (ms)1000
PULSE_SLOW_JOBS_THRESHOLDSchwelle für langsame Jobs (ms)1000
PULSE_SLOW_QUERIES_THRESHOLDSchwelle für langsame Queries (ms)1000

Eigene Cards

Sie können eigene Pulse-Cards erstellen, um anwendungsspezifische Daten darzustellen. Cards werden als Livewire-Komponente implementiert.
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.
<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.
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.
<x-pulse>
    ...
    <livewire:pulse.top-sellers cols="4" />
</x-pulse>

Zusammenfassung

ZielVorgehen
Pulse installierencomposer require laravel/pulse
Auf das Dashboard zugreifenRoute /pulse
Zugriff in Produktion regelnviewPulse-Gate definieren
Server-Monitoring aktivierenphp artisan pulse:check dauerhaft laufen lassen
Sampling konfigurierenSampling-Rate über sample_rate festlegen

Nächste Schritte

Error Handling

Erfahren Sie, wie Ihre Anwendung Ausnahmen behandelt und meldet.

Logging

Konfiguration und Nutzung des Logsystems von Laravel.
Zuletzt geändert am 13. Juli 2026