ตั้งค่า Server Monitoring ด้วย Netdata และ Uptime Kuma

รู้ทันทีเมื่อ VPS มีปัญหา ก่อนที่ลูกค้าจะรายงาน นั่นคือเป้าหมายของ Server Monitoring ที่ดี บทความนี้จะแนะนำ 2 เครื่องมือที่เป็น Standard ในวงการ ได้แก่ Netdata สำหรับ Real-time Server Metrics และ Uptime Kuma สำหรับ Uptime Monitoring พร้อม Alert ผ่าน Telegram ทั้งคู่ฟรีและ Open Source

ทำไมทุก VPS Production ต้องมี Server Monitoring อย่างครบถ้วน

หลายคนมองข้าม Server Monitoring เพราะคิดว่าซับซ้อนหรือต้องลงทุนสูง แต่ความจริงคือการไม่มี Monitoring มีต้นทุนที่แพงกว่ามาก เมื่อ VPS มีปัญหาและไม่มีระบบแจ้งเตือน ทีมงานมักไม่รู้จนกว่าลูกค้าจะโทรมาร้องเรียน ซึ่งอาจผ่านไปหลายชั่วโมงแล้ว

ปัญหาที่ Monitoring ช่วยตรวจพบได้ก่อนเกิดความเสียหาย ได้แก่ CPU ที่ค่อยๆ พุ่งขึ้นเพราะ Process Leak, RAM ที่ถูก Consume ทีละน้อยจนไม่เหลือ, Disk ที่เต็มอย่างรวดเร็วเพราะ Log File ที่ไม่ได้ตัด และ Network Traffic ที่ผิดปกติซึ่งอาจบ่งบอกถึงการโจมตี

สำหรับเว็บไซต์หรือแอปพลิเคชันที่ให้บริการลูกค้าตลอดเวลา การมีระบบ Monitoring ที่ดีคือการแสดงความรับผิดชอบในระดับมืออาชีพ และช่วยรักษาความไว้วางใจจากลูกค้าได้ในระยะยาว ในยุคที่ผู้ใช้งานคาดหวังความพร้อมใช้งานของระบบตลอด 24 ชั่วโมง การตรวจสอบและแจ้งเตือนเชิงรุกจึงกลายเป็นมาตรฐานขั้นต่ำที่ระบบทุกระบบต้องมี

Netdata vs Uptime Kuma: ใช้อะไรก่อน?

ทั้งสองเครื่องมือทำหน้าที่ต่างกัน ควรใช้คู่กัน:

Netdata

  • Real-time CPU, RAM, Disk, Network
  • Dashboard สวยงาม อ่านง่าย
  • Detect ปัญหา Performance
  • Alert เมื่อ Resource สูงผิดปกติ
  • Monitor Process, Database, Nginx

Uptime Kuma

  • Monitor URL, TCP, HTTP(S)
  • Alert ทันทีเมื่อเว็บ Down
  • Status Page สาธารณะ
  • รองรับ Telegram, Email, Slack
  • Ping, DNS, Certificate expiry

ติดตั้ง Netdata บน Ubuntu/Debian

Netdata ติดตั้งด้วยคำสั่งเดียว:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

หลังติดตั้งเสร็จ เข้า Dashboard ได้ที่ http://your-server-ip:19999

ป้องกัน Port 19999 ด้วย Nginx Reverse Proxy

ไม่ควร Expose Port 19999 โดยตรง ควรใช้ Nginx เป็น Reverse Proxy พร้อม Basic Auth:

server { listen 80; server_name monitor.yourdomain.com; location / { auth_basic "Netdata"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:19999; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # สร้าง password htpasswd -c /etc/nginx/.htpasswd admin

ตั้งค่า Alert ใน Netdata

Netdata มี Alert Rule สำเร็จรูปกว่า 200 ข้อ แต่สามารถปรับได้ใน /etc/netdata/health.d/ ตัวอย่าง Alert CPU สูง:

alarm: cpu_usage on: system.cpu lookup: average -3m percentage foreach cpu every: 10s warn: $this > 85 crit: $this > 95 summary: CPU usage is too high

ติดตั้ง Uptime Kuma ด้วย Docker

วิธีที่ง่ายที่สุดคือใช้ Docker:

docker volume create uptime-kuma docker run -d \ --restart=always \ -p 3001:3001 \ -v uptime-kuma:/app/data \ --name uptime-kuma \ louislam/uptime-kuma:1

เข้า Dashboard ที่ http://your-server-ip:3001 แล้วสร้าง Admin Account

ติดตั้งแบบไม่มี Docker (npm)

git clone https://github.com/louislam/uptime-kuma.git cd uptime-kuma npm run setup node server/server.js

เพิ่ม Monitor ใน Uptime Kuma

คลิก Add New Monitor แล้วตั้งค่า:

ตารางเปรียบเทียบ Monitoring Stack ยอดนิยม

ก่อนเลือกใช้เครื่องมือ Monitoring ควรเปรียบเทียบตัวเลือกที่มีในตลาดอย่างละเอียด เพื่อให้เหมาะกับขนาดและงบประมาณของโปรเจกต์

เครื่องมือ ประเภท ความยาก RAM ที่ใช้ เหมาะกับ
Netdata Real-time metrics ง่าย 50–100 MB VPS ทั่วไป
Uptime Kuma Uptime monitoring ง่าย 80–120 MB ทุกขนาด
Prometheus + Grafana Metrics + Dashboard ยาก 300–500 MB องค์กรใหญ่
Zabbix Enterprise monitoring ยากมาก 500 MB+ Enterprise
Datadog Cloud-based SaaS ปานกลาง Agent ~50 MB ทีมที่มีงบ

ตั้งค่า Netdata Cloud (Optional)

Netdata มีบริการ Cloud ฟรีที่รวม Dashboard จาก Server หลายเครื่องไว้ที่เดียว พร้อม Alert และ Anomaly Detection อัตโนมัติ ซึ่งมีประโยชน์มากเมื่อดูแล VPS หลายตัว

เชื่อมต่อ Netdata กับ Cloud

หลังติดตั้ง Netdata แล้ว รันคำสั่งต่อไปนี้เพื่อเชื่อมต่อกับ Cloud Account:

netdata-claim.sh -token=YOUR_CLAIM_TOKEN \
  -rooms=YOUR_ROOM_ID \
  -url=https://app.netdata.cloud

Token และ Room ID หาได้จาก Dashboard บน app.netdata.cloud หลัง Sign Up ฟรี เมื่อเชื่อมต่อสำเร็จจะเห็น Node ใน Cloud Dashboard ภายใน 1-2 นาที

ประโยชน์ของ Netdata Cloud

ตั้งค่า Telegram Notification

สร้าง Telegram Bot และรับ Token:

  1. เปิด Telegram แล้วหา @BotFather
  2. พิมพ์ /newbot แล้วตั้งชื่อ Bot
  3. คัดลอก API Token ที่ได้รับ
  4. หา Chat ID ของคุณที่ @userinfobot
  5. ใน Uptime Kuma ไปที่ Settings → Notifications → Add → Telegram
  6. ใส่ Bot Token และ Chat ID

ตั้งค่า Status Page สาธารณะด้วย Uptime Kuma

Uptime Kuma มีฟีเจอร์สร้าง Status Page สาธารณะที่ลูกค้าสามารถดูสถานะระบบได้เองโดยไม่ต้องติดต่อ Support ซึ่งช่วยลดคำถามซ้ำๆ และสร้างความโปร่งใส

วิธีสร้าง Status Page

  1. ใน Uptime Kuma คลิก Status Page ในเมนูซ้าย
  2. คลิก New Status Page ตั้งชื่อและ Slug เช่น status
  3. เลือก Monitor ที่ต้องการแสดงบน Status Page
  4. ตั้งค่า Custom Domain เช่น status.yourdomain.com โดยชี้ DNS CNAME ไปยัง VPS
  5. เปิดใช้งานหน้า Status Page และแชร์ URL ให้ลูกค้า

ตั้งค่า CNAME สำหรับ Status Page

เพิ่ม CNAME Record ใน DNS ของโดเมน:

status    CNAME    your-vps-ip.example.com    3600

จากนั้นตั้งค่า Nginx ให้ Proxy ไปยัง Uptime Kuma บน Port 3001:

server {
    listen 80;
    server_name status.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Best Practice: Monitoring Checklist สำหรับ VPS Production

ก่อน Deploy แอปพลิเคชันบน VPS จริง ควรมีระบบ Monitoring ครบตาม Checklist ดังนี้เพื่อรับรองความพร้อมของระบบ

การมี Monitoring ครบถ้วนช่วยให้ทีมทราบปัญหาก่อนลูกค้า และลดเวลาแก้ไข (Mean Time to Recover) ได้อย่างมีนัยสำคัญ สำหรับ VPS ที่ให้บริการแบบ 24 ชั่วโมงต่อวัน การตอบสนองเร็วคือปัจจัยสำคัญที่แยก Professional กับ Amateur

ตั้งค่า Alert CPU/RAM สูงผ่าน Bash Script

ถ้าไม่ต้องการใช้ Netdata ก็ทำ Simple Alert ด้วย Script + Cron ได้:

#!/bin/bash # /usr/local/bin/alert.sh CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d. -f1) RAM_FREE=$(free | awk '/Mem:/{printf "%.0f", $4/$2*100}') if [ "$CPU" -gt 90 ]; then curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \ -d chat_id="$CHAT_ID" \ -d text="ALERT: CPU Usage ${CPU}% on $(hostname)" fi if [ "$RAM_FREE" -lt 10 ]; then curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \ -d chat_id="$CHAT_ID" \ -d text="ALERT: Low RAM (only ${RAM_FREE}% free) on $(hostname)" fi

การตั้งค่า Log Monitoring และ Disk Alert ขั้นพื้นฐาน

นอกจาก CPU และ RAM แล้ว Disk และ Log เป็นอีกสองส่วนที่ต้องตรวจสอบเป็นประจำ เพราะ Disk เต็มคือสาเหตุอันดับต้นๆ ที่ทำให้ Service ล้มฉับพลันโดยไม่มีสัญญาณเตือนล่วงหน้า

ตั้ง Cron Job ตรวจ Disk อัตโนมัติ

สร้างสคริปต์ตรวจ Disk และแจ้งเตือนทาง Telegram เมื่อใช้เกิน 80%:

#!/bin/bash
# /usr/local/bin/disk-alert.sh
THRESHOLD=80
USAGE=$(df / | awk 'NR==2{print $5}' | tr -d '%')
HOSTNAME=$(hostname)

if [ "$USAGE" -gt "$THRESHOLD" ]; then
  MSG="DISK ALERT: ${USAGE}% used on ${HOSTNAME}"
  curl -s "https://api.telegram.org/bot${TOKEN}/sendMessage" \
    -d chat_id="${CHAT_ID}" \
    -d text="${MSG}"
fi

เพิ่ม Cron Job รันทุก 30 นาที:

*/30 * * * * /usr/local/bin/disk-alert.sh

Log Monitoring ด้วย Netdata

Netdata สามารถอ่าน Log ไฟล์และนับ Error Rate ได้ผ่าน Plugin ที่ชื่อ go.d ตัวอย่างการตั้งค่าดู Error ใน Nginx Access Log:

# /etc/netdata/go.d/web_log.conf
jobs:
  - name: nginx
    path: /var/log/nginx/access.log
    log_type: nginx

หลังตั้งค่าแล้ว Netdata จะแสดง Request Rate, Error Rate (4xx/5xx) และ Response Time ของ Nginx บน Dashboard อัตโนมัติ ทำให้ทราบทันทีเมื่อมี Error Rate พุ่งขึ้นผิดปกติ ซึ่งมักเป็นสัญญาณแรกที่บ่งบอกว่า Application มีปัญหา

ทำไม VPS AsiaGB จึงเหมาะสำหรับรัน Monitoring Stack

AsiaGB VPS มาพร้อมกับ Full Root Access ทุกแพ็กเกจ ทำให้สามารถติดตั้งและตั้งค่า Netdata, Uptime Kuma, Docker และ Cron Jobs ได้อย่างอิสระโดยไม่มีข้อจำกัดจาก Shared Hosting คุณสมบัติที่ตอบโจทย์งาน Monitoring โดยเฉพาะ ได้แก่:

หากต้องการ Monitoring Stack ที่แข็งแกร่งจริงๆ แนะนำให้ใช้ VPS 2 ตัว ตัวแรกสำหรับ Application หลัก และตัวที่สองสำหรับรัน Uptime Kuma เพื่อ Monitor ตัวแรก ซึ่งทำให้ Alert ยังทำงานได้แม้ VPS Production จะล่ม

AsiaGB VPS เริ่มต้น 500 บาท/เดือน รัน Netdata และ Uptime Kuma ได้พร้อมกัน Full Root Access, SSD, ที่ตั้ง: ไทย (CSL) + สิงคโปร์ (OVHcloud) Uptime 99%

VPS พร้อมตั้ง Server Monitoring

VPS เริ่มต้น 500 บาท/เดือน Full Root Access, Docker, SSD ที่ตั้ง ไทย + สิงคโปร์ Uptime 99%

ดูแพ็กเกจ VPS