Laravel Pulse: เฝ้าระวังสุขภาพของ Server ในคลิกเดียว

1. 🎯 ชื่อตอน (Title): ตอนที่ 41: Laravel Pulse หมอประจำเซิร์ฟเวอร์! ตรวจสุขภาพแอปพลิเคชันแบบ Real-time
2. 📖 เปิดฉาก (The Hook):
มาครับน้องๆ ลากเก้าอี้มานั่งจิบกาแฟกัน… พี่เชื่อว่าโปรแกรมเมอร์ทุกคนต้องเคยเจอกับเหตุการณ์ “เว็บอืดมรณะ” พอเราเอาแอปพลิเคชันขึ้น Production (เซิร์ฟเวอร์จริง) ไปสักพัก ลูกค้าเริ่มบ่นว่า “น้อง! ทำไมหน้าสรุปยอดขายมันหมุนติ้วๆ นานจัง?” หรือ “เว็บหน่วงมากเลยช่วงสิ้นเดือน!”
เวลาเจอเหตุการณ์แบบนี้ ถ้าน้องไม่มีเครื่องมืออะไรเลย น้องก็เหมือนหมอที่ต้องผ่าตัดในห้องมืดครับ! เราต้องมานั่งเดาว่า… เอ๊ะ หรือว่า CPU เต็ม? หรือ RAM ไม่พอ? หรือมีใครเขียนโค้ด N+1 Query ทิ้งไว้? (Pain Point คลาสสิกสุดๆ)
ในอดีตเราอาจจะใช้ Laravel Telescope ตอนกำลัง Dev แต่มันก็เก็บข้อมูลเยอะเกินไปจนไม่เหมาะกับ Production วันนี้พี่เลยจะพาไปทำความรู้จักกับอาวุธหนักชิ้นใหม่ของ Laravel 11 ที่มีชื่อว่า “Laravel Pulse” ครับ! มันคือ Dashboard สรุปสุขภาพของระบบแบบ “รวบยอด (At-a-glance)” ที่เกิดมาเพื่อรันบน Production โดยเฉพาะ ช่วยให้น้องๆ จับตัวการที่ทำให้เว็บช้าได้อย่างแม่นยำในคลิกเดียว เตรียมสวมหูฟังแพทย์ แล้วไปตรวจเซิร์ฟเวอร์กันเลย!
3. 🧠 แก่นวิชา (Core Concepts):
Laravel Pulse เปรียบเสมือนเครื่องวัดสัญญาณชีพ (Vital Signs Monitor) ในโรงพยาบาลครับ โดยมีกลไกหลักๆ ดังนี้:
- 📊 The Dashboard (หน้าจอแสดงผล): แผงควบคุมสวยงามที่รวบรวมสถิติต่างๆ มาโชว์ในหน้าเดียว (เข้าถึงได้ผ่าน URL
/pulse) โดยมันจะแสดงการ์ด (Cards) ข้อมูลสำคัญ เช่น การใช้งาน CPU/Memory ของเซิร์ฟเวอร์, Route ที่ทำงานช้าที่สุด, และ Query ฐานข้อมูลที่อืดเป็นเต่าคลาน - 📡 Recorders (เซ็นเซอร์จับสัญญาณ): เป็นคลาสที่คอยดักจับเหตุการณ์ (Events) ในระบบอย่างเงียบๆ เช่น ดักจับการเรียกใช้ Database (Slow Queries), การทำงานของคิว (Queues), หรือความผิดพลาด (Exceptions) แล้วส่งไปเก็บสถิติ
- 🩺 The Daemon (พยาบาลเวร
pulse:check): สำหรับข้อมูลระดับฮาร์ดแวร์อย่าง CPU, Memory, และพื้นที่ฮาร์ดดิสก์ Laravel จะไม่มีทางรู้ได้เลยถ้าไม่มีคนไปถาม OS ดังนั้นเราจึงต้องมีคำสั่งพื้นหลัง (Background Process) คอยเช็คและรายงานผลตลอดเวลา

4. 💻 ร่ายมนต์โค้ด (Show me the Code):
เรามาดูวิธีการติดตั้งและเปิดใช้งาน Pulse ในโปรเจกต์ Laravel 11 ของเรากันครับ ง่ายจนน่าตกใจ!
สเต็ปที่ 1: ติดตั้งผ่าน Composer เปิด Terminal แล้วรันคำสั่งดึงแพ็กเกจเข้ามาเลยครับ:
# โหลดแพ็กเกจ Pulse
composer require laravel/pulseจากนั้นสั่งให้ Laravel คายไฟล์ตั้งค่า (Configuration) และไฟล์สร้างตารางฐานข้อมูลออกมา:
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"สุดท้าย รันคำสั่งสร้างตารางเพื่อเตรียมที่เก็บสถิติให้ Pulse:
php artisan migrateสเต็ปที่ 2: สั่งให้พยาบาลเวรเริ่มทำงาน (Start the Daemon) เพื่อให้ Pulse โชว์กราฟ CPU และ Memory ของเครื่องเซิร์ฟเวอร์เราได้ น้องๆ ต้องเปิด Terminal ทิ้งไว้อีกหน้าต่าง แล้วรันคำสั่งนี้ครับ:
php artisan pulse:checkสเต็ปที่ 3: เปิดหน้า Dashboard ตรวจอาการ!
ตอนนี้น้องๆ สามารถเปิดเบราว์เซอร์ไปที่ http://localhost:8000/pulse ได้เลยครับ! ระบบจะโชว์ Dashboard สุดล้ำขึ้นมา ถ้าน้องๆ ลองกดเข้าหน้าเว็บต่างๆ หรือรัน Query ช้าๆ สักพักข้อมูลก็จะเด้งมาโชว์ในนี้แบบ Real-time เลย
🔒 สเต็ปที่ 4: ล็อคประตูห้องฉุกเฉิน (Authorization บน Production)
โดยค่าเริ่มต้น (Default) หน้า /pulse จะเข้าได้เฉพาะตอนเราทำโปรเจกต์ที่เครื่องตัวเอง (Local Environment) เท่านั้นครับ พอเอาขึ้น Server จริง ระบบจะบล็อกไม่ให้ใครเข้าเลยเพื่อความปลอดภัย
ถ้าน้องอยากให้แอดมินเข้าไปดูได้ ต้องไปแก้ “Gate” ที่ไฟล์ app/Providers/AppServiceProvider.php ครับ:
<?php
namespace App\Providers;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
// อนุญาตให้ User ที่เป็น Admin เท่านั้นที่มีสิทธิ์ดูหน้า Pulse
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
}
}5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips):
การเอาเครื่องมือ Monitor ไปติดในระบบจริง ถ้าทำไม่ดี มันจะเป็นตัวถ่วงทำให้เว็บช้าเสียเอง! นี่คือทริคระดับ Senior ครับ:
- 🚀 ย้ายไปใช้ Redis (Redis Ingest):
โดยปกติ Pulse จะเอาสถิติไปบันทึกลงตารางฐานข้อมูลหลัก (MySQL/PostgreSQL) คราวนี้ถ้าเว็บเราคนเข้าเยอะมาก ฐานข้อมูลเราจะทำงานหนักขึ้น 2 เท่า! พี่แนะนำให้เปลี่ยนไปใช้ Redis เป็นตัวพักข้อมูลแทนครับ โดยแก้ในไฟล์
.envให้เป็นPULSE_INGEST_DRIVER=redisจากนั้นต้องไปรันคำสั่งphp artisan pulse:workทิ้งไว้อีกตัว เพื่อให้มันค่อยๆ ทยอยดึงข้อมูลจาก Redis ไปลง Database อย่างนุ่มนวลครับ - 🛠️ ใช้ Supervisor ควบคุม Daemon:
บนเซิร์ฟเวอร์ Production (เช่น Ubuntu) คำสั่งอย่าง
pulse:checkและpulse:workถ้าน้องปิด Terminal มันก็จะดับตามไปด้วย! กฎเหล็กคือต้องใช้โปรแกรม Supervisor ในการสั่งรันให้เป็น Background Process และปลุกมันขึ้นมาใหม่เสมอถ้ามันตายครับ - ⚙️ ปรับจูนความไวต่อความเจ็บปวด (Thresholds):
ในค่าเริ่มต้น Pulse จะมองว่า Route หรือ Query ที่ใช้เวลาเกิน “1,000 มิลลิวินาที (1 วินาที)” คือทำงานช้า (Slow) ถ้าระบบน้องสเปคเทพ และอยากเข้มงวดกว่านั้น น้องสามารถเข้าไปแก้ไฟล์
config/pulse.phpแล้วเปลี่ยนค่าthresholdให้เหลือสัก 500ms ได้เลยครับ อาการหน่วงนิดเดียว Pulse ก็จะจับมาฟ้องทันที
6. 🏁 บทสรุป (To be continued…):
Laravel Pulse คือจิ๊กซอว์ชิ้นสุดท้ายที่เติมเต็มวงจรชีวิตการเป็นนักพัฒนาซอฟต์แวร์ครับ (Developer Lifecycle) เมื่อเราเขียนโค้ดได้ (Development) เราทดสอบมันได้ (Testing) และตอนนี้เราก็สามารถ “เฝ้าระวัง (Monitoring)” มันบนสมรภูมิจริงได้อย่างสง่างาม
การมีข้อมูลสถิติที่จับต้องได้ จะทำให้น้องๆ เปลี่ยนจากการแก้ปัญหาด้วย “ความรู้สึก” มาเป็นการแก้ปัญหาด้วย “ข้อมูล (Data-driven)” ครับ ใครที่ยังไม่ได้ติด Pulse ในโปรเจกต์ อย่าลืมนำไปใช้นะครับ รับรองว่าหล่อขึ้นอีก 10 ระดับ!
ในตอนต่อไป ซึ่งน่าจะเป็นบทสรุปของซีรีส์นี้แล้ว พี่จะพาน้องๆ มัดรวมเคล็ดลับการเอาแอปพลิเคชันขึ้นสู่ “Production Deployment” แบบไร้รอยต่อ (Zero-downtime) ให้สมกับการเป็นสถาปนิกซอฟต์แวร์ เตรียมตัวให้พร้อม แล้วพบกันครับ!
ต้องการที่ปรึกษาและพัฒนาระบบ Automation ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p