Hướng dẫn cài đặt Prometheus và Node Exporter để giám sát VPS Linux
Giám sát là một phần không thể thiếu trong việc quản lý bất kỳ máy chủ nào, đặc biệt là VPS Linux. Nó giúp bạn theo dõi hiệu suất, phát hiện sớm các vấn đề tiềm ẩn và đảm bảo hệ thống luôn hoạt động ổn định. Trong bài viết này, chúng ta sẽ tìm hiểu cách cài đặt và cấu hình Prometheus và Node Exporter để xây dựng một hệ thống giám sát mạnh mẽ cho VPS của bạn.
Giới thiệu
Prometheus là gì?
Prometheus là một hệ thống giám sát và cảnh báo mã nguồn mở được phát triển bởi SoundCloud. Nó chuyên thu thập các metrics (số liệu) từ các mục tiêu cấu hình, lưu trữ chúng và cho phép bạn truy vấn dữ liệu này thông qua một ngôn ngữ linh hoạt gọi là PromQL. Prometheus nổi bật với khả năng pull metrics chủ động, mô hình dữ liệu đa chiều mạnh mẽ và khả năng tích hợp rộng rãi.
Node Exporter là gì?
Node Exporter là một thành phần quan trọng trong hệ sinh thái Prometheus. Nó là một ứng dụng nhỏ gọn chạy trên máy chủ (trong trường hợp này là VPS Linux) và có nhiệm vụ thu thập các thông tin về hệ điều hành như CPU, bộ nhớ, dung lượng đĩa, mạng… Sau đó, Node Exporter sẽ hiển thị các metrics này dưới một định dạng mà Prometheus có thể hiểu và thu thập được.
Tại sao cần giám sát VPS Linux bằng Prometheus và Node Exporter?
Việc giám sát VPS bằng Prometheus và Node Exporter mang lại nhiều lợi ích thiết thực:
- Phát hiện sớm vấn đề: Nhanh chóng nhận biết các bất thường về tài nguyên (CPU, RAM cạn kiệt, ổ đĩa đầy) trước khi chúng gây ra sự cố nghiêm trọng.
- Tối ưu hiệu suất: Theo dõi các chỉ số hiệu năng giúp bạn xác định được các nút thắt cổ chai và tối ưu hóa ứng dụng, dịch vụ.
- Lập kế hoạch tài nguyên: Dựa vào dữ liệu lịch sử, bạn có thể dự đoán và lên kế hoạch nâng cấp tài nguyên VPS kịp thời.
- Cảnh báo tức thì: Tích hợp với Alertmanager (một thành phần khác của Prometheus) để nhận thông báo khi có sự cố xảy ra.
Chuẩn bị
Trước khi bắt đầu, hãy đảm bảo VPS của bạn đáp ứng các yêu cầu sau:
- Hệ điều hành: Linux (Ubuntu 20.04+, CentOS 7+ hoặc tương đương).
- Quyền truy cập: Quyền
root
hoặc người dùng có quyềnsudo
. - Cổng cần mở:
- Cổng 9090: Dành cho Prometheus Server.
- Cổng 9100: Dành cho Node Exporter.
Bạn cần đảm bảo các cổng này được mở trong tường lửa của VPS (ví dụ:ufw
trên Ubuntu hoặcfirewalld
trên CentOS). - Ví dụ mở cổng với UFW (Ubuntu):
sudo ufw allow 9090/tcp
sudo ufw allow 9100/tcp
sudo ufw reload
-
- Ví dụ mở cổng với Firewalld (CentOS):
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --permanent --add-port=9100/tcp
sudo firewall-cmd --reload
Cài đặt Node Exporter trên VPS Linux
Đầu tiên, chúng ta sẽ cài đặt Node Exporter trên VPS để nó có thể thu thập các metrics hệ thống.
Tải về Node Exporter
Truy cập trang GitHub chính thức của Node Exporter để tìm phiên bản ổn định mới nhất. Bạn có thể sử dụng wget
để tải trực tiếp về VPS:
# Tạo thư mục để lưu trữ các file tải về
mkdir -p /opt/prometheus/temp && cd /opt/prometheus/temp
# Tải về phiên bản Node Exporter mới nhất (kiểm tra phiên bản mới nhất trên GitHub)
# Phiên bản mới nhất hiện tại là 1.9.1
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
Lưu ý: Luôn kiểm tra và thay thế v1.9.1
bằng phiên bản Node Exporter mới nhất tại thời điểm bạn thực hiện tại Node Exporter Releases.
Giải nén và cấu hình
Sau khi tải về, chúng ta sẽ giải nén và di chuyển file thực thi đến một vị trí phù hợp, đồng thời tạo một người dùng riêng cho Node Exporter để tăng cường bảo mật.
# Giải nén file đã tải về
tar xvfz node_exporter-1.9.1.linux-amd64.tar.gz
# Di chuyển file thực thi node_exporter vào /usr/local/bin
sudo mv node_exporter-1.9.1.linux-amd64/node_exporter /usr/local/bin/
# Xóa thư mục tạm thời
rm -rf node_exporter-1.9.1.linux-amd64/
# Tạo người dùng hệ thống node_exporter (không có quyền đăng nhập)
sudo useradd -rs /bin/false node_exporter
Tạo Service Unit cho Node Exporter (Systemd)
Để Node Exporter có thể chạy như một dịch vụ nền và tự động khởi động cùng hệ thống, chúng ta sẽ tạo một file service unit cho Systemd:
sudo nano /etc/systemd/system/node_exporter.service
Thêm nội dung sau vào file:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
User=node_exporter
vàGroup=node_exporter
: Đảm bảo Node Exporter chạy dưới người dùngnode_exporter
mà chúng ta đã tạo.ExecStart=/usr/local/bin/node_exporter
: Chỉ định đường dẫn đến file thực thi của Node Exporter.
Lưu file và thoát (Ctrl+X, Y, Enter).
Khởi động và kiểm tra trạng thái Node Exporter
Bây giờ, chúng ta sẽ tải lại cấu hình Systemd, khởi động Node Exporter và kiểm tra trạng thái của nó:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter # Tự động khởi động cùng hệ thống
sudo systemctl status node_exporter
Nếu mọi thứ đều đúng, bạn sẽ thấy trạng thái active (running)
.
Kiểm tra Metrics của Node Exporter
Để xác nhận Node Exporter đang hoạt động và cung cấp metrics, bạn có thể truy cập địa chỉ sau trên trình duyệt hoặc sử dụng curl
từ một máy khác (hoặc trên chính VPS nếu bạn có trình duyệt terminal):
curl http://<IP_VPS_Của_Bạn>:9100/metrics

Node Exporter
Bạn sẽ thấy một danh sách dài các metrics về hệ thống của VPS. Điều này chứng tỏ Node Exporter đã sẵn sàng để Prometheus thu thập dữ liệu.
Cài đặt Prometheus trên VPS Linux
Sau khi Node Exporter đã hoạt động, chúng ta sẽ cài đặt Prometheus Server để thu thập và lưu trữ các metrics đó.
Tải về Prometheus Server
Truy cập trang GitHub chính thức của Prometheus để tìm phiên bản ổn định mới nhất.
# Quay trở lại thư mục tạm
cd /opt/prometheus/temp
# Tải về phiên bản Prometheus mới nhất (kiểm tra phiên bản mới nhất trên GitHub)
# Phiên bản mới nhất hiện tại là 3.4.0
wget https://github.com/prometheus/prometheus/releases/download/v3.4.0/prometheus-3.4.0.linux-amd64.tar.gz
Lưu ý: Luôn kiểm tra và thay thế v3.4.0
bằng phiên bản Prometheus Server mới nhất tại thời điểm bạn thực hiện tại Prometheus Releases.
Giải nén và cấu hình
Tương tự như Node Exporter, chúng ta sẽ giải nén, di chuyển file và tạo các thư mục cần thiết:
# Giải nén file đã tải về
tar xvfz prometheus-3.4.0.linux-amd64.tar.gz
# Tạo thư mục cho Prometheus binaries
sudo mkdir -p /usr/local/bin/prometheus
# Di chuyển các file thực thi
sudo mv prometheus-3.4.0.linux-amd64/{prometheus,promtool} /usr/local/bin/prometheus/
# Tạo thư mục cấu hình và dữ liệu
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
# Xóa thư mục tạm thời
rm -rf prometheus-3.4.0.linux-amd64/
# Tạo người dùng hệ thống prometheus (không có quyền đăng nhập)
sudo useradd -rs /bin/false prometheus
# Gán quyền sở hữu cho thư mục cấu hình và dữ liệu
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
Cấu hình file prometheus.yml
Đây là bước quan trọng nhất để Prometheus biết cách thu thập metrics. Chúng ta sẽ tạo file cấu hình chính cho Prometheus:
sudo nano /etc/prometheus/prometheus.yml
Dán nội dung sau vào file. File này sẽ cấu hình Prometheus để tự giám sát chính nó và giám sát Node Exporter trên cùng VPS của bạn.
global:
scrape_interval: 15s # Khoảng thời gian Prometheus thu thập metrics
evaluation_interval: 15s # Khoảng thời gian Prometheus đánh giá các luật cảnh báo
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] # Prometheus tự giám sát chính nó
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # Giám sát Node Exporter trên cùng VPS
# Nếu Node Exporter của bạn nằm trên một VPS khác, thay thế 'localhost' bằng IP của VPS đó.
# Ví dụ: - targets: ['192.168.1.100:9100']
global
: Chứa các thiết lập chung cho Prometheus.scrape_interval
: Quy định khoảng thời gian Prometheus sẽ “pull” (thu thập) dữ liệu từ các mục tiêu. Ở đây là 15 giây.evaluation_interval
: Quy định khoảng thời gian Prometheus đánh giá các quy tắc cảnh báo.
scrape_configs
: Đây là nơi bạn định nghĩa các mục tiêu mà Prometheus sẽ giám sát.job_name: 'prometheus'
: Định nghĩa một công việc giám sát cho chính Prometheus server.targets: ['localhost:9090']
: Mục tiêu là Prometheus server đang chạy trên cổng 9090.
job_name: 'node_exporter'
: Định nghĩa một công việc giám sát cho Node Exporter.targets: ['localhost:9100']
: Mục tiêu là Node Exporter đang chạy trên cổng 9100. Nếu Node Exporter của bạn ở trên một VPS khác, bạn sẽ thay thế localhost bằng địa chỉ IP của VPS đó.
Lưu file và thoát.
Tạo Service Unit cho Prometheus (Systemd)
Để Prometheus Server cũng chạy như một dịch vụ, chúng ta sẽ tạo file service unit:
sudo nano /etc/systemd/system/prometheus.service
Thêm nội dung sau vào file:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
ExecStart
: Chỉ định đường dẫn đến file thực thi của Prometheus và các tham số khởi động:--config.file
: Đường dẫn đến fileprometheus.yml
.--storage.tsdb.path
: Đường dẫn nơi Prometheus lưu trữ dữ liệu.
User=prometheus
vàGroup=prometheus
: Đảm bảo Prometheus chạy dưới người dùngprometheus
.
Lưu file và thoát.
Khởi động và kiểm tra trạng thái Prometheus
Tương tự như Node Exporter, chúng ta sẽ tải lại cấu hình Systemd, khởi động Prometheus và kiểm tra trạng thái:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus # Tự động khởi động cùng hệ thống
sudo systemctl status prometheus
Nếu mọi thứ đều đúng, bạn sẽ thấy trạng thái active (running).
Truy cập và khám phá giao diện Prometheus Web UI
Bây giờ Prometheus Server đã hoạt động, bạn có thể truy cập giao diện web của nó để kiểm tra các mục tiêu giám sát và truy vấn dữ liệu.
Truy cập giao diện
Mở trình duyệt web của bạn và truy cập địa chỉ sau:
http://<IP_VPS_Của_Bạn>:9090
Bạn sẽ thấy giao diện chính của Prometheus.
Kiểm tra Targets
Trên giao diện Prometheus, điều hướng đến mục “Status” ở thanh điều hướng trên cùng, sau đó chọn “Targets”.

Prometheus Targets
Bạn sẽ thấy hai mục tiêu (targets) đã được cấu hình trong prometheus.yml
:
prometheus
: Trạng thái sẽ làUP
(xanh lá cây), nghĩa là Prometheus đang tự giám sát chính nó.node_exporter
: Trạng thái cũng sẽ làUP
, nghĩa là Prometheus đã kết nối thành công và đang thu thập metrics từ Node Exporter trên VPS của bạn.
Sử dụng PromQL để truy vấn dữ liệu
Prometheus cung cấp một ngôn ngữ truy vấn mạnh mẽ gọi là PromQL. Trên giao diện Prometheus, bạn có thể sử dụng tab “Graph” để nhập các truy vấn PromQL và xem biểu đồ dữ liệu.
Một số ví dụ truy vấn PromQL cơ bản:
- Kiểm tra tổng số giây CPU đã sử dụng:
node_cpu_seconds_total
- Kiểm tra dung lượng bộ nhớ khả dụng (bytes):
node_memory_MemAvailable_bytes
- Kiểm tra số lượng kết nối TCP đang mở:
node_netstat_Tcp_CurrEstab
- Tỷ lệ sử dụng CPU (ví dụ, CPU User):
100 * (1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])))
Đây là một ví dụ nâng cao hơn để tính toán tỷ lệ sử dụng CPU trung bình trong 5 phút.
Bạn có thể khám phá thêm các metrics khác bằng cách gõ và sử dụng tính năng tự động gợi ý trên giao diện Prometheus.
Kết luận
Chúc mừng! Bạn đã cài đặt thành công Prometheus và Node Exporter để giám sát VPS Linux của mình. Giờ đây, bạn đã có một nền tảng vững chắc để theo dõi hiệu suất hệ thống và phát hiện sớm các vấn đề.
Để nâng cao khả năng giám sát, bạn có thể xem xét các bước tiếp theo:
- Cài đặt Grafana: Trực quan hóa dữ liệu được thu thập bởi Prometheus bằng các biểu đồ đẹp mắt và bảng điều khiển tùy chỉnh. Grafana sẽ giúp bạn dễ dàng theo dõi hiệu suất hệ thống một cách trực quan hơn.
- Thiết lập cảnh báo với Alertmanager: Cấu hình Prometheus để gửi cảnh báo qua email, Slack, Telegram… khi các ngưỡng metrics vượt quá giới hạn cho phép.
Hệ thống giám sát này sẽ là công cụ đắc lực giúp bạn quản lý và duy trì VPS của mình một cách hiệu quả.
Nguồn tham khảo
- Trang chủ Prometheus: https://prometheus.io/
- GitHub Node Exporter: https://github.com/prometheus/node_exporter
- Tài liệu PromQL: https://prometheus.io/docs/prometheus/latest/querying/basics/