ตั้งระบบแจ้งเตือนเมื่อเว็บไซต์ล่ม (Uptime Monitoring)
ถ้าเว็บไซต์ล่มตอนกลางคืนแล้วเพิ่งรู้ตอนลูกค้าโทรมาถามในตอนเช้า ความเสียหายเกิดไปหลายชั่วโมงแล้ว ระบบ Uptime Monitoring ช่วยตรวจเว็บจากภายนอกเป็นระยะ เช่นทุก 1-5 นาที และแจ้งเตือนทันทีที่เว็บตอบไม่ปกติ ทำให้เริ่มแก้ไขได้ก่อนที่ผู้ใช้ส่วนใหญ่จะเจอปัญหา
บทความนี้อธิบายหลักการออกแบบการเฝ้าระวังที่แจ้งเตือนเมื่อจำเป็นจริง วิธีติดตั้ง Uptime Kuma ซึ่งเป็นซอฟต์แวร์โอเพนซอร์สแบบติดตั้งเอง และสคริปต์ตรวจแบบง่ายสำหรับผู้ที่ต้องการเริ่มต้นเร็ว
สิ่งที่ต้องเตรียม
- รายการ URL และบริการที่ต้องเฝ้าดู เช่น หน้าแรก, หน้าชำระเงิน, API, เซิร์ฟเวอร์อีเมล
- เครื่องที่ใช้ตรวจต้องอยู่คนละที่กับเว็บที่ถูกตรวจ ถ้าติดตั้งตัวตรวจไว้ในเซิร์ฟเวอร์เดียวกัน เมื่อเซิร์ฟเวอร์ล่ม ตัวตรวจก็ล่มไปด้วยและไม่มีใครแจ้งเตือน
- ช่องทางรับแจ้งเตือนอย่างน้อยสองช่องทาง เช่น อีเมลและ Telegram หรือ Slack
- ถ้าติดตั้ง Uptime Kuma เอง: Linux Server อีกเครื่องที่ติดตั้ง Docker แล้ว (ดู ติดตั้ง Docker และ Docker Compose บน Ubuntu)
ขั้นตอนที่ 1: เลือกสิ่งที่จะตรวจ
| ชนิดการตรวจ | ตรวจอะไร | ใช้เมื่อ |
|---|---|---|
| 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: ตั้งค่าที่ลดการแจ้งเตือนผิดพลาด
- ช่วงเวลาตรวจ: 60 วินาทีสำหรับเว็บสำคัญ 5 นาทีสำหรับเว็บทั่วไป
- Timeout: ประมาณ 10-30 วินาที ถ้าตั้งสั้นเกินไปจะแจ้งเตือนทุกครั้งที่เว็บช้าชั่วขณะ
- Retries: ให้ยืนยันซ้ำ 2-3 ครั้งก่อนแจ้งว่าล่ม ลดการแจ้งเตือนจากเครือข่ายสะดุดครั้งเดียว
- แจ้งเมื่อกลับมาปกติ: เปิดไว้เสมอ จะได้รู้ว่าเหตุการณ์จบแล้วและล่มไปนานเท่าไร
- Maintenance Window: ตั้งช่วงปิดปรับปรุงล่วงหน้า เพื่อไม่ให้แจ้งเตือนขณะอัปเดตระบบตามแผน
ขั้นตอนที่ 3: ติดตั้ง Uptime Kuma ด้วย Docker
รันบนเครื่องที่ใช้ตรวจ (ไม่ใช่เครื่องเว็บ)
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 แล้ว ต้องเปลี่ยนไปใช้ช่องทางอื่น
ทางเลือก: สคริปต์ตรวจแบบง่ายด้วย curl
ถ้ายังไม่พร้อมติดตั้งระบบเต็ม ใช้สคริปต์นี้บนเครื่องอื่นที่มีอยู่แล้วได้ ตัวอย่างส่งแจ้งเตือนผ่าน Telegram Bot
#!/bin/bash
URL="https://example.com/"
KEYWORD="Example Co., Ltd."
BOT_TOKEN="ใส่ Token ของ Bot"
CHAT_ID="ใส่ Chat ID"
body=$(curl -s -L --max-time 20 -w '\n%{http_code}' "$URL")
code=$(echo "$body" | tail -n 1)
if [ "$code" != "200" ] || ! echo "$body" | grep -q "$KEYWORD"; then
curl -s "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="เว็บมีปัญหา: $URL ได้รหัส $code เวลา $(date '+%F %T')" >/dev/null
fi
บันทึกเป็น /usr/local/bin/check-site.sh สั่ง chmod 700 (เพราะมี Token อยู่ในไฟล์) แล้วตั้ง Cronjob ให้ทำงานทุก 5 นาที
*/5 * * * * /usr/local/bin/check-site.sh
สคริปต์นี้ไม่มีระบบยืนยันซ้ำและจะแจ้งทุก 5 นาทีตลอดเวลาที่ล่ม จึงเหมาะเป็นทางเลือกชั่วคราว บริการเฝ้าระวังแบบสำเร็จรูปที่ตรวจจากหลายประเทศก็เป็นทางเลือกที่ดี ถ้าไม่ต้องการดูแลเครื่องตรวจเอง
ตรวจสอบผลลัพธ์
อย่าเชื่อว่าระบบแจ้งเตือนทำงานจนกว่าจะเห็นการแจ้งเตือนจริง วิธีทดสอบที่ปลอดภัยคือสร้าง Monitor ทดสอบที่ชี้ไป URL ที่ไม่มีอยู่จริง เช่น https://example.com/uptime-test-404 หรือตั้ง Keyword เป็นคำที่ไม่มีในหน้า แล้วรอดูว่าได้รับแจ้งเตือนภายในเวลาที่ควรเป็น (Interval คูณจำนวน Retries) จากนั้นแก้กลับและดูว่าได้รับข้อความว่ากลับมาปกติ แล้วจึงลบ Monitor ทดสอบ
ปัญหาที่พบบ่อย
แจ้งว่าล่มบ่อย แต่เข้าเว็บเองได้ปกติ
อาจเป็นเพราะ Timeout สั้นเกินไป หรือ Firewall และระบบป้องกันบอทของเว็บบล็อก IP ของเครื่องตรวจ ให้เพิ่ม Retries และอนุญาต IP ของเครื่องตรวจใน Firewall หรือปลั๊กอินความปลอดภัย ถ้าเว็บใช้ Fail2ban ตรวจว่า IP นั้นไม่ถูกแบน (ดู ปลดบล็อก IP ที่ถูก Fail2Ban แบนบน Plesk)
ไม่ได้รับอีเมลแจ้งเตือน
อีเมลแจ้งเตือนมักเข้า Spam หรือเครื่องตรวจส่งอีเมลออกไม่ได้ ใช้ SMTP ของบัญชีอีเมลจริงพร้อม Authentication และตั้งช่องทางสำรองที่ไม่ใช่อีเมลไว้ด้วย
ได้รับแจ้งเตือนแล้วไม่รู้ต้องทำอะไรต่อ
ดูรหัสสถานะที่แจ้งมา แล้วอ่านความหมายและวิธีไล่ปัญหาใน ทำความเข้าใจ HTTP Error 403, 404, 500, 502, 503 และ 504 ถ้าเครื่องทำงานหนักเกินไป ดู ตรวจสอบ CPU, RAM และ Load Average ของ Linux Server ควรเขียนขั้นตอนรับมือสั้นๆ ไว้ล่วงหน้า ว่าใครต้องทำอะไรเมื่อได้รับแจ้งเตือน
หากเว็บที่อยู่บนบริการของ THAI DATA CLOUD ล่มและตรวจสอบเบื้องต้นแล้วยังหาสาเหตุไม่ได้ ติดต่อทีมงานได้ที่ https://thaidata.cloud/contact/ โดยแจ้งเวลาที่ระบบเฝ้าระวังตรวจพบและรหัสสถานะที่ได้รับ
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


