โ† Semua pembelajaran / Laravel Nol โ†’ Enterprise
Fase 7 ยท Performa & Skala

Pulse & Telescope

Menebak bagian mana yang lambat hampir selalu salah. Dua alat resmi ini menjawabnya dengan data: rute mana, query mana, job mana, dan pengguna mana.

Sumber asli laravel.com Resmi Rangkuman ~5 menit baca

Intisari

  • Pulse ringan dan dirancang untuk produksi; ia mengambil sampel, bukan mencatat semuanya.
  • Telescope mencatat segalanya secara detail โ€” sangat berguna di lokal, berat di produksi.
  • Keduanya wajib dilindungi gate; keduanya menampilkan data permintaan sungguhan.
  • Pulse menjawab "apa yang lambat sekarang"; Telescope menjawab "apa yang terjadi pada permintaan itu".
  • Simpan datanya di koneksi database terpisah supaya pemantauan tidak ikut membebani database utama.

Pulse

composer require laravel/pulse
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
php artisan migrate
KartuMenjawab
Slow RequestsRute mana yang paling lambat, dan seberapa sering
Slow QueriesQuery mana yang memakan waktu, beserta asal berkasnya
Slow JobsJob antrean mana yang menahan worker
ExceptionsError apa yang paling sering, dan sedang naik atau turun
CacheRasio hit dan kunci yang paling sering meleset
UsagePengguna mana yang menghasilkan beban terbanyak
ServersCPU dan memori tiap server
// config/pulse.php โ€” penting untuk produksi
'storage' => [
    'database' => ['connection' => env('PULSE_DB_CONNECTION', 'pulse')],
],

'ingest' => [
    'driver' => 'redis',        // tulis ke Redis dulu, lalu dipindahkan oleh worker
],

'recorders' => [
    Recorders\SlowRequests::class => ['threshold' => 1000],   // ms
    Recorders\SlowQueries::class  => ['threshold' => 100],
],
php artisan pulse:work       # proses yang memindahkan data dari Redis ke database

Dua setelan yang menentukan apakah Pulse aman di produksi. Pertama, ingest lewat Redis supaya permintaan pengguna tidak menunggu penulisan pemantauan. Kedua, koneksi database terpisah supaya tabel pemantauan yang ramai tidak bersaing dengan tabel aplikasimu. Tanpa keduanya, alat yang seharusnya mengukur masalah justru ikut menyebabkannya.

// app/Providers/AppServiceProvider.php
Gate::define('viewPulse', fn ($user) => $user->peran === Peran::Admin);

Telescope

composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate

Telescope mencatat setiap permintaan beserta seluruh isinya: query lengkap dengan binding, job yang dikirim, email yang dibuat, panggilan HTTP keluar, entri cache, dan exception. Untuk menjawab "kenapa permintaan ini berperilaku aneh", tidak ada alat yang lebih baik.

PulseTelescope
MenjawabApa yang lambat, secara agregatApa yang terjadi pada satu permintaan
BebanRingan (sampling)Berat (mencatat semuanya)
Di produksiYaHanya sementara, dengan penyaringan ketat
RetensiAgregat mingguanEntri mentah; harus dipangkas rutin
Pasang sebagaiDependensi biasa--dev

Telescope di produksi tanpa penyaringan akan membanjiri databasemu. Ia menulis beberapa baris untuk setiap permintaan โ€” pada lalu lintas menengah saja itu jutaan baris per hari. Kalau memang perlu dipasang, batasi dengan Telescope::filter() ke error dan permintaan lambat saja, dan jadwalkan telescope:prune setiap hari.

// app/Providers/TelescopeServiceProvider.php
Telescope::filter(function (IncomingEntry $entry) {
    if ($this->app->environment('local')) {
        return true;
    }

    return $entry->isReportableException()
        || $entry->isFailedJob()
        || $entry->isSlowQuery()
        || $entry->hasMonitoredTag();
});
// routes/console.php
Schedule::command('telescope:prune --hours=48')->daily();

Alur kerja saat sesuatu melambat

  1. Buka Pulse. Temukan rute dengan p95 tertinggi yang juga sering dipanggil โ€” bukan yang paling lambat tapi jarang.
  2. Lihat kartu Slow Queries; sering kali penyebabnya langsung muncul di sana beserta berkasnya.
  3. Reproduksi di lokal dengan Telescope aktif, dan baca daftar query lengkap permintaan itu.
  4. Kalau jumlah query membengkak seiring jumlah baris โ€” itu N+1. Kembali ke Fase 2.
  5. Kalau satu query yang lambat โ€” jalankan EXPLAIN. Kembali ke materi index.
  6. Kalau semuanya wajar tapi tetap lambat โ€” barulah pertimbangkan cache, dan setelah itu worker mode (Fase 8).

Urutan itu penting. Menambahkan cache di depan query N+1 menyembunyikan gejalanya sampai pola aksesnya berubah, lalu masalahnya kembali dalam bentuk yang lebih sulit dilacak. Perbaiki penyebabnya dulu; cache adalah lapisan terakhir, bukan pertama.

Latihan: pasang Pulse dengan koneksi database terpisah dan gate admin. Buat satu rute yang sengaja lambat (satu query N+1 di atas 200 baris), biarkan berjalan beberapa menit, lalu temukan rute itu di kartu Slow Requests dan query-nya di Slow Queries.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.