Laravel Telescope adalah alat debugging dan monitoring yang dikembangkan oleh tim Laravel untuk memberikan wawasan mendalam tentang aplikasi selama proses pengembangan. Banyak developer Laravel mungkin sudah tahu bahwa Telescope dapat digunakan untuk memantau query database, request, dan exception. Namun, ada beberapa fitur tersembunyi yang jarang diketahui tetapi sangat berguna dalam meningkatkan produktivitas dan keamanan aplikasi.

Dalam artikel ini, kita akan menggali lebih dalam beberapa fitur Laravel Telescope yang mungkin belum banyak diketahui.

1. Filter Data yang Ditampilkan di Telescope

Secara default, Telescope akan mencatat hampir semua aktivitas yang terjadi di dalam aplikasi. Namun, dalam proyek besar, ini bisa menyebabkan terlalu banyak data yang tersimpan, yang dapat memperlambat performa.

Solusi: Gunakan Telescope::filter()

Kita dapat menyaring data yang masuk ke Telescope dengan metode Telescope::filter(). Misalnya, kita hanya ingin mencatat log error atau query yang lambat:

use Laravel\Telescope\Telescope;

Telescope::filter(function ($entry) {
    return $entry->isReportableException() || 
           ($entry->type === 'query' && $entry->content['time'] > 100);
});

Kode di atas memastikan hanya query yang memakan waktu lebih dari 100ms dan exception yang dilaporkan akan dicatat oleh Telescope.

2. Mengamankan Telescope di Produksi dengan Middleware

Salah satu kesalahan umum adalah tidak mengamankan Laravel Telescope di lingkungan produksi. Secara default, Telescope hanya aktif di local environment, tetapi terkadang developer secara tidak sengaja mengaktifkannya di production.

Solusi: Gunakan Middleware untuk Keamanan

Tambahkan middleware khusus agar hanya pengguna tertentu yang bisa mengakses Telescope:

use Closure;

class ProtectTelescope
{
    public function handle($request, Closure $next)
    {
        if (!in_array($request->ip(), ['123.456.789.000', '987.654.321.000'])) {
            abort(403);
        }

        return $next($request);
    }
}

Kemudian, daftarkan middleware ini pada app/Http/Kernel.php:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\ProtectTelescope::class,
    ],
];

Dengan cara ini, hanya IP tertentu yang bisa mengakses Telescope, sehingga data sensitif tidak terekspos ke publik.

3. Menyesuaikan Retensi Data Telescope

Secara default, Telescope menyimpan data selama 24 jam. Namun, dalam beberapa kasus, kita mungkin ingin menyimpan log lebih lama atau justru menghapusnya lebih cepat untuk menghemat penyimpanan database.

Solusi: Ubah Konfigurasi Retensi Data

Buka file konfigurasi Telescope di config/telescope.php dan ubah nilai retensi:

'storage' => [
    'database' => [
        'connection' => env('DB_CONNECTION', 'mysql'),
        'chunk' => 500,
        'entries' => [
            'default' => 48, // menyimpan data selama 48 jam
            'exception' => 168, // menyimpan log exception selama 7 hari
        ],
    ],
],

Dengan mengatur retensi berdasarkan jenis entry, kita bisa mengoptimalkan penggunaan database tanpa kehilangan data penting.

4. Memantau Event Tertentu dengan Watchers

Laravel Telescope memiliki fitur "watchers" yang memungkinkan kita memantau berbagai aktivitas dalam aplikasi, seperti query database, request HTTP, job queue, dan banyak lagi. Namun, tidak semua orang tahu bahwa kita bisa mengaktifkan watchers tertentu secara selektif.

Solusi: Kustomisasi Watchers

Kita bisa mengaktifkan atau menonaktifkan watchers melalui konfigurasi di config/telescope.php. Misalnya, kita hanya ingin memantau log query dan job queue:

'watchers' => [
    QueryWatcher::class => true,
    JobWatcher::class => true,
    RequestWatcher::class => false, // Disable request watcher
    ExceptionWatcher::class => false,
],

Dengan cara ini, kita hanya mengumpulkan data yang benar-benar diperlukan tanpa membebani sistem dengan informasi yang tidak relevan.

5. Menyimpan Data Telescope di Storage Selain Database

Sebagian besar developer Laravel menggunakan database untuk menyimpan log Telescope, tetapi ada opsi lain yang jarang diketahui, yaitu menyimpan data di Redis atau bahkan sistem file.

Solusi: Ubah Driver Penyimpanan

Di file .env, ubah driver penyimpanan Telescope:

TELESCOPE_DRIVER=redis

Atau, jika ingin menyimpannya di file lokal:

TELESCOPE_DRIVER=file

Hal ini bisa sangat berguna untuk menghindari beban berat pada database, terutama jika proyek memiliki banyak aktivitas log.

6. Menggunakan Laravel Telescope Secara Programatis

Banyak developer hanya menggunakan Telescope melalui UI web. Namun, sebenarnya kita bisa mengakses log Telescope secara programatis dalam kode PHP.

Solusi: Query Data Langsung dari Database

Misalnya, kita ingin mendapatkan 10 query terakhir yang dieksekusi di aplikasi:

use Laravel\Telescope\Storage\EntryModel;

$queries = EntryModel::where('type', 'query')
    ->orderBy('created_at', 'desc')
    ->limit(10)
    ->get();

dd($queries);

Ini bisa berguna jika kita ingin mengintegrasikan Telescope dengan dashboard internal atau alat monitoring lainnya.