Khi hệ thống giật lag mà lệnh htop không còn đủ nhanh
Đã bao giờ bạn gặp cảnh web bỗng dưng đơ 5-10 giây, khách réo ầm ĩ, nhưng khi SSH vào gõ top hay htop thì CPU lại chỉ… 5%? Mọi thứ trông bình thường như chưa hề có sự cố. Vấn đề là các công cụ CLI chỉ chụp snapshot đúng tích tắc bạn nhìn màn hình. Trong khi đó, các cụm Prometheus hay Zabbix thường gom metric theo chu kỳ 15 đến 30 giây một lần. Khoảng trễ đó quá dài. Một đợt nghẽn I/O ổ đĩa hay loop query đột biến hoàn toàn có thể biến mất trước khi agent kịp ghi nhận dữ liệu.
Mình từng quản lý hơn 20 con VPS chạy các dịch vụ từ Node.js đến Laravel. Quy trình đầu tiên của mình luôn là cài Netdata ngay sau khi dựng OS. Nó ghi nhận thông số chi tiết theo từng giây (per-second granularity). Tuyệt nhất là agent chỉ cắn khoảng 1-2% CPU.
Bản chất kiến trúc: Vì sao Netdata đạt được độ trễ 1 giây?
Netdata là daemon theo dõi hiệu năng phân tán chạy trực tiếp trên Linux. Thay vì gửi raw data về máy chủ tập trung để xử lý, Netdata tự phân tích ngay trên node:
- Thu thập dữ liệu mỗi giây: Netdata đọc trực tiếp từ kernel qua
/proc,/sysvà các probe eBPF. Core engine viết bằng C thuần, parse nhị phân cực nhanh nên hầu như không gây overhead cho hệ điều hành. - Lưu trữ in-memory và nén dbengine: Metric tức thời nằm trên RAM để render biểu đồ không bị khựng. Dữ liệu cũ sau đó được nén đa tầng và lưu xuống disk, chỉ tốn vài trăm MB bộ nhớ.
- Tự động nhận diện dịch vụ (Zero-config): Khởi động xong, Netdata tự quét các tiến trình đang mở port như Nginx, MySQL, Docker, Redis. Nó tự vẽ dashboard tương ứng mà bạn không cần mò mẫm viết file YAML exporter.
- Giao diện web dựng sẵn: Không cần tốn RAM kéo theo Grafana, bạn có ngay dashboard phản hồi nhanh nhạy, hỗ trợ zoom-in từng giây chỉ bằng con lăn chuột.
Thực hành: Cài đặt và bảo mật Netdata trên Ubuntu
Bước 1: Cập nhật hệ thống
Đầu tiên, cập nhật danh sách gói phần mềm trên VPS:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget apt-transport-https
Bước 2: Cài đặt qua script kickstart chính thức
Dùng script chính thức từ Netdata là cách nhanh và chuẩn nhất. Script sẽ tự nhận diện phiên bản Ubuntu (20.04, 22.04 hay 24.04), nạp kho APT và tải bản stable:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
Tham số --disable-telemetry sẽ tắt việc gửi dữ liệu phân tích ẩn danh về cloud của hãng. Server nội bộ nên giữ cờ này để đảm bảo riêng tư.
Chờ lệnh chạy xong khoảng 1-2 phút, kiểm tra service:
sudo systemctl status netdata
Nếu thấy dòng active (running) màu xanh lá, tiến trình đã khởi động chuẩn.
Bước 3: Khóa cổng 19999 khỏi internet
Đây là sai lầm rất nhiều người mắc phải: Netdata mặc định mở cổng 19999 ra toàn mạng (0.0.0.0:19999) và không yêu cầu đăng nhập. Ai quét trúng IP cũng đọc được danh sách tiến trình, dung lượng RAM và lưu lượng mạng của bạn.
Hãy ép Netdata chỉ lắng nghe nội bộ trên localhost:
sudo /etc/netdata/edit-config netdata.conf
Tìm block [web] và sửa directive bind to:
[web]
bind to = 127.0.0.1
Lưu file và khởi động lại tiến trình:
sudo systemctl restart netdata
Dùng lệnh ss kiểm tra lại cổng:
sudo ss -tulpn | grep 19999
# Kết quả chuẩn: tcp LISTEN 0 4096 127.0.0.1:19999
Khi thấy IP là 127.0.0.1, cổng đã an toàn.
Bước 4: Cấu hình Nginx Reverse Proxy và HTTP Basic Auth
Để theo dõi dashboard từ trình duyệt cá nhân, chúng ta đẩy kết nối qua Nginx kèm mật khẩu xác thực.
Tạo file chứa tài khoản truy cập:
sudo apt install -y apache2-utils
sudo htpasswd -c /etc/nginx/.netdata_auth devops_admin
Nhập mật khẩu an toàn khi terminal yêu cầu.
Tiếp theo, tạo file virtual host tại /etc/nginx/sites-available/netdata.conf:
upstream netdata_backend {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen 80;
server_name monitor.example.com;
auth_basic "Server Monitor - Yeu cau xac thuc";
auth_basic_user_file /etc/nginx/.netdata_auth;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://netdata_backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
Bật site mới và nạp lại cấu hình Nginx:
sudo ln -s /etc/nginx/sites-available/netdata.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Mở trình duyệt gõ domain hoặc IP server. Hộp thoại xác thực hiện lên, nhập đúng user/password là bạn đã vào được giao diện điều khiển.
Bước 5: Ép RAM cho VPS 1GB – 2GB
Trên những con VPS dung lượng RAM khiêm tốn (1GB – 2GB) đang chạy MySQL hay Redis, bạn không nên để Netdata giữ quá nhiều cache. Mở lại file cấu hình:
sudo /etc/netdata/edit-config netdata.conf
Tìm section [db] và điều chỉnh giới hạn lưu trữ:
[db]
mode = dbengine
dbengine tier 0 disk space MB = 256
dbengine tier 0 retention days = 7
Thiết lập này khóa chặt dung lượng ổ đĩa cho dữ liệu 1 giây ở mức 256MB và giữ lịch sử trong 7 ngày. Bạn có đủ dữ liệu để truy vết sự cố tuần trước mà RAM của agent chỉ neo ở mức 100-150MB.
Chọn đúng đồ nghề cho server nhỏ
Dựng stack Prometheus, Alertmanager và Grafana rất ngầu nhưng tốn tài nguyên. Riêng đống exporter và Java/Go daemon đã ngốn mất vài trăm MB RAM. Với một cụm vài chục node lớn thì mô hình đó phát huy tác dụng. Nhưng với các server độc lập, Netdata hiệu quả hơn nhiều: cài 2 phút, tự bắt metric và bắt dính từng đợt micro-spike mà không làm chậm máy chủ chính.

