ติดตั้ง Netdata บน VPS ตรวจสอบ Server แบบ Real-time
Netdata คือ monitoring agent โอเพนซอร์สที่เก็บ metrics ทุก 1 วินาที และแสดงผลผ่าน web dashboard แบบ real-time — ดู CPU, RAM, Disk I/O, Network, Process, Container และ Application metrics ได้ในที่เดียว โดยไม่ต้องตั้ง database หรือ pipeline ซับซ้อน ต่างจาก Prometheus+Grafana ที่ต้องตั้งหลายชั้น Netdata ติดตั้งด้วยคำสั่งเดียวแล้วใช้งานได้ทันที บทความนี้ครอบคลุมการติดตั้ง, ตั้ง alert, รักษาความปลอดภัย dashboard และ export metrics ออกไปยัง Grafana
ทำไมถึงใช้ Netdata?
- Real-time 1 วินาที: เห็นปัญหาได้ทันทีที่เกิด ไม่ต้องรอ scrape interval
- ติดตั้งง่าย: script เดียวจัดการทุกอย่าง รองรับ Ubuntu/Debian/CentOS
- Auto-detect: ตรวจพบ Nginx, MySQL, Docker, Redis โดยอัตโนมัติ
- Memory น้อย: ใช้ RAM ประมาณ 100–200 MB พร้อมเก็บ history หลายชั่วโมง
- Alert ในตัว: มี rule ตั้งต้นกว่า 200 ข้อ ส่ง alert ไปยัง email/Slack/PagerDuty
ติดตั้ง Netdata
# วิธีที่ 1 — Official installer script (แนะนำ)
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
# วิธีที่ 2 — ติดตั้งจาก apt (Ubuntu/Debian)
apt install -y netdata
# เปิดใช้และเริ่ม service
systemctl enable netdata
systemctl start netdata
# Netdata จะ listen บน port 19999 โดย default
# เปิดเบราว์เซอร์: http://YOUR_VPS_IP:19999
ล็อก Dashboard ไม่ให้เปิด Public
ค่า default ของ Netdata เปิด port 19999 ให้ทุกคนเข้าได้ ต้องปิดทันทีแล้วใช้ reverse proxy แทน
# แก้ไฟล์ config
nano /etc/netdata/netdata.conf
# เพิ่มใน [web] section
[web]
bind to = 127.0.0.1
# Restart Netdata
systemctl restart netdata
ตั้ง Nginx Reverse Proxy พร้อม Authentication
# สร้าง password file
apt install -y apache2-utils
htpasswd -c /etc/nginx/.netdata_auth admin
# สร้าง Nginx vhost
nano /etc/nginx/sites-available/netdata
server {
listen 80;
server_name monitor.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name monitor.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/monitor.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monitor.yourdomain.com/privkey.pem;
auth_basic "Netdata Monitoring";
auth_basic_user_file /etc/nginx/.netdata_auth;
location / {
proxy_pass http://127.0.0.1:19999;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# Enable และ reload
ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
เปิดใช้ Plugin และ Monitoring เพิ่มเติม
Netdata auto-detect หลาย service แต่บางตัวต้องตั้งค่าเพิ่ม:
# MySQL Monitoring — สร้าง user ให้ Netdata อ่าน metrics
mysql -u root -p -e "CREATE USER 'netdata'@'localhost' IDENTIFIED BY '';
GRANT USAGE ON *.* TO 'netdata'@'localhost';
FLUSH PRIVILEGES;"
# แก้ไฟล์ plugin config
nano /etc/netdata/python.d/mysql.conf
# เพิ่ม:
# localhost:
# 'user': 'netdata'
# 'pass': ''
# 'my.cnf': '/etc/mysql/my.cnf'
# Docker container monitoring
# Netdata detect Docker อัตโนมัติถ้า socket /var/run/docker.sock เข้าถึงได้
usermod -aG docker netdata
systemctl restart netdata
ตั้ง Alert แจ้งเตือน
# ดู alert ที่ active อยู่
/etc/netdata/health.d/
# ตั้ง email alert
nano /etc/netdata/health_alarm_notify.conf
# แก้ส่วน email:
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="[email protected]"
SENDMAIL=/usr/sbin/sendmail
# ตั้ง Slack webhook
SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
DEFAULT_RECIPIENT_SLACK="#alerts"
# ทดสอบ alert
su -s /bin/bash netdata -c "/usr/libexec/netdata/plugins.d/alarm-notify.sh test"
Export Metrics ไปยัง Prometheus + Grafana
# เปิด Prometheus exporter ใน Netdata
nano /etc/netdata/exporting.conf
[prometheus:local]
enabled = yes
destination = localhost:9091
# หรือใช้ native Prometheus endpoint โดยตรงที่:
# http://127.0.0.1:19999/api/v1/allmetrics?format=prometheus
# เพิ่ม scrape config ใน Prometheus
# prometheus.yml:
# - job_name: 'netdata'
# static_configs:
# - targets: ['localhost:19999']
# metrics_path: '/api/v1/allmetrics'
# params:
# format: [prometheus]
# นำเข้า Grafana dashboard ID 7107 (Netdata Overview)
# หรือ ID 2701 (Netdata ที่นิยมใช้)
ตั้ง Log Retention ลดการใช้ RAM
# แก้ history และ memory mode
nano /etc/netdata/netdata.conf
[global]
# เก็บ history 6 ชั่วโมง (ค่า default = 3600 วินาที)
history = 21600
# ใช้ dbengine แทน ram เพื่อเก็บ history ยาวขึ้น
memory mode = dbengine
[db]
# พื้นที่ disk สำหรับ dbengine (MB)
dbengine multihost disk space MB = 512
systemctl restart netdata
ตรวจสอบว่า Netdata ทำงานถูกต้อง
# ดูสถานะ service
systemctl status netdata
# ตรวจสอบ port ที่ listen (ต้องเห็น 127.0.0.1:19999 หลังแก้ config)
ss -tlnp | grep 19999
# ดู log error
journalctl -u netdata -n 50
# เช็ก API health endpoint
curl -s http://127.0.0.1:19999/api/v1/info | python3 -m json.tool | head -20
# ดู metrics ทั้งหมดที่ collect ได้
curl -s "http://127.0.0.1:19999/api/v1/charts" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'Charts: {len(d[\"charts\"])}')"
/etc/netdata/python.d.conf หรือ /etc/netdata/node.d.conf แต่ละ plugin สามารถตั้ง enabled: no ได้อิสระแก้ปัญหาที่พบบ่อย
Error: "Cannot open /proc/net/dev"
เกิดเมื่อ kernel ไม่มี procfs หรือ container ถูกจำกัด privilege เกินไป
# ตรวจสอบว่า procfs mount อยู่
ls /proc/net/dev
# สำหรับ Docker container ต้อง run ด้วย --cap-add SYS_PTRACE
docker run -d \
--cap-add SYS_PTRACE \
--pid=host \
--network=host \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
netdata/netdata
Error: "netdata: command not found" หลัง install
installer เพิ่ม PATH ใหม่ที่ /opt/netdata/usr/sbin/ ต้อง reload shell
export PATH=$PATH:/opt/netdata/usr/sbin
# หรือ logout แล้ว login ใหม่
# ตรวจสอบตำแหน่งจริง
which netdata || find /opt /usr -name netdata -type f 2>/dev/null
Error: "Permission denied" สำหรับ MySQL plugin
User netdata ไม่มีสิทธิ์อ่าน MySQL stats
mysql -u root -p -e "GRANT USAGE ON *.* TO 'netdata'@'localhost'; FLUSH PRIVILEGES;"
# ตรวจสอบ
mysql -u netdata -e "SHOW GLOBAL STATUS LIMIT 5;"
Dashboard โหลดช้าหรือ charts หาย
มักเกิดจาก browser cache หรือ proxy ไม่ส่ง WebSocket
# เพิ่มใน Nginx location block
location / {
proxy_pass http://127.0.0.1:19999;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
}
Netdata กิน RAM มากเกินไป
ค่า default เก็บ metrics ใน RAM ถ้า server มี RAM น้อยควรเปลี่ยน mode
nano /etc/netdata/netdata.conf
[global]
memory mode = save # บันทึก disk แทน RAM
history = 3600 # ลด history เหลือ 1 ชั่วโมง
systemctl restart netdata
# ตรวจ RAM หลัง restart
ps aux | grep netdata | awk '{print $6}' | head -5
คำถามที่พบบ่อย
Netdata กับ Grafana+Prometheus ต่างกันอย่างไร?
Netdata เหมาะสำหรับ real-time troubleshooting — เห็นข้อมูล 1 วินาที ติดตั้งง่าย ไม่ต้องตั้ง pipeline Prometheus+Grafana เหมาะกว่าสำหรับ long-term trend, multi-server aggregation และ custom dashboard ที่ซับซ้อน ใช้ร่วมกันได้โดย Netdata export metrics ให้ Prometheus scrape
Netdata ส่ง data ออก internet ไหม?
ค่า default ไม่ส่ง — --disable-telemetry ปิด telemetry ได้ตั้งแต่ install ถ้าใช้ Netdata Cloud ต้องเชื่อมด้วย claim token แต่ข้อมูล metrics ยังอยู่บน VPS ของคุณ ไม่ถูก upload ไปยัง cloud
Netdata รองรับ Container monitoring ไหม?
รองรับ Docker และ LXC/LXD ได้โดยอัตโนมัติ — ดู CPU/RAM แยกต่อ container และเห็น network/disk I/O ของแต่ละ container ถ้าต้องการ Kubernetes ต้องใช้ Netdata Helm chart แยก