Prometheus và Grafana cơ bản: dựng dashboard giám sát bằng Docker

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Prometheus và Grafana là cặp đôi phổ biến trong giám sát hệ thống mã nguồn mở. Một bên thu thập và lưu số đo, một bên vẽ biểu đồ đẹp mắt. Với Docker Compose, bạn có thể dựng cả hai trên máy của mình trong vài phút để làm quen.

Vai trò của từng thành phần

  • Prometheus: định kỳ truy cập (scrape) các điểm cuối cung cấp số đo, lưu thành chuỗi dữ liệu theo thời gian, hỗ trợ truy vấn bằng ngôn ngữ PromQL và có thể gắn luật cảnh báo.
  • Exporter: chương trình nhỏ phơi bày số đo của một hệ thống ở dạng Prometheus đọc được. Node Exporter cung cấp số đo về máy Linux như CPU, RAM, đĩa, mạng.
  • Grafana: công cụ trực quan hóa, kết nối nhiều nguồn dữ liệu (trong đó có Prometheus) và tạo dashboard.

Điểm đặc trưng của Prometheus là mô hình kéo (pull): nó chủ động đi lấy số đo thay vì chờ ứng dụng đẩy lên.

Dựng môi trường thử với Docker Compose

Tạo thư mục có file compose.yaml:

services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - '9090:9090'
  node-exporter:
    image: prom/node-exporter
  grafana:
    image: grafana/grafana
    ports:
      - '3000:3000'
    volumes:
      - grafanadata:/var/lib/grafana

volumes:
  grafanadata:

Và file cấu hình prometheus.yml cạnh nó:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
  - job_name: node
    static_configs:
      - targets: ['node-exporter:9100']

Khai báo hai nơi cần thu thập: chính Prometheus và Node Exporter (gọi theo tên dịch vụ trong Compose, cổng mặc định 9100). Khởi động bằng docker compose up -d. Trong môi trường Docker, Node Exporter đo dựa trên container nên số liệu có thể chưa phản ánh đầy đủ máy chủ thật; để giám sát máy thật bạn cài nó trực tiếp trên máy đó.

Làm quen với giao diện Prometheus

Mở http://localhost:9090, vào mục Status và Targets để kiểm tra các nguồn đã ở trạng thái UP chưa. Sau đó thử vài truy vấn PromQL ở tab Graph:

up
node_memory_MemAvailable_bytes
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Truy vấn up cho biết nguồn nào đang sống. Truy vấn cuối tính phần trăm CPU đang dùng: rate tính tốc độ tăng trong 5 phút, lấy tỉ lệ thời gian rảnh rồi lấy 100 trừ đi.

Kết nối Grafana

  1. Mở http://localhost:3000 và đăng nhập bằng tài khoản mặc định theo tài liệu của Grafana; hệ thống sẽ yêu cầu đổi mật khẩu.
  2. Vào Connections, thêm nguồn dữ liệu kiểu Prometheus với địa chỉ http://prometheus:9090.
  3. Tạo dashboard mới, thêm panel và dán truy vấn PromQL vào.
  4. Có thể nhập dashboard dựng sẵn cho Node Exporter từ kho dashboard cộng đồng của Grafana để khỏi phải tự vẽ từng biểu đồ.

Thêm cảnh báo

Biểu đồ đẹp mà không ai nhìn thì vô ích. Hãy cấu hình cảnh báo cho những điều cần hành động ngay, ví dụ ổ đĩa sắp đầy hay dịch vụ ngừng phản hồi. Prometheus có luật cảnh báo, và thường kết hợp Alertmanager để gửi thông báo; Grafana cũng có hệ thống cảnh báo riêng.

Giám sát ứng dụng của chính bạn

Hầu hết ngôn ngữ đều có thư viện client của Prometheus để ứng dụng tự phơi bày số đo, thường ở đường dẫn /metrics. Bạn có thể đếm số yêu cầu, đo thời gian xử lý, theo dõi số tác vụ trong hàng đợi. Thêm một mục mới vào scrape_configs là Prometheus bắt đầu thu thập.

Lưu ý khi dùng thật

  • Đừng công khai cổng Prometheus và Grafana ra internet nếu chưa có xác thực và HTTPS.
  • Dữ liệu Prometheus mặc định lưu cục bộ, cần volume và chính sách lưu giữ phù hợp.
  • Cẩn thận với nhãn (label) có quá nhiều giá trị khác nhau, như ID người dùng, vì chúng làm phình bộ nhớ.

Kết luận

Chỉ với hai file cấu hình, bạn đã có một hệ thống giám sát hoạt động: thu thập, truy vấn, trực quan hóa. Từ đây hãy thêm số đo của ứng dụng và cảnh báo cho những chỉ số then chốt.

Để thực hành giám sát từ cơ bản đến nâng cao, bạn có thể xem các khóa học liên quan tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment