Saltar al contenido principal

¿Qué es Laravel Pulse?

Laravel Pulse es un dashboard de monitorización que muestra de un vistazo el rendimiento y el uso de la aplicación. Permite localizar cuellos de botella (jobs y endpoints lentos) o consultar quiénes son los usuarios más activos.

Diferencia entre Telescope y Pulse

CaracterísticaLaravel PulseLaravel Telescope
ObjetivoMonitorizar tendencias y datos agregados de la appDepurar solicitudes/eventos individuales en detalle
DatosMétricas agregadasLogs de eventos individuales
Uso adecuadoMonitorización de rendimiento en producciónDepuración en desarrollo/staging
Para depuración detallada de eventos individuales, usa Laravel Telescope.

Diagrama del flujo de datos


Instalación

La implementación de almacenamiento oficial de Pulse requiere MySQL, MariaDB o PostgreSQL. Si usas otro motor, prepara una BD MySQL, MariaDB o PostgreSQL dedicada para los datos de Pulse.
1

Instalación del paquete

Instala Pulse con Composer.
composer require laravel/pulse
2

Publicar configuración y migraciones

Publica los archivos con Artisan.
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
3

Ejecutar migraciones

Crea las tablas para los datos de Pulse.
php artisan migrate
Tras la migración, accede al dashboard en la ruta /pulse.

Publicar el archivo de configuración

También puedes publicar solo el archivo de configuración para personalizarlo.
php artisan vendor:publish --tag=pulse-config

Acceso al dashboard

Configuración de autenticación

Por defecto, solo se accede al dashboard en el entorno local. En producción, personaliza la puerta de autorización viewPulse para controlar el acceso.
use App\Models\User;
use Illuminate\Support\Facades\Gate;

/**
 * Arranca los servicios de la aplicación.
 */
public function boot(): void
{
    Gate::define('viewPulse', function (User $user) {
        return $user->isAdmin();
    });
}
Añade el código anterior al método boot de app/Providers/AppServiceProvider.php.

Personalización del dashboard

Publica la vista del dashboard para personalizar cards y layout.
php artisan vendor:publish --tag=pulse-dashboard
Después edita resources/views/vendor/pulse/dashboard.blade.php. Como el dashboard funciona con Livewire, puedes personalizarlo sin compilar JavaScript.
{{-- Ancho completo --}}
<x-pulse full-width>
    ...
</x-pulse>

{{-- Cambiar número de columnas --}}
<x-pulse cols="16">
    ...
</x-pulse>
Cada card admite cols y rows para ajustar tamaño y posición.
<livewire:pulse.usage cols="4" rows="2" />
<livewire:pulse.slow-queries expand />

Recorders

Los recorders capturan eventos de la aplicación y los registran en la BD de Pulse. La configuración vive en la sección recorders de config/pulse.php.

Requests / Slow Requests

Requests captura información de las solicitudes. Puedes configurar el umbral de rutas lentas (1000 ms por defecto), la tasa de muestreo y las rutas a ignorar.
Recorders\SlowRequests::class => [
    // ...
    'threshold' => [
        '#^/admin/#' => 5000,
        'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
    ],
],

Slow Jobs

SlowJobs captura jobs que superan el umbral (1000 ms por defecto). Puedes configurar umbrales distintos por job.
Recorders\SlowJobs::class => [
    // ...
    'threshold' => [
        '#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
        'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
    ],
],

Exceptions

Exceptions captura las excepciones reportables. Se agrupan por clase y ubicación.

Cache

CacheInteractions captura hits y misses de caché. Puedes agrupar claves parecidas con una regex.
Recorders\CacheInteractions::class => [
    // ...
    'groups' => [
        '/:\d+/' => ':*',
    ],
],

Queues

Queues captura el throughput de los jobs en cola (encolados, procesando, completados, liberados y fallidos).

Servers

Servers captura el uso de CPU, memoria y almacenamiento de los servidores que ejecutan la app. Para usarlo, mantén activo pulse:check en cada servidor monitorizado.
php artisan pulse:check
Por defecto se usa el nombre devuelto por gethostname(). Personalízalo con una variable de entorno.
PULSE_SERVER_NAME=load-balancer

Users

UserRequests y UserJobs capturan el usuario que originó solicitudes o jobs y lo muestran en la card “Application Usage”.

Ingesta con Redis

En entornos de alto tráfico, puedes enviar las entradas a un stream de Redis y luego ingestarlas a la BD.
PULSE_INGEST_DRIVER=redis
Con la ingesta por Redis, ejecuta pulse:work para procesar el stream.
php artisan pulse:work

Muestreo

En entornos de alto tráfico, capturar todos los eventos puede generar millones de filas. Con el muestreo registras solo una parte y el dashboard muestra un valor aproximado.
// config/pulse.php
Recorders\UserRequests::class => [
    'sample_rate' => 0.1, // Registrar solo el 10% de las solicitudes
],
En el dashboard los valores aproximados se muestran precedidos de ~. Cuanto más grande sea el volumen de entradas, más se puede bajar la tasa manteniendo precisión.

Variables de entorno

Los principales ajustes se controlan por variables de entorno.
VariableDescripciónPor defecto
PULSE_ENABLEDActiva/desactiva Pulsetrue
PULSE_DB_CONNECTIONConexión de BD que usa PulseLa por defecto de la app
PULSE_INGEST_DRIVERDriver de ingesta (por ejemplo, redis)storage
PULSE_SERVER_NAMENombre identificador del servidorValor de gethostname()
PULSE_SLOW_REQUESTS_THRESHOLDUmbral de solicitud lenta (ms)1000
PULSE_SLOW_JOBS_THRESHOLDUmbral de job lento (ms)1000
PULSE_SLOW_QUERIES_THRESHOLDUmbral de consulta lenta (ms)1000

Cards personalizadas

Puedes crear tus propias cards de Pulse para mostrar datos específicos. Se implementan como componentes de 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');
    }
}
En la vista usa los componentes Blade que ofrece Pulse para conservar un aspecto uniforme.
<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>
Captura datos personalizados con Pulse::record.
use Laravel\Pulse\Facades\Pulse;

Pulse::record('user_sale', $user->id, $sale->amount)
    ->sum()
    ->count();
Incluye el componente en la vista del dashboard.
<x-pulse>
    ...
    <livewire:pulse.top-sellers cols="4" />
</x-pulse>

Resumen

ObjetivoMétodo
Instalar Pulsecomposer require laravel/pulse
Acceder al dashboardRuta /pulse
Control de acceso en producciónDefinir la puerta viewPulse
Activar monitorización de servidoresMantener activo php artisan pulse:check
Configurar muestreoAjustar sample_rate

Próximos pasos

Manejo de errores

Aprende el manejo y reporte de excepciones de la aplicación.

Logging

Configuración y uso del sistema de logs de Laravel.
Última modificación el 13 de julio de 2026