Laravel Pulse: Pantau Performa Aplikasi Laravel

Diperbaharui 12 November 2026 3:02 PM

Laravel Pulse adalah package resmi Laravel untuk memantau performa aplikasi langsung dari dashboard yang hidup di dalam aplikasi itu sendiri. Kalau selama ini kamu menebak-nebak kenapa halaman tertentu terasa lambat, Pulse menjawabnya dengan angka: request mana yang lewat satu detik, query mana yang paling sering jadi biang keladi, job antrean mana yang mandek, dan user mana yang paling banyak membebani server. Tidak perlu server monitoring terpisah, tidak perlu agent yang dipasang di mesin lain.

Apa Itu Laravel Pulse

Pulse bekerja dengan pola recorder: kelas kecil yang mendengarkan event framework, lalu mencatat kejadian itu ke tabel sendiri. Yang disimpan bukan log mentah, melainkan nilai yang sudah diagregasi ke dalam bucket waktu. Karena itu dashboard tetap ringan dibuka walau aplikasimu sudah mengumpulkan jutaan request.

Bedanya dengan Laravel Telescope cukup jelas. Telescope untuk membedah satu kejadian secara detail — payload request, isi query, dump variabel. Pulse untuk melihat pola: tren, peringkat, dan lonjakan. Dua-duanya bisa hidup berdampingan, tapi jangan tertukar peran.

Menurut composer.json di repo laravel/pulse (branch 1.x), package ini butuh PHP ^8.2, komponen illuminate/* versi 12 atau 13, serta Livewire ^3.6.4 atau ^4.0. Versi terbaru di Packagist: v1.10.0 (10 November 2026). Framework-nya sendiri sudah di v13.42.0 yang mensyaratkan PHP ^8.3.

Kebutuhan Penyimpanan dan Instalasi

Satu hal yang sering terlewat: penyimpanan bawaan Pulse hanya mendukung MySQL, MariaDB, atau PostgreSQL. Kalau aplikasimu memakai SQLite, Pulse tidak bisa menulis ke database utama — kamu perlu koneksi database terpisah ke salah satu dari tiga mesin tadi. Untuk aplikasi produksi, memisahkan database Pulse juga pilihan bagus supaya beban tulis monitoring tidak menempel ke database transaksi.

composer require laravel/pulse

php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"

php artisan migrate

Perintah kedua mempublikasikan berkas konfigurasi sekaligus migration tabel Pulse, lalu perintah ketiga membuat tabelnya. Setelah itu dashboard bisa dibuka di route /pulse. Ingin menyetel ulang konfigurasi tanpa menyentuh migration? Jalankan php artisan vendor:publish --tag=pulse-config.

Mengamankan Dashboard di Produksi

Secara default dashboard hanya terbuka di environment local. Begitu masuk produksi, kamu wajib mendefinisikan gate viewPulse. Isinya bebas: cek role admin, cek email tertentu, atau cek permission Spatie. Kalau gate ini tidak ada, halaman /pulse akan menolak semua orang.

use App\Models\User;
use Illuminate\Support\Facades\Gate;

public function boot(): void
{
    Gate::define('viewPulse', function (User $user) {
        return $user->isAdmin();
    });
}

Jangan diremehkan. Dashboard Pulse memuat email user, teks query, nama job, dan URL internal. Membiarkannya terbuka sama saja mempublikasikan peta infrastruktur aplikasi ke siapa pun yang menebak alamatnya.

Membaca Kartu Bawaan

Setelah terpasang, kamu langsung dapat beberapa kartu. Masing-masing menjawab pertanyaan berbeda:

  • Usage — 10 user teratas berdasarkan request, job yang di-dispatch, dan slow request.
  • Slow Requests — route yang waktu responsnya melewati ambang, lengkap dengan endpoint-nya.
  • Slow Queries — query yang lambat, dikelompokkan per SQL dan lokasi pemanggilan.
  • Slow Jobs — job antrean yang durasinya tidak wajar.
  • Slow Outgoing Requests — panggilan HTTP keluar (API pihak ketiga) yang lambat.
  • Queues — jumlah job queued, processing, processed, released, dan failed.
  • Exceptions — frekuensi dan lokasi exception yang dilaporkan.
  • Cache — rasio hit dan miss, global maupun per key.
  • Servers — pemakaian CPU, memori, dan disk tiap server yang menjalankan daemon Pulse.

Bagi saya, tiga kartu pertama yang paling cepat memberi nilai. Slow Queries biasanya langsung menunjukkan relasi yang lupa di-eager load, sementara Slow Requests memperlihatkan route yang menumpuk terlalu banyak pekerjaan dalam satu request.

Menyetel Ambang Slow Request per Route

Ambang default semuanya 1.000 ms. Angka itu masuk akal untuk halaman biasa, tapi terlalu ketat untuk endpoint yang memang berat — misalnya laporan bulanan atau ekspor data. Pulse mengizinkan ambang berbeda per pola URL memakai regex, dan aturan pertama yang cocok yang dipakai.

use Laravel\Pulse\Recorders\SlowRequests;

'recorders' => [
    SlowRequests::class => [
        'threshold' => [
            '#^/admin/laporan/#' => 5000,
            '#^/api/export/#' => 8000,
            'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
        ],
    ],
],

Pola yang sama berlaku untuk SlowQueries, SlowJobs, dan SlowOutgoingRequests. Kalau kamu hanya ingin menaikkan ambang global, cukup set environment variable seperti PULSE_SLOW_QUERIES_THRESHOLD=2000 tanpa menyentuh kode.

Daemon pulse:check dan Deployment

Sebagian besar recorder bekerja otomatis karena mendengarkan event framework. Pengecualiannya kartu Servers dan kartu pihak ketiga yang harus polling: keduanya butuh proses php artisan pulse:check yang berjalan terus di setiap server aplikasi. Jalankan lewat Supervisor atau process monitor lain supaya mati otomatis dihidupkan lagi.

Karena pulse:check adalah proses berumur panjang, ia tidak akan melihat perubahan kode tanpa restart. Setelah setiap deploy, panggil php artisan pulse:restart. Perintah itu menitipkan sinyal restart lewat cache, jadi pastikan cache driver aplikasimu benar-benar jalan sebelum mengandalkannya. Untuk kluster, set PULSE_SERVER_NAME yang unik per mesin agar kartu Servers tidak tertukar.

Sampling dan Redis Ingest untuk Traffic Ramai

Di aplikasi dengan trafik tinggi, mencatat semua event jadi mahal. Pulse menyediakan sampling per recorder: mengisi sample rate 0.1 berarti hanya sekitar 10% request yang dicatat. Dashboard tetap menampilkan angka yang sudah diskalakan dan memberi tanda ~ sebagai isyarat bahwa nilainya perkiraan. Semakin banyak volume sebuah metrik, semakin rendah sample rate yang masih aman.

Opsi kedua adalah Redis ingest. Dengan PULSE_INGEST_DRIVER=redis, entri dikirim ke Redis stream lebih dulu, lalu proses php artisan pulse:work memindahkannya ke tabel. Syaratnya Redis 6.2 atau lebih baru dan driver phpredis/predis. Penting: gunakan koneksi Redis yang berbeda dari koneksi queue, kalau tidak keduanya akan saling mengganggu saat antrean sedang padat.

Merekam Metrik Sendiri

Pulse tidak berhenti di metrik teknis. Kamu bisa mencatat angka bisnis dengan satu baris, misalnya jumlah transaksi per user, dan memilih agregasi yang ingin disimpan: avg, count, max, min, atau sum.

use Laravel\Pulse\Facades\Pulse;

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

Argumen pertama adalah tipe entri, argumen kedua key untuk pengelompokan, argumen ketiga nilai yang diagregasi. Untuk menampilkannya, buat komponen Livewire yang mewarisi Laravel\Pulse\Livewire\Card, ambil datanya lewat method aggregate() atau aggregateTotal(), lalu pasang di dashboard sebagai livewire:pulse.nama-card. Kalau perlu menyembunyikan entri tertentu dari dashboard, gunakan Pulse::filter() dengan closure yang menerima Entry atau Value.

Kapan Sebaiknya Tidak Memakai Pulse

Pulse bukan default yang harus dipasang di semua proyek. Aplikasi internal dengan satu server dan trafik rendah biasanya lebih untung memakai Telescope atau log terstruktur, karena Pulse menambah tabel dan proses yang harus dirawat. Kalau dashboard-nya tidak pernah dibuka siapa pun, recorder yang menulis ke database hanya jadi beban tanpa manfaat.

Saran praktis: pasang Pulse saat aplikasi mulai punya antrean job, endpoint lambat yang sulit dilacak, atau lebih dari satu server. Matikan recorder yang tidak relevan lewat config/pulse.php, dan pertimbangkan database terpisah lewat PULSE_DB_CONNECTION begitu trafiknya naik.

Pertanyaan yang Sering Muncul

Apakah Pulse bisa memakai SQLite?

Tidak untuk penyimpanan bawaannya. Implementasi storage resmi saat ini hanya mendukung MySQL, MariaDB, dan PostgreSQL. Kalau aplikasimu memakai SQLite, siapkan koneksi database terpisah ke salah satu dari tiga database tersebut.

Apa beda Pulse dengan Telescope?

Telescope merekam setiap event secara detail untuk debugging satu per satu. Pulse menyimpan agregat untuk melihat tren dan bottleneck. Pakai Telescope saat mengejar bug spesifik, pakai Pulse saat ingin tahu bagian mana yang paling lambat sepanjang hari.

Apakah Pulse memperlambat aplikasi?

Entri dikirim setelah respons HTTP selesai atau setelah job diproses, jadi tidak menahan waktu tunggu user. Kalau trafik sudah besar, kurangi dampaknya dengan sampling, Redis ingest, atau database khusus Pulse.

Kesimpulan

Laravel Pulse memberi observabilitas dasar tanpa menambah infrastruktur baru: satu package, tiga perintah, satu gate, lalu kamu punya angka untuk dibaca. Untuk aplikasi Laravel yang sudah jalan di produksi, memasangnya jauh lebih murah daripada berdebat soal penyebab lambat tanpa data. Kalau aplikasimu juga memakai antrean dan WebSocket, kombinasi Pulse dengan Laravel Reverb membuat worker dan koneksi real-time bisa dipantau dari satu tempat. Untuk fitur yang dirilis bertahap, pantau dampaknya setelah flag dibuka seperti pola di Laravel Pennant.

Referensi

susantokun avatar
susantokun
Hanya seorang programmer yang fokus di bidang web development. Tidak nyaman dengan keramaian dan suka akan keindahan.
Kebijakan Berkomentar :
1. Dilarang berkomentar yang mengandung SPAM, SARA, HOAX, PORNO.2. Mohon sertakan informasi detail saat terjadi error (pesan error, sreenshoot, code, logs, dsb.).