ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ติดตั้ง Netdata เฝ้าดูทรัพยากรเซิร์ฟเวอร์แบบเรียลไทม์
Home ติดตั้ง Netdata เฝ้าดูทรัพยากรเซิร์ฟเวอร์แบบเรียลไทม์

ติดตั้ง 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

โครงสร้างสามชั้นนี้ทำให้ดูรายละเอียดของเมื่อวานได้ละเอียดระดับวินาที และยังดูแนวโน้มย้อนหลังหลายเดือนได้ในเวลาเดียวกัน โดยใช้พื้นที่ไม่มาก

ขั้นตอนที่ 5: เปิดการเก็บข้อมูลของบริการที่ใช้อยู่

Netdata ตรวจพบบริการส่วนใหญ่ให้เอง แต่บางตัวต้องเปิดฝั่งบริการก่อน

Nginx

sudo nano /etc/nginx/sites-available/default
server {
    listen 127.0.0.1:80;
    server_name localhost;
    location /stub_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}

MySQL / MariaDB

sudo mysql -e "CREATE USER 'netdata'@'localhost';"
sudo mysql -e "GRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"

รีสตาร์ต Netdata แล้วตรวจว่าตัวเก็บข้อมูลทำงาน

sudo systemctl restart netdata
sudo journalctl -u netdata -n 30 --no-pager | grep -i -E 'mysql|nginx'

ขั้นตอนที่ 6: ตั้งการแจ้งเตือนเข้าอีเมลหรือ Slack

sudo nano /etc/netdata/health_alarm_notify.conf
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="[email protected]"

SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXX/YYY/ZZZ"
DEFAULT_RECIPIENT_SLACK="#alerts"

ทดสอบการส่ง

sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test

ปรับเกณฑ์เตือนได้ที่ /etc/netdata/health.d/ เช่น แก้เกณฑ์พื้นที่ดิสก์

sudo nano /etc/netdata/health.d/disk_space.conf
sudo netdatacli reload-health

ขั้นตอนที่ 7: ลดภาระของ Netdata เอง

บนเครื่องเล็กที่ทรัพยากรจำกัด ปิดตัวเก็บข้อมูลที่ไม่ได้ใช้

sudo nano /etc/netdata/netdata.conf
[plugins]
    apps = yes
    cgroups = no
    charts.d = no
    node.d = no
    python.d = yes
sudo systemctl restart netdata
systemctl status netdata --no-pager | grep Memory

ปัญหาที่พบบ่อย

เปิดหน้าเว็บแล้วกราฟไม่ขึ้น

มักเกิดจาก Nginx ที่ครอบอยู่ไม่ส่งต่อ WebSocket หรือบีบอัดซ้ำ ตรวจว่ามี proxy_http_version 1.1 และ proxy_set_header Connection "keep-alive" ในคอนฟิก

Netdata กินดิสก์เพิ่มขึ้นเรื่อย ๆ

กำหนดเพดานด้วย retention size ของแต่ละ tier ตามขั้นตอนที่ 4 ตรวจพื้นที่ที่ใช้จริงด้วย sudo du -sh /var/cache/netdata /var/lib/netdata

ได้อีเมลแจ้งเตือนถี่เกินไป

ปรับเกณฑ์ในไฟล์ภายใต้ /etc/netdata/health.d/ หรือปิดการเตือนบางตัวโดยตั้ง to: silent อย่าปิดทั้งระบบเพราะจะพลาดเรื่องสำคัญ

เปิดพอร์ต 19999 ทิ้งไว้โดยไม่ได้ตั้งใจ

ตรวจด้วย sudo ss -tlnp | grep 19999 จากเครื่องอื่นในอินเทอร์เน็ตลอง nc -vz <ip> 19999 ถ้าเชื่อมต่อได้ให้กลับไปทำขั้นตอนที่ 2 ทันที

ต้องการระบบเฝ้าระวังที่มีทีมวิศวกรดูแลให้ตลอด 24 ชั่วโมง ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security