Laravel Pulse: Giám sát Sức khỏe Ứng dụng Real-Time
Giám sát (Monitoring) là rất quan trọng để duy trì một ứng dụng khỏe mạnh. Laravel Pulse cung cấp một dashboard tức thì, trực quan về sức khỏe và hiệu suất của ứng dụng mà không cần các công cụ APM phức tạp bên ngoài.
Cài đặt
composer require laravel/pulse
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
php artisan migrate
Pulse lưu trữ các metrics của nó trong database của bạn.
Dashboard
Truy cập dashboard tại /pulse. Bạn cần authorize quyền truy cập trong App\Providers\PulseServiceProvider:
protected function gate(): void
{
Gate::define('viewPulse', function (User $user) {
return in_array($user->email, ['admin@example.com']);
});
}
Các Chỉ số Chính được Giám sát
Pulse theo dõi một số metrics chính ngay lập tức:
- Server Stats: CPU, Memory, Disk usage.
- Application Usage: Top users thực hiện requests.
- Exceptions: Các lỗi thường gặp nhất xảy ra trong app.
- Slow Routes: Các endpoints tốn nhiều thời gian nhất để phản hồi.
- Slow Queries: Các câu lệnh SQL cần tối ưu hóa.
- Jobs: Queue throughput và tỷ lệ thất bại.
- Cache: Tỷ lệ hit và miss.
Cấu hình Recorders
Bạn có thể tùy chỉnh những gì cần ghi lại trong config/pulse.php.
Ví dụ, để hạ thấp ngưỡng (threshold) cho "Slow Queries":
'recorders' => [
\Laravel\Pulse\Recorders\SlowQueries::class => [
'threshold' => 500, // 500ms
'sample_rate' => 1, // Ghi lại 100% các slow queries
],
],
Tùy chỉnh Dashboard
Bạn có thể sửa đổi layout dashboard bằng cách publish view:
php artisan vendor:publish --tag=pulse-dashboard
Lệnh này tạo resources/views/vendor/pulse/dashboard.blade.php. Bạn có thể sắp xếp lại các cards bằng các Blade components tiêu chuẩn:
<x-pulse>
<livewire:pulse.servers cols="full" />
<livewire:pulse.usage cols="4" rows="2" />
<livewire:pulse.slow-queries cols="8" />
</x-pulse>
Custom Cards (Livewire)
Bạn có thể xây dựng metrics của riêng mình. Ví dụ, một card "Doanh thu Kinh doanh".
- Tạo một Recorder.
- Tạo một Livewire component cho card.
1. Ghi lại Custom Data
Sử dụng Pulse facade để ghi lại các mục tùy ý.
// Trong payment controller
Pulse::record('revenue', 'stripe', $amount, now());
2. Tạo Component
php artisan make:livewire RevenueCard
Trong class component, lấy dữ liệu bằng các Pulse queries.
Pulse vs Telescope vs Horizon
- Telescope: Tốt nhất cho debugging các request riêng lẻ (kiểm tra headers, luồng query chính xác). Tuyệt vời cho local dev.
- Horizon: Tốt nhất cho quản lý queue cụ thể (chỉ Redis).
- Pulse: Tốt nhất cho sức khỏe hiệu suất tổng hợp (tổng hợp xu hướng theo thời gian). Tuyệt vời cho cái nhìn tổng quan ở production.
Thường xuyên sử dụng cả ba: Telescope cục bộ, Horizon cho workers, và Pulse cho kiểm tra sức khỏe production.
Chạy Worker
Pulse cần tổng hợp dữ liệu định kỳ.
php artisan pulse:check
Trong production, chạy lệnh pulse:work qua Supervisor hoặc daemon để xử lý các metrics đến mà không làm chậm requests của người dùng.
php artisan pulse:work
Tóm tắt
Laravel Pulse lấp đầy khoảng trống giữa local debugging và các giải pháp APM doanh nghiệp như Datadog hoặc New Relic. Nó:
- Miễn phí và mã nguồn mở.
- Self-hosted (dữ liệu ở lại với bạn).
- Nhẹ so với các agents bên ngoài.
- Thiết kế đẹp ngay khi cài đặt.
Bắt đầu giám sát slow queries của bạn ngay hôm nay trước khi người dùng báo cáo chúng!