คำตอบสั้น ๆ: ออกแบบและตั้งระบบ Uptime Monitoring ด้วย Uptime Kuma หรือสคริปต์ curl ให้แจ้งเตือนทันทีเมื่อเว็บล่ม โดยไม่แจ้งเตือนผิดพลาดบ่อย
คู่มือนี้อธิบาย Uptime Monitoring ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
ถ้าเว็บไซต์ล่มตอนกลางคืนแล้วเพิ่งรู้ตอนลูกค้าโทรมาถามในตอนเช้า ความเสียหายเกิดไปหลายชั่วโมงแล้ว ระบบ Uptime Monitoring ช่วยตรวจเว็บจากภายนอกเป็นระยะ เช่นทุก 1-5 นาที และแจ้งเตือนทันทีที่เว็บตอบไม่ปกติ ทำให้เริ่มแก้ไขได้ก่อนที่ผู้ใช้ส่วนใหญ่จะเจอปัญหา
บทความนี้อธิบายหลักการออกแบบการเฝ้าระวังที่แจ้งเตือนเมื่อจำเป็นจริง วิธีติดตั้ง Uptime Kuma ซึ่งเป็นซอฟต์แวร์โอเพนซอร์สแบบติดตั้งเอง และสคริปต์ตรวจแบบง่ายสำหรับผู้ที่ต้องการเริ่มต้นเร็ว
สิ่งที่ต้องเตรียม (Uptime Monitoring)
- รายการ URL และบริการที่ต้องเฝ้าดู เช่น หน้าแรก, หน้าชำระเงิน, API, เซิร์ฟเวอร์อีเมล
- เครื่องที่ใช้ตรวจต้องอยู่คนละที่กับเว็บที่ถูกตรวจ ถ้าติดตั้งตัวตรวจไว้ในเซิร์ฟเวอร์เดียวกัน เมื่อเซิร์ฟเวอร์ล่ม ตัวตรวจก็ล่มไปด้วยและไม่มีใครแจ้งเตือน
- ช่องทางรับแจ้งเตือนอย่างน้อยสองช่องทาง เช่น อีเมลและ Telegram หรือ Slack
- ถ้าติดตั้ง Uptime Kuma เอง: Linux Server อีกเครื่องที่ติดตั้ง Docker แล้ว (ดู ติดตั้ง Docker และ Docker Compose บน Ubuntu)
ขั้นตอนที่ 1: เลือกสิ่งที่จะตรวจ (Uptime Monitoring)
| ชนิดการตรวจ | ตรวจอะไร | ใช้เมื่อ |
|---|---|---|
| HTTP(S) | ได้รหัส 2xx ภายในเวลาที่กำหนด | เว็บทุกเว็บ เป็นพื้นฐาน |
| HTTP(S) + Keyword | หน้าเว็บมีคำที่กำหนดอยู่จริง | เว็บที่อาจตอบ 200 แต่แสดงหน้า Error เช่น "Error establishing a database connection" |
| TCP Port | พอร์ตเปิดรับการเชื่อมต่อ | SMTP 587, IMAP 993, ฐานข้อมูลภายใน |
| Ping (ICMP) | เครื่องตอบสนองในระดับเครือข่าย | ใช้ประกอบ ไม่ควรใช้เพียงอย่างเดียว เพราะเครื่องตอบ Ping ได้ขณะที่เว็บล่ม |
| DNS | Record ยังชี้ไปที่ IP ที่ถูกต้อง | ป้องกันกรณีโดเมนหมดอายุหรือ DNS ถูกแก้ |
| วันหมดอายุ SSL | ใบรับรองเหลือกี่วัน | ทุกเว็บที่ใช้ HTTPS |
การตรวจแบบ Keyword มีประโยชน์มากกับ WordPress เพราะหน้า Error บางแบบตอบรหัส 200 เลือกคำที่อยู่ท้ายหน้า เช่นข้อความลิขสิทธิ์ใน Footer เพื่อยืนยันว่าหน้าโหลดครบ
ถ้าต้องการตรวจลึกกว่าหน้าแรก ให้ทำ URL เฉพาะสำหรับตรวจสุขภาพ (Health Check) เช่น /healthz ที่ทดสอบการเชื่อมต่อฐานข้อมูลด้วย และตอบ 200 เมื่อทุกอย่างปกติ ตอบ 503 เมื่อมีปัญหา
ขั้นตอนที่ 2: ตั้งค่าที่ลดการแจ้งเตือนผิดพลาด (Uptime Monitoring)
- ช่วงเวลาตรวจ: 60 วินาทีสำหรับเว็บสำคัญ 5 นาทีสำหรับเว็บทั่วไป
- Timeout: ประมาณ 10-30 วินาที ถ้าตั้งสั้นเกินไปจะแจ้งเตือนทุกครั้งที่เว็บช้าชั่วขณะ
- Retries: ให้ยืนยันซ้ำ 2-3 ครั้งก่อนแจ้งว่าล่ม ลดการแจ้งเตือนจากเครือข่ายสะดุดครั้งเดียว
- แจ้งเมื่อกลับมาปกติ: เปิดไว้เสมอ จะได้รู้ว่าเหตุการณ์จบแล้วและล่มไปนานเท่าไร
- Maintenance Window: ตั้งช่วงปิดปรับปรุงล่วงหน้า เพื่อไม่ให้แจ้งเตือนขณะอัปเดตระบบตามแผน
ขั้นตอนที่ 3: ติดตั้ง Uptime Kuma ด้วย Docker (Uptime Monitoring)
รันบนเครื่องที่ใช้ตรวจ (ไม่ใช่เครื่องเว็บ)
docker run -d --restart=unless-stopped \
-p 127.0.0.1:3001:3001 \
-v uptime-kuma:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:1
ตรวจว่าทำงาน
docker ps --filter name=uptime-kuma
curl -sI http://127.0.0.1:3001/ | head -n 1
ควรเห็นคอนเทนเนอร์สถานะ Up และได้รหัส 200 หรือ 302 Tag ของ Image อาจเปลี่ยนตามเวอร์ชันหลัก ให้ตรวจ Tag ที่แนะนำล่าสุดใน เอกสารทางการของ Uptime Kuma ก่อนติดตั้ง
เหตุที่ผูกพอร์ตไว้กับ 127.0.0.1: พอร์ตที่ Docker เปิดด้วย -p 3001:3001 จะข้ามกฎของ UFW และเปิดสู่อินเทอร์เน็ตทันที แม้ UFW จะไม่ได้อนุญาตพอร์ตนั้นก็ตาม การผูกไว้กับ localhost แล้วเข้าผ่าน Reverse Proxy ที่มี HTTPS ปลอดภัยกว่า
ตั้ง Nginx เป็น Reverse Proxy โดยต้องส่งต่อ WebSocket ด้วย เพราะหน้าจอของ Uptime Kuma อัปเดตแบบ Real-time
server {
listen 443 ssl;
server_name status.example.com;
# ssl_certificate ... (ดูบทความ Certbot)
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo nginx -t && sudo systemctl reload nginx
ดูวิธีขอใบรับรองได้ที่ ติดตั้ง SSL ฟรีจาก Let's Encrypt ด้วย Certbot บน Nginx และหลักการ Reverse Proxy ที่ รันแอป Node.js ด้วย PM2 และ Nginx Reverse Proxy
ขั้นตอนที่ 4: เพิ่ม Monitor และช่องทางแจ้งเตือน
- เปิด
https://status.example.comครั้งแรกระบบจะให้สร้างบัญชีผู้ดูแล ใช้รหัสผ่านที่แข็งแรง และเปิด 2FA ในหน้า Settings > Security - ไปที่ Settings > Notifications กด Setup Notification เลือกชนิด เช่น Email (SMTP), Telegram, Slack, Discord หรือ Microsoft Teams กรอกข้อมูลแล้วกด Test ต้องได้รับข้อความทดสอบจริงก่อนบันทึก
- กด Add New Monitor เลือก Monitor Type เป็น HTTP(s) หรือ HTTP(s) - Keyword ใส่ URL, Heartbeat Interval, Retries แล้วเลือกช่องทางแจ้งเตือนที่สร้างไว้
- สำหรับเว็บ HTTPS เปิดตัวเลือก Certificate Expiry Notification เพื่อให้เตือนก่อนใบรับรองหมดอายุ
ชื่อเมนูอาจต่างกันเล็กน้อยตามเวอร์ชันของ Uptime Kuma หมายเหตุสำหรับผู้ที่เคยใช้ LINE Notify: บริการนี้ปิดตัวไปตั้งแต่วันที่ 31 มีนาคม 2025 แล้ว ต้องเปลี่ยนไปใช้ช่องทางอื่น