Cài đặt Prometheus, Grafana và Node Exporter trên Fedora Server: Bộ công cụ giám sát chuẩn thực chiến

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Quản trị server mà không có biểu đồ theo dõi chẳng khác nào lái xe trong sương mù. Chỉ cần một con bot cào dữ liệu làm nghẽn CPU hoặc log ứng dụng phình to bất thường khiến ổ đĩa chạm ngưỡng 100%, hệ thống của bạn sẽ sập ngay trước khi bạn kịp nhận ra.

Để giải quyết bài toán này, bộ ba Prometheus + Grafana + Node Exporter luôn là lựa chọn hàng đầu. Hệ thống này nhẹ, ổn định và cực kỳ dễ mở rộng. Trên một VPS Fedora 2GB RAM cơ bản, toàn bộ stack này chỉ ngốn khoảng 250MB đến 350MB bộ nhớ.

Triển khai nhanh: Dựng stack giám sát trong 5 phút

Nếu bạn muốn chạy thử nghiệm ngay, hãy làm theo các bước rút gọn dưới đây.

1. Cài đặt Node Exporter và Prometheus từ Binary

# Tạo system user riêng biệt, không cấp quyền login shell
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter

# Tải và cấu hình Node Exporter
NODE_VER="1.8.2"
curl -LO https://github.com/prometheus/node_exporter/releases/download/v${NODE_VER}/node_exporter-${NODE_VER}.linux-amd64.tar.gz
tar -xvf node_exporter-${NODE_VER}.linux-amd64.tar.gz
sudo mv node_exporter-${NODE_VER}.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

# Tải và cấu hình Prometheus Server
PROM_VER="2.54.1"
curl -LO https://github.com/prometheus/prometheus/releases/download/v${PROM_VER}/prometheus-${PROM_VER}.linux-amd64.tar.gz
tar -xvf prometheus-${PROM_VER}.linux-amd64.tar.gz
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mv prometheus-${PROM_VER}.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-${PROM_VER}.linux-amd64/promtool /usr/local/bin/
sudo mv prometheus-${PROM_VER}.linux-amd64/consoles /etc/prometheus
sudo mv prometheus-${PROM_VER}.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

2. Cài đặt Grafana qua DNF Repo

Thêm repository chính thức của Grafana Labs để cài đặt và nhận bản cập nhật mới nhất qua DNF:

sudo tee /etc/yum.repos.d/grafana.repo << 'EOF'
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
enabled=1
EOF

sudo dnf install -y grafana
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server

3. Mở Port trên Firewalld

Mặc định Fedora bật firewall rất nghiêm ngặt. Bạn cần mở port 3000 (Grafana) và 9090 (Prometheus Web UI):

sudo firewall-cmd --permanent --add-port={3000/tcp,9090/tcp}
sudo firewall-cmd --reload

Mở trình duyệt và truy cập vào http://<IP_SERVER>:3000. Tài khoản và mật khẩu khởi tạo ban đầu đều là admin / admin.

Hiểu sâu bản chất: Mô hình Pull Model hoạt động ra sao?

Hệ thống giám sát này vận hành theo cơ chế kéo dữ liệu (Pull Model). Ba công cụ chia nhau nhiệm vụ rất rõ ràng:

  • Node Exporter (Người thu thập): Agent này chạy nền trên OS và chỉ ngốn khoảng 15MB RAM. Nó đọc số liệu trực tiếp từ /proc và /sys, sau đó xuất ra HTTP text format tại cổng 9100/metrics.
  • Prometheus (Kho lưu trữ & Xử lý): Cứ mỗi 15 giây, Prometheus sẽ chủ động gọi HTTP request đến Node Exporter để cào (scrape) số liệu về. Dữ liệu được nén và ghi thẳng vào database dạng chuỗi thời gian (TSDB) tại /var/lib/prometheus.
  • Grafana (Giao diện hiển thị): Grafana không lưu trữ dữ liệu hệ thống. Nó chỉ đóng vai trò truy vấn dữ liệu từ Prometheus thông qua ngôn ngữ PromQL và vẽ thành các biểu đồ trực quan.

Tạo Systemd Service cho Node Exporter và Prometheus

Để dịch vụ tự chạy khi khởi động máy và tự restart nếu gặp sự cố, chúng ta cần khai báo systemd unit.

Tạo file /etc/systemd/system/node_exporter.service:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address="127.0.0.1:9100"
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Tiếp theo, tạo file cấu hình cào dữ liệu cho Prometheus tại /etc/prometheus/prometheus.yml:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "fedora_node"
    static_configs:
      - targets: ["localhost:9100"]
        labels:
          instance: "fedora-srv-01"

Tạo file unit /etc/systemd/system/prometheus.service:

[Unit]
Description=Prometheus Server
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --storage.tsdb.retention.time=30d \
  --storage.tsdb.retention.size=10GB \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries \
  --web.enable-lifecycle
Restart=always

[Install]
WantedBy=multi-user.target

Kích hoạt và khởi chạy đồng thời hai dịch vụ:

sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter prometheus
sudo systemctl status node_exporter prometheus --no-pager

Trực quan hóa số liệu và thiết lập cảnh báo

1. Kết nối Data Source và Import Dashboard

  1. Đăng nhập vào Grafana, hệ thống sẽ yêu cầu bạn đổi mật khẩu admin mới.
  2. Tại menu bên trái, vào Connections > Data Sources > bấm Add data source > chọn Prometheus.
  3. Tại ô URL, điền http://localhost:9090, sau đó cuộn xuống cuối trang bấm Save & test. Khi thấy banner xanh lá hiện ra là hoàn tất.
  4. Chuyển sang Dashboards > New > Import. Nhập ID 1860 (dashboard Node Exporter Full phổ biến nhất cộng đồng).
  5. Chọn data source Prometheus vừa tạo và bấm Import.

Ngay lúc này, bạn sẽ thấy toàn bộ tải CPU từng core, dung lượng RAM (Cached, Free, Buffers), tốc độ I/O ổ đĩa NVMe/SSD và lưu lượng card mạng hiển thị theo thời gian thực.

2. Cấu hình Alert Rules cơ bản

Tạo file /etc/prometheus/alert_rules.yml để đón đầu sự cố trước khi server sập:

groups:
  - name: HostAlerts
    rules:
      - alert: HighCpuLoad
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU quá tải trên {{ $labels.instance }}"
          description: "Tải CPU duy trì trên 85% trong suốt 5 phút qua."

      - alert: DiskSpaceLow
        expr: (node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Sắp hết dung lượng phân vùng root: {{ $labels.instance }}"
          description: "Phân vùng / hiện còn trống dưới 15%."

      - alert: NodeDown
        expr: up{job="fedora_node"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Mất kết nối tới máy chủ {{ $labels.instance }}"
          description: "Prometheus không nhận được metric từ Node Exporter quá 1 phút."

Đừng quên khai báo file rule vào /etc/prometheus/prometheus.yml:

rule_files:
  - "alert_rules.yml"

Trước khi áp dụng cấu hình mới, hãy luôn kiểm tra lỗi cú pháp bằng công cụ promtool:

promtool check config /etc/prometheus/prometheus.yml

Kinh nghiệm vận hành thực tế trên Fedora

Reload cấu hình tức thì mà không cần restart

Nhờ cờ --web.enable-lifecycle đã cấu hình ở bước systemd, bạn không cần phải systemctl restart prometheus mỗi khi đổi alert rule. Hãy gửi một POST request:

curl -X POST http://localhost:9090/-/reload

Prometheus sẽ nạp cấu hình mới trong vài mili-giây. Dữ liệu metric đang ghi sẽ không bị gián đoạn dù chỉ 1 giây.

Kiểm soát dung lượng TSDB trên đĩa cứng

Mặc định Prometheus giữ dữ liệu 15 ngày mà không giới hạn dung lượng tổng. Nếu server ghi nhận hàng nghìn metric mỗi giây, ổ cứng rất dễ bị đầy. Hai cờ --storage.tsdb.retention.time=30d và --storage.tsdb.retention.size=10GB sẽ giúp bạn yên tâm: Prometheus tự động xoá block dữ liệu cũ nhất khi chạm 10GB hoặc vượt quá 30 ngày.

Khoá cổng bảo mật cho Node Exporter

Không bao giờ mở cổng 9100 ra Internet ngoài trừ trường hợp có đặt reverse proxy xác thực. Các metric phần cứng, mount point và tên user có thể trở thành nguồn thông tin quý giá cho kẻ tấn công dò quét hệ thống. Cách an toàn nhất là chỉ cho phép Node Exporter lắng nghe trên 127.0.0.1:9100 như hướng dẫn ở trên.

Share: