คำตอบสั้น ๆ: ติดตั้ง Netdata ดูกราฟ CPU ดิสก์ เครือข่าย และฐานข้อมูลแบบวินาทีต่อวินาที พร้อมปิดหน้าเว็บไม่ให้เปิดสู่อินเทอร์เน็ตและตั้งการแจ้งเตือน
คู่มือนี้อธิบาย Netdata ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
เมื่อเซิร์ฟเวอร์มีอาการช้าเป็นช่วง ๆ การ SSH เข้าไปดู top ตอนที่รู้ตัวมักสายเกินไป เพราะช่วงที่มีปัญหาผ่านไปแล้ว สิ่งที่ต้องมีคือระบบที่เก็บข้อมูลไว้ตลอดเวลาเพื่อให้ย้อนดูได้ว่าตอนนั้นเกิดอะไรขึ้น
Netdata เหมาะกับงานนี้มากเพราะเก็บข้อมูลละเอียดระดับวินาที ติดตั้งจบใน 5 นาที และตรวจจับบริการที่ติดตั้งอยู่แล้วบนเครื่อง เช่น Nginx, MySQL และ Redis ให้เองโดยแทบไม่ต้องตั้งค่า
สิ่งที่ต้องเตรียม
- Ubuntu 22.04/24.04, Debian 11/12 หรือ AlmaLinux/Rocky Linux 8-9
- สิทธิ์
sudoและพื้นที่ดิสก์ว่างประมาณ 1 GB สำหรับเก็บข้อมูลย้อนหลัง - โดเมนย่อยและใบรับรอง SSL หากต้องการเปิดหน้าเว็บให้เข้าจากภายนอก
ขั้นตอนที่ 1: ติดตั้ง
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sudo sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
ตัวติดตั้งจะถามยืนยันหนึ่งครั้ง เมื่อเสร็จให้ตรวจสถานะ
sudo systemctl status netdata --no-pager
sudo ss -tlnp | grep 19999
ค่าเริ่มต้นจะเปิดพอร์ต 19999 ให้ทุกเครือข่าย ซึ่งไม่ควรปล่อยไว้ เพราะหน้าเว็บนี้เปิดเผยรายละเอียดภายในของเครื่องทั้งหมดโดยไม่มีรหัสผ่าน ขั้นตอนถัดไปคือปิดให้เรียบร้อยก่อนทำอย่างอื่น
ขั้นตอนที่ 2: ปิดไม่ให้เข้าจากอินเทอร์เน็ตโดยตรง
sudo nano /etc/netdata/netdata.conf
[web]
bind to = 127.0.0.1
allow connections from = localhost
sudo systemctl restart netdata
sudo ss -tlnp | grep 19999
ตอนนี้เข้าได้เฉพาะจากตัวเครื่องเอง ทดสอบผ่าน SSH Tunnel จากเครื่องคุณ
ssh -L 19999:127.0.0.1:19999 [email protected] -N
แล้วเปิดเบราว์เซอร์ไปที่ http://127.0.0.1:19999 วิธีนี้ปลอดภัยที่สุดและไม่ต้องตั้งค่าอะไรเพิ่ม
ขั้นตอนที่ 3: เปิดผ่าน Nginx พร้อมรหัสผ่าน (ทางเลือก)
หากต้องการให้ทีมงานเข้าดูได้จากเบราว์เซอร์โดยไม่ต้องทำอุโมงค์ ให้ครอบด้วย Nginx และ Basic Auth
sudo apt install -y apache2-utils
sudo htpasswd -c /etc/nginx/.netdata-users admin
sudo nano /etc/nginx/sites-available/netdata
upstream netdata {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen 443 ssl;
server_name status.example.com;
ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;
auth_basic "Netdata";
auth_basic_user_file /etc/nginx/.netdata-users;
location / {
proxy_pass http://netdata;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
sudo ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
ขั้นตอนที่ 4: ตั้งระยะเวลาเก็บข้อมูลย้อนหลัง
ค่าเริ่มต้นเก็บย้อนหลังไม่นานนัก ปรับให้เหมาะกับดิสก์ที่มี
sudo nano /etc/netdata/netdata.conf
[db]
mode = dbengine
storage tiers = 3
# ข้อมูลละเอียดวินาทีต่อวินาที
dbengine tier 0 retention size = 512MiB
# ข้อมูลย่อรายนาที
dbengine tier 1 retention size = 256MiB
# ข้อมูลย่อรายชั่วโมง เก็บได้เป็นเดือน
dbengine tier 2 retention size = 256MiB
sudo systemctl restart netdata
โครงสร้างสามชั้นนี้ทำให้ดูรายละเอียดของเมื่อวานได้ละเอียดระดับวินาที และยังดูแนวโน้มย้อนหลังหลายเดือนได้ในเวลาเดียวกัน โดยใช้พื้นที่ไม่มาก