คำตอบสั้น ๆ: ตั้งระบบเฝ้าดูเว็บไซต์และบริการที่แจ้งเตือนเข้า LINE หรืออีเมลทันทีเมื่อล่ม พร้อมหน้าสถานะสาธารณะสำหรับแจ้งลูกค้า
คู่มือนี้อธิบาย Uptime Kuma ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
การรู้ว่าเว็บล่มจากการที่ลูกค้าโทรมาแจ้งคือสถานการณ์ที่ควรหลีกเลี่ยง ระบบเฝ้าดูที่ตรวจสอบทุกนาทีและแจ้งเตือนทันทีทำให้ทีมงานรู้ก่อนและแก้ได้ก่อนที่ผู้ใช้จะได้รับผลกระทบเป็นวงกว้าง
Uptime Kuma เป็นเครื่องมือที่ติดตั้งง่ายที่สุดในกลุ่มนี้ ใช้ทรัพยากรน้อย และรองรับการแจ้งเตือนเข้าช่องทางที่คนไทยใช้จริงอย่าง LINE ได้ในตัว
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ที่มี Docker RAM เพียง 512 MB ก็เพียงพอ
- โดเมนย่อยสำหรับเข้าหน้าจอ
- ควรติดตั้งบนเซิร์ฟเวอร์คนละเครื่องกับเว็บที่จะเฝ้าดู เพราะหากอยู่เครื่องเดียวกันและเครื่องนั้นล่ม ระบบเฝ้าดูก็ล่มไปด้วยจึงแจ้งเตือนไม่ได้
ขั้นตอนที่ 1: ติดตั้ง
sudo mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
sudo nano docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
environment:
TZ: Asia/Bangkok
sudo docker compose up -d
sudo docker compose logs -f
ขั้นตอนที่ 2: ตั้ง Nginx และ SSL
sudo nano /etc/nginx/sites-available/uptime
server {
listen 80;
server_name status.example.com;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
sudo ln -s /etc/nginx/sites-available/uptime /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d status.example.com --agree-tos -m [email protected] --redirect
WebSocket จำเป็นสำหรับหน้าจอนี้ เพราะข้อมูลอัปเดตแบบเรียลไทม์
ขั้นตอนที่ 3: สร้างการตรวจสอบ
เข้าหน้าเว็บแล้วสร้างบัญชีผู้ดูแล จากนั้นกด Add New Monitor ชนิดที่ใช้บ่อยและควรตั้งไว้
เว็บไซต์ (HTTP/s)
- URL ใส่ที่อยู่เต็ม
- Heartbeat Interval 60 วินาที
- Retries 2 ครั้งก่อนถือว่าล่ม ลดการแจ้งเตือนผิดพลาดจากเครือข่ายสะดุดชั่วคราว
- Accepted Status Codes 200-299
ตรวจเนื้อหาในหน้าเว็บ (HTTP/s - Keyword)
ใช้เมื่อเว็บตอบ 200 ได้แต่แสดงหน้าข้อผิดพลาด ใส่คำที่ต้องมีในหน้าปกติ เช่น ชื่อบริษัท ทำให้จับปัญหาที่การตรวจสอบธรรมดามองไม่เห็น
วันหมดอายุของใบรับรอง SSL
ในการตรวจสอบแบบ HTTP ให้ตั้ง Certificate Expiry Notification ไว้ที่ 14 และ 7 วัน ป้องกันใบรับรองหมดอายุโดยไม่รู้ตัว
บริการอื่น
- TCP Port สำหรับฐานข้อมูลหรือ SSH
- Ping สำหรับอุปกรณ์เครือข่าย
- DNS ตรวจว่าระเบียนยังชี้ถูกที่
- Push สำหรับงานตามเวลา โดยให้สคริปต์เรียก URL เมื่อทำงานสำเร็จ หากไม่มีการเรียกภายในเวลาที่กำหนดจะถือว่าล้มเหลว ซึ่งจับกรณีที่งานสำรองข้อมูลหยุดทำงานเงียบ ๆ ได้
ขั้นตอนที่ 4: ตั้งการแจ้งเตือน
ไปที่ Settings แล้ว Notifications กด Setup Notification
LINE (Messaging API)
LINE Notify ปิดบริการไปตั้งแต่วันที่ 31 มีนาคม 2025 ถ้าต้องการรับแจ้งเตือนทาง LINE ให้เลือกชนิด LINE Messenger ใน Uptime Kuma ซึ่งส่งผ่าน LINE Messaging API
- สร้าง LINE Official Account แล้วเปิดใช้ Messaging API ใน LINE Official Account Manager (ตั้งแต่ 4 กันยายน 2024 สร้าง Messaging API channel ตรงจาก LINE Developers Console ไม่ได้แล้ว)
- เปิด channel นั้นใน LINE Developers Console ออก Channel access token (long-lived) ที่แท็บ Messaging API และคัดลอกค่า Your user ID ที่แท็บ Basic settings
- เพิ่ม LINE Official Account นั้นเป็นเพื่อนในแอป LINE ของคุณ ถ้าบัญชีถูกบล็อก ข้อความจะไม่ถึงแม้ระบบจะตอบว่าส่งสำเร็จ
- ใน Uptime Kuma เลือกชนิด LINE Messenger ใส่ Channel access token กับ User ID แล้วกด Test
อีเมล
Hostname: smtp.example.com
Port: 587
Security: STARTTLS
Username: [email protected]
Password: รหัสผ่าน
From: [email protected]
To: [email protected]
Telegram
สร้างบอทผ่าน BotFather เอา Token มาใส่ และหา Chat ID ด้วยการส่งข้อความหาบอทแล้วเรียก
curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates" | grep -o '"id":[0-9-]*' | head -1
ตั้งการแจ้งเตือนอย่างน้อยสองช่องทางเสมอ เผื่อช่องทางหนึ่งมีปัญหา