Monitoring และ Alert บน DigitalOcean: ดู CPU RAM ดิสก์ ตั้งแจ้งเตือน และเช็กเว็บล่มอัตโนมัติ
วิธีเปิดใช้ Monitoring agent บน Droplet, อ่านกราฟ CPU/Memory/Disk/Bandwidth, ตั้ง Alert Policy แจ้งเตือนอีเมลหรือ Slack, ตั้ง Billing Alert กันบิลบวม และทางเลือกเช็กเว็บล่มด้วย Uptime
ทำไมต้องมี Monitoring
เซิร์ฟเวอร์ที่ไม่มีใครดูจะเงียบไปจนวันที่มันล่ม สาเหตุที่พบบ่อยที่สุดของเว็บล่มบน Droplet ไม่ใช่การโจมตี แต่เป็น ดิสก์เต็ม, RAM หมด (OOM), CPU ค้าง 100% ซึ่งตรวจพบล่วงหน้าได้ถ้ามีกราฟและการแจ้งเตือน และต้นทุนเริ่มต้นคือศูนย์ เพราะ Monitoring พื้นฐานของ DigitalOcean ไม่คิดค่าใช้จ่ายเพิ่มตามที่ระบุในเอกสาร ณ เวลาที่เขียน
Monitoring ของ DigitalOcean ทำอะไรได้
- กราฟ Droplet: CPU, Memory, Disk I/O, Disk usage, Bandwidth (public/private), Load average
- Alert Policies: แจ้งเตือนเมื่อค่าเกินเกณฑ์ ส่งทางอีเมลหรือ Slack
- Uptime checks: ตรวจว่า URL ตอบสนองหรือไม่ แจ้งเมื่อล่มหรือช้า (ตรวจเงื่อนไขและจำนวนที่ใช้ได้ในหน้า Control Panel)
- Billing alerts: แจ้งเตือนเมื่อค่าใช้จ่ายถึงเกณฑ์
ขั้นที่ 1: ติดตั้ง Monitoring Agent
ตอนสร้าง Droplet ให้ติ๊ก Monitoring ไว้ ระบบจะติดตั้ง agent ให้ ถ้าเครื่องเก่าไม่มี สามารถติดตั้งเองได้
curl -sSL https://repos.insights.digitalocean.com/install.sh | sudo bash
อ่านสคริปต์ก่อนรันทุกครั้งที่ pipe เข้า bash ตรวจคำสั่งล่าสุดในเอกสาร DigitalOcean แล้วตรวจสถานะ
systemctl status do-agent
จากนั้นเปิดแท็บ Graphs ของ Droplet จะเห็นข้อมูลภายในไม่กี่นาที หากไม่มี agent จะเห็นเฉพาะข้อมูลระดับ hypervisor เช่น CPU และ bandwidth โดยไม่มี Memory และ Disk usage
ขั้นที่ 2: ตั้ง Alert Policy
Control Panel → Monitoring → Create Alert Policy
ชุดแนะนำสำหรับเว็บทั่วไป
| Metric | เกณฑ์ | ช่วงเวลา | เหตุผล |
|---|---|---|---|
| CPU | > 85% | 10 นาที | เตือนก่อนเครื่องค้างจริง |
| Memory | > 85% | 10 นาที | เตือนก่อน OOM kill |
| Disk usage | > 80% | 5 นาที | ดิสก์เต็มทำให้ฐานข้อมูลพังได้ |
| Bandwidth ขาออก | สูงผิดปกติ | 30 นาที | ตรวจเจอ bot/โจมตี/ไฟล์ใหญ่ถูกดึงเยอะ |
| Load average | > จำนวน vCPU × 2 | 10 นาที | คิวงานเริ่มสะสม |
ตั้งปลายทางแจ้งเตือน (อีเมลหรือ Slack) แล้วเลือกเครื่องแบบรายตัวหรือตาม tag ให้ครอบคลุมเครื่องใหม่อัตโนมัติ
ใช้งานจริงเมื่อได้รับแจ้งเตือน
| แจ้งเตือน | เช็กอะไร | ||
|---|---|---|---|
| CPU สูง | top/htop, ดู process ที่กิน, ตรวจ cron หรือบอทที่เข้ามากระหน่ำ | ||
| Memory สูง | free -h, `ps aux --sort=-%mem | head`, ตรวจ memory leak, เพิ่ม swap หรืออัปเกรด | |
| Disk สูง | df -h, `du -xh / | sort -h | tail -30`, ล้าง log, Docker prune, ย้ายไฟล์ไป Spaces |
| Bandwidth สูง | nethogs, ตรวจ access log ของ Nginx หาไอพีที่ดึงเยอะ |
ขั้นที่ 3: Uptime Checks
Uptime check ตรวจเว็บจากภายนอก ตั้ง URL เช่น https://example.com/healthz กำหนดเงื่อนไข (ตอบ 200, เวลาตอบสนอง, อายุใบรับรอง SSL) แล้วผูกกับการแจ้งเตือน ประโยชน์คือรู้เมื่อ *ผู้ใช้เข้าไม่ได้จริง* ไม่ใช่แค่เครื่องยังเปิดอยู่
ทางเลือกอื่นถ้าต้องการตรวจหลายจุดหรือคุมเอง
- ติดตั้ง Uptime Kuma (โอเพนซอร์ส) ด้วย Docker บนอีก Droplet คนละภูมิภาค ดู ติดตั้ง Docker บน Droplet
- ใช้บริการตรวจภายนอกที่คุณเลือก
ขั้นที่ 4: Billing Alert กันบิลบวม
ที่ Billing → Settings ตั้งแจ้งเตือนเมื่อค่าใช้จ่ายรอบเดือนถึงจำนวนที่กำหนด เช่น 80% ของงบ เหมาะมากถ้าใช้เครดิตทดลองหรือผูกบัตรเครดิต ช่วยจับกรณีลืมปิด Droplet, snapshot สะสม หรือ transfer เกินโควตา ดูวิธีลดต้นทุนเพิ่มที่ 15 วิธีลดค่าใช้จ่าย DigitalOcean และเงื่อนไขราคาที่ ราคา DigitalOcean ทุกบริการ
เครื่องมือเสริมในเครื่อง
| เครื่องมือ | ใช้ทำอะไร | ติดตั้ง |
|---|---|---|
htop | ดู CPU/RAM แบบสด | apt install htop |
ncdu | หาโฟลเดอร์ที่กินดิสก์ | apt install ncdu |
iotop | ดูดิสก์ I/O | apt install iotop |
nethogs | ดูแบนด์วิดท์รายโปรเซส | apt install nethogs |
goaccess | วิเคราะห์ log Nginx | apt install goaccess |
journalctl -u ชื่อ -f | ดู log ของ systemd service | มีอยู่แล้ว |
สคริปต์เช็กดิสก์ง่ายๆ ด้วย cron
#!/bin/bash
USE=$(df / --output=pcent | tail -1 | tr -dc '0-9')
if [ "$USE" -gt 85 ]; then
echo "Disk ${USE}% on $(hostname)" | mail -s "Disk alert" [email protected]
fi
ต้องตั้งค่าส่งอีเมลของเครื่องก่อนจึงจะใช้ mail ได้ ทางที่ง่ายกว่าคือพึ่ง Alert Policy ของ DigitalOcean
รับมือเมื่อเครื่องล่มแล้ว
- เปิดกราฟดูเวลาที่เริ่มผิดปกติ
- เข้า Recovery Console ถ้า SSH ไม่ได้
- ตรวจ
dmesg -T | grep -i -E "oom|killed"ดูว่าถูก OOM kill ไหม - ตรวจ
df -hและdf -i(inode เต็มก็ทำให้เขียนไฟล์ไม่ได้) - ถ้าแก้ไม่ได้ กู้จาก Backup/Snapshot ดู Backups และ Snapshots
- บันทึกสาเหตุและตั้ง Alert เพิ่มเพื่อไม่ให้เกิดซ้ำ
ติดตามเมื่อใช้ Managed Database, Kubernetes, App Platform
บริการเหล่านี้มีกราฟและเมตริกในตัวของแต่ละบริการ ดู คู่มือ Managed Databases, คู่มือ Kubernetes (DOKS) และ คู่มือ App Platform
คำถามที่พบบ่อย
Monitoring ของ DigitalOcean ทำให้เครื่องช้าลงไหม
agent มีขนาดเล็กและใช้ทรัพยากรน้อยมากในการใช้งานทั่วไป
ควรใช้ Prometheus/Grafana แทนไหม
ถ้าต้องการเมตริกของแอปในระดับลึกและแดชบอร์ดกำหนดเอง ใช้ได้ แต่สำหรับเว็บทั่วไป Monitoring + Alert Policy พื้นฐานก็เพียงพอ และไม่ต้องดูแลระบบเพิ่ม
แจ้งเตือนช้าไหม
เป็นการตรวจตามช่วงเวลาที่ตั้ง จึงมีความหน่วงได้ ตั้งช่วงเวลาและเกณฑ์ให้พอดีเพื่อไม่ให้เตือนมากเกินจนถูกมองข้าม
ต้องตั้งแจ้งเตือนกับทุกเครื่องไหม
ควรตั้งผ่าน tag ให้ครอบคลุมทั้งกลุ่ม แล้วเพิ่ม policy เฉพาะสำหรับเครื่องสำคัญ เช่นฐานข้อมูล