Giám sát VPS thời gian thực với Netdata (và khi nào cần thêm Prometheus)
Khi một VPS bắt đầu chậm bất thường, thứ bạn cần không phải là log của tuần trước mà là câu trả lời cho ngay giây này: CPU đang ở đâu, đĩa có bị nghẽn I/O không, tiến trình nào đang ăn RAM. Netdata sinh ra đúng cho khoảng trống đó. Nó thu thập metrics ở độ phân giải per-second, dựng dashboard trực quan ngay tại chỗ, và cài chỉ trong một dòng. Bài này đi qua cách cài, những gì bạn nhận được, cách bảo mật dashboard cho đúng (điểm nhiều người làm sai), thiết lập alert, footprint tài nguyên, và ranh giới khi nào nên bổ sung Prometheus cùng Grafana.
Cài Netdata trong một dòng
Netdata cung cấp script kickstart.sh tự nhận diện distro (Debian, Ubuntu, RHEL, Alma, Rocky...) và cài bằng gói native khi có thể, fallback sang build tĩnh khi không. Lệnh chuẩn:
curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel --no-updates
Vài lưu ý theo tài liệu chính thức:
--stable-channelchọn kênh phát hành ổn định. Mặc định của script là kênh nightly; với VPS production bạn thường muốn stable.--no-updatestắt auto-update hàng ngày. Script bật cập nhật tự động theo mặc định; trên server production nhiều người thích tự kiểm soát thời điểm nâng cấp.- Không có tùy chọn nào thì script vẫn chạy interactive và hỏi bạn chọn kênh.
Xong lệnh, service netdata chạy ngay và bắt đầu thu thập. Kiểm tra:
systemctl status netdata
curl -s http://127.0.0.1:19999/api/v1/info | head
Metrics per-second: bạn nhận được gì
Điểm phân biệt Netdata với đa số công cụ là độ phân giải 1 giây và auto-discovery. Ngay sau khi cài, không cần khai báo gì thêm, dashboard đã có hàng nghìn metrics gom theo nhóm:
- System: CPU per-core, load average, context switch, interrupts, entropy.
- Memory: RAM, swap, page cache, OOM events, hoạt động của kernel memory.
- Disk: throughput, IOPS, I/O latency và backlog theo từng thiết bị block, mức dùng inode.
- Network: băng thông per-interface, packet, lỗi, drop, trạng thái TCP/UDP socket.
- Application: collector tự phát hiện Nginx, Apache, MySQL/MariaDB, PostgreSQL, Redis, Docker container, systemd services...
Mỗi biểu đồ đều zoom, pan và tương quan theo thời gian ngay trên trình duyệt. Với sự cố ngắn và đột biến, per-second cho bạn thấy được cái mà chu kỳ thu thập 15 đến 60 giây của công cụ khác thường bỏ lỡ.
Bảo mật dashboard: KHÔNG expose port 19999 ra ngoài
Đây là phần quan trọng nhất và cũng là chỗ dễ sai nhất. Mặc định Netdata lắng nghe trên cổng 19999 ở mọi interface. Netdata không có cơ chế đăng nhập tích hợp cho Agent tự host. Nếu bạn mở 19999 ra Internet, bất kỳ ai cũng đọc được toàn bộ chỉ số hệ thống của bạn, một mức lộ thông tin không chấp nhận được.
Cách làm đúng gồm hai bước: bind về localhost, rồi đặt sau reverse proxy có xác thực.
Bước 1, sửa netdata.conf (thường ở /etc/netdata/netdata.conf, chỉnh qua edit-config):
sudo /etc/netdata/edit-config netdata.conf
[web]
bind to = 127.0.0.1
allow connections from = localhost
Sau khi restart, dashboard không còn truy cập được qua your-host:19999 từ bên ngoài. Bước 2, dựng reverse proxy có HTTP basic auth. Tạo file mật khẩu rồi cấu hình Nginx:
sudo sh -c "echo -n 'admin:' > /etc/nginx/.netdata-htpasswd"
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.netdata-htpasswd"
upstream netdata {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen 443 ssl;
server_name monitor.example.com;
# ssl_certificate / ssl_certificate_key: dùng chứng chỉ của bạn
location / {
auth_basic "Protected";
auth_basic_user_file /etc/nginx/.netdata-htpasswd;
proxy_pass http://netdata;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Nguyên tắc cần nhớ:
- Agent chỉ nghe trên
127.0.0.1, không public. - Reverse proxy chạy TLS (Let's Encrypt) và basic auth, hoặc tốt hơn là chỉ cho truy cập qua VPN.
- Với nhiều node, firewall để chỉ IP của reverse proxy được chạm tới
19999. - Nếu chỉ cần xem thỉnh thoảng, đơn giản nhất là không proxy gì cả mà dùng SSH tunnel:
ssh -L 19999:127.0.0.1:19999 user@vpsrồi mởhttp://127.0.0.1:19999ở máy bạn.
Thiết lập alert
Netdata đi kèm hàng trăm health check định nghĩa sẵn (CPU cao kéo dài, đĩa sắp đầy, RAM cạn, service chết...). Bạn chỉ cần cấu hình kênh nhận thông báo trong health_alarm_notify.conf:
sudo /etc/netdata/edit-config health_alarm_notify.conf
File này hỗ trợ email, Slack, Discord, Telegram, PagerDuty, webhook... Ví dụ bật Slack:
SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXX/YYYY/ZZZZ"
DEFAULT_RECIPIENT_SLACK="#alerts"
Muốn tự viết ngưỡng riêng, tạo file trong health.d/. Ví dụ cảnh báo khi phân vùng gốc vượt 90 phần trăm:
template: disk_space_root
on: disk.space
calc: $used * 100 / ($avail + $used)
units: %
every: 60s
warn: $this > 80
crit: $this > 90
to: sysadmin
Nạp lại cấu hình health không cần restart toàn service:
sudo netdatacli reload-health
Footprint tài nguyên
Netdata chạy như một daemon C, lưu metrics trong database engine nén theo tầng (dbengine) nên footprint nhẹ hợp với VPS mức vừa phải. Vài điểm chỉnh để giữ nó gọn trên node nhỏ:
- Giới hạn dung lượng lưu trữ metrics qua mục
[db]trongnetdata.conf(số MB cho mỗi tier), tránh dbengine ăn nhiều đĩa trên VPS ít dung lượng. - Tắt collector bạn không dùng để giảm CPU và RAM.
- Với per-second là mặc định, nếu không cần độ phân giải đó có thể nới
update everylên 2 đến 5 giây.
Với một VPS 1 đến 2 vCPU chạy web thông thường, cấu hình mặc định thường vừa vặn; chỉ khi chạy hàng loạt node hoặc giữ lịch sử dài mới cần cân nhắc kỹ.
Khi nào nâng lên Prometheus và Grafana
Netdata mạnh ở giám sát real-time trên từng node, nhưng nó không phải hệ thống metrics tập trung dài hạn. Cân nhắc bổ sung Prometheus và Grafana khi:
- Bạn có nhiều node và cần một chỗ truy vấn tập trung, dashboard tổng hợp toàn fleet.
- Cần lưu trữ lịch sử dài (nhiều tháng đến năm) để phân tích xu hướng và capacity planning.
- Cần alerting tinh vi qua Alertmanager (định tuyến, dedup, silence, escalation).
- Muốn gộp metrics ứng dụng tự phát ra (client Prometheus) chung một mặt bằng truy vấn PromQL.
Điểm hay: hai thứ này không loại trừ nhau. Netdata expose sẵn endpoint định dạng Prometheus tại /api/v1/allmetrics?format=prometheus, nên Prometheus có thể scrape thẳng Netdata làm exporter:
scrape_configs:
- job_name: 'netdata'
metrics_path: '/api/v1/allmetrics'
params:
format: ['prometheus']
static_configs:
- targets: ['10.0.0.5:19999']
Nghĩa là bạn giữ Netdata cho chẩn đoán real-time per-node, còn Prometheus và Grafana lo lưu trữ dài hạn cùng cái nhìn toàn cục. Kiến trúc này tận dụng thế mạnh của cả hai thay vì chọn một.
Tóm lược
Netdata là cách nhanh nhất để có giám sát real-time cho một VPS: cài một dòng bằng kickstart.sh, có ngay metrics per-second với auto-discovery. Điều bắt buộc làm đúng là bảo mật: bind Agent về 127.0.0.1, không bao giờ expose cổng 19999 ra public, và đặt dashboard sau reverse proxy có auth hoặc dùng SSH tunnel/VPN. Bật alert qua health_alarm_notify.conf, giữ footprint gọn bằng cách giới hạn dbengine và tắt collector thừa. Khi hạ tầng lớn lên nhiều node, cần lịch sử dài hoặc alerting phức tạp, hãy bổ sung Prometheus cùng Grafana bằng cách scrape chính endpoint Prometheus của Netdata. Chi tiết cấu hình luôn tra ở tài liệu chính thức learn.netdata.cloud.