Triển Khai Hệ Thống Giám Sát Và Cảnh Báo Với Prometheus

Hướng dẫn chi tiết cách cài đặt, cấu hình hệ thống giám sát Prometheus, thiết lập cảnh báo với Alertmanager, và trực quan hóa dữ liệu với Grafana.

Triển Khai Hệ Thống Giám Sát Và Cảnh Báo Với Prometheus

Trong kỷ nguyên số, việc đảm bảo hệ thống hoạt động ổn định là ưu tiên hàng đầu. Prometheus nổi lên như một giải pháp mã nguồn mở hàng đầu dành cho việc thu thập metic, giám sát (monitoring) và cảnh báo (alerting) hệ thống.

Bài viết này sẽ hướng dẫn bạn từng bước từ việc cài đặt cơ bản, bảo mật hệ thống, đến thiết lập cảnh báo và kết hợp với Grafana để trực quan hóa dữ liệu một cách chuyên nghiệp nhất.

1. Cài Đặt Prometheus Server và Node Exporter

Prometheus Server đóng vai trò thu thập và lưu trữ các metric (chỉ số). Trong khi đó, Node Exporter là agent giúp thu thập các thông số tài nguyên hệ thống (như mức sử dụng CPU, RAM, Disk) của máy chủ chứa nó.

Bước 1: Cài đặt các gói cần thiết

Mở terminal trên máy chủ (chạy Ubuntu/Debian) và chạy lệnh sau để cài đặt:

sudo apt update
sudo apt -y install prometheus prometheus-node-exporter

Bước 2: Cấu hình Prometheus cơ bản

Cấu hình mặc định của Prometheus được lưu tại file /etc/prometheus/prometheus.yml. Theo mặc định, Prometheus đã tự động cấu hình để giám sát chính nó và máy chủ đang chạy (thông qua Node Exporter).

Kiểm tra nội dung file cấu hình:

cat /etc/prometheus/prometheus.yml

Để đảm bảo các dịch vụ tự động chạy khi khởi động lại hệ thống, hãy chạy lệnh:

sudo systemctl enable prometheus prometheus-node-exporter
sudo systemctl start prometheus prometheus-node-exporter

Bước 3: Truy cập giao diện Web UI của Prometheus

Mở trình duyệt và truy cập vào địa chỉ: http://<IP_Server_Của_Bạn>:9090/. Bạn sẽ thấy giao diện Web của Prometheus. Tại đây, bạn có thể sử dụng PromQL (Prometheus Query Language) để truy vấn các metric. Ví dụ: nhập node_procs_running vào ô truy vấn và nhấn Execute để xem số lượng tiến trình đang chạy.


2. Bảo Mật Prometheus: Bật HTTPS và Basic Auth

Mặc định, Prometheus Web UI không yêu cầu mật khẩu. Để bảo vệ dữ liệu, chúng ta cần thiết lập xác thực (Basic Auth) và mã hóa đường truyền (HTTPS).

Bước 1: Tạo tài khoản đăng nhập

Sử dụng công cụ htpasswd (thuộc gói apache2-utils) để tạo user admin:

sudo apt -y install apache2-utils
htpasswd -nB admin
# Nhập mật khẩu và copy chuỗi hash tạo ra, ví dụ: admin:$2y$05$6fZn5Gp0...

Bước 2: Chuẩn bị chứng chỉ SSL

Bạn có thể dùng chứng chỉ tự ký (Self-signed) hoặc SSL hợp lệ. Giả sử bạn đã có server.crtserver.key, hãy copy chúng vào thư mục Prometheus:

sudo cp /etc/ssl/private/{server.crt,server.key} /etc/prometheus/
sudo chown prometheus:prometheus /etc/prometheus/{server.crt,server.key}

Bước 3: Tạo file cấu hình bảo mật (web.yml)

Tạo file /etc/prometheus/web.yml:

sudo nano /etc/prometheus/web.yml

Thêm nội dung sau (thay chuỗi hash của bạn vào mục basic_auth_users):

tls_server_config:
  cert_file: server.crt
  key_file: server.key

basic_auth_users:
  admin: $2y$05$6fZn5Gp0JaJFxBUFVu3TFev3rHY8i2qC7IjAybL6VLeD..zbVgUqy

Tiếp theo, cấu hình để Prometheus nạp file web.yml lúc khởi động:

sudo nano /etc/default/prometheus
# Thêm dòng sau vào file:
ARGS="--web.config.file=/etc/prometheus/web.yml"

Bước 4: Cập nhật cấu hình Prometheus và khởi động lại

Mở file /etc/prometheus/prometheus.yml và điều chỉnh lại cấu hình job prometheus như sau:

scrape_configs:
  - job_name: "prometheus"
    scrape_interval: 5s
    scrape_timeout: 5s
    scheme: https
    tls_config:
      cert_file: /etc/prometheus/server.crt
      key_file: /etc/prometheus/server.key
      insecure_skip_verify: true # Đặt true nếu dùng chứng chỉ tự ký
    basic_auth:
      username: 'admin'
      password: 'password' # Thay bằng mật khẩu bạn đã thiết lập

    static_configs:
      - targets: ["localhost:9090"]

Khởi động lại dịch vụ Prometheus để áp dụng thay đổi:

sudo systemctl restart prometheus

Bây giờ bạn có thể truy cập an toàn qua https://<IP_Server>:9090/ và đăng nhập bằng tài khoản admin.


3. Thêm Máy Chủ (Node) Cần Giám Sát

Đối với máy chủ Linux

Cài đặt Node Exporter trên các máy chủ Linux cần giám sát:

sudo apt update
sudo apt -y install prometheus-node-exporter
sudo systemctl enable prometheus-node-exporter
sudo systemctl start prometheus-node-exporter

Quay lại máy chủ Prometheus Server, mở file /etc/prometheus/prometheus.yml và khai báo IP của máy chủ mới vào mục targets của job node:

  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100', 'IP_Của_Node_Linux:9100']

Bạn cũng có thể gom nhóm các server bằng cách tạo một job_name riêng, ví dụ:

  - job_name: 'Monitoring_Servers'
    static_configs:
      - targets: ['node01.srv.techcoban.com:9100']

Đối với máy chủ Windows

  1. Tải và cài đặt file MSI của Windows Exporter từ trang Releases Github.
  2. Sau khi cài đặt, Windows Exporter sẽ chạy trên port 9182. Đảm bảo tường lửa (Windows Firewall) đã mở port này.
  3. Trên Prometheus Server, khai báo IP của máy tính Windows vào /etc/prometheus/prometheus.yml:
  - job_name: 'Windows_Servers'
    static_configs:
      - targets: ['IP_Của_Node_Windows:9182']

Khởi động lại Prometheus (sudo systemctl restart prometheus). Trên Web UI của Prometheus, vào mục Status -> Targets để kiểm tra các node vừa thêm đã xuất hiện trạng thái UP hay chưa.


4. Thiết Lập Hệ Thống Cảnh Báo (Alerting) Qua Email

Prometheus kết hợp với Alertmanager để gửi các thông báo (ví dụ qua Email, Slack, Teams) khi hệ thống gặp sự cố.

Bước 1: Cài đặt Alertmanager

sudo apt -y install prometheus-alertmanager

Bước 2: Cấu hình Alertmanager gửi Email

Đổi tên file cấu hình mặc định để backup và tạo file cấu hình mới:

sudo mv /etc/prometheus/alertmanager.yml /etc/prometheus/alertmanager.yml.bak
sudo nano /etc/prometheus/alertmanager.yml

Nội dung cấu hình SMTP (Giả sử SMTP Server chạy local ở cổng 25):

global:
  smtp_smarthost: 'localhost:25' 
  smtp_require_tls: false
  smtp_from: 'Alertmanager <[email protected]>'
  # smtp_auth_username: 'alertmanager'
  # smtp_auth_password: 'password'

route:
  receiver: 'email-notice'
  group_by: ['alertname', 'Service', 'Stage', 'Role']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

receivers:
- name: 'email-notice'
  email_configs:
  - to: "root@localhost" # Email người nhận cảnh báo

Bước 3: Định nghĩa quy tắc (Rules) cảnh báo

Tạo file rule kiểm tra xem các máy chủ (node-exporter) có đang “sống” hay không. Tạo file /etc/prometheus/alert_rules.yml:

groups:
- name: Instances
  rules:
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Máy chủ {{ $labels.instance }} bị sập"
      description: "{{ $labels.instance }} thuộc job {{ $labels.job }} đã mất kết nối hơn 5 phút."

Sau đó, cấu hình để Prometheus sử dụng Alertmanager và file rule vừa tạo. Mở /etc/prometheus/prometheus.yml và chỉnh sửa:

rule_files:
  - "alert_rules.yml"

alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']

Restart cả hai dịch vụ:

sudo systemctl restart prometheus prometheus-alertmanager
sudo systemctl enable prometheus-alertmanager

Nếu một server bị tắt (node-exporter bị down), sau 5 phút bạn sẽ nhận được một email cảnh báo chi tiết.


5. Trực Quan Hóa Dữ Liệu Với Grafana

Mặc dù Prometheus có sẵn Web UI, nhưng Grafana mới thực sự là công cụ chuẩn công nghiệp để xây dựng các Dashboard giám sát đẹp mắt và đa dạng.

  1. Cài đặt Grafana: Thực hiện cài đặt Grafana trên một máy chủ (có thể cài cùng server Prometheus).
  2. Thêm Data Source:
    • Mở Grafana Dashboard, chọn Connections -> Data Sources ở menu bên trái.
    • Nhấn Add data source và chọn Prometheus.
    • Nhập URL của Prometheus (ví dụ: http://localhost:9090 hoặc HTTPS tương ứng). Nếu đã cài Basic Auth, nhớ điền thông tin đăng nhập trong phần Auth.
    • Bấm Save & Test để xác nhận kết nối thành công.
  3. Tạo Dashboard:
    • Truy cập Dashboard -> Create Dashboard -> Add visualization.
    • Chọn data source Prometheus và nhập query PromQL bạn muốn vẽ đồ thị.
    • Mẹo: Bạn có thể tiết kiệm thời gian bằng cách Import các Dashboard có sẵn của cộng đồng (ví dụ tìm Dashboard Node Exporter Full - ID 1860 trên Grafana Labs).

6. Giám Sát Website và Dịch Vụ Với Blackbox Exporter

Blackbox Exporter cho phép bạn chủ động kiểm tra trạng thái và tốc độ phản hồi của các dịch vụ từ bên ngoài (HTTP/HTTPS cho Website, DNS, TCP, ICMP ping).

Bước 1: Cài đặt Blackbox Exporter trên Node

Giả sử cài trên node02:

sudo apt -y install prometheus-blackbox-exporter
sudo systemctl enable prometheus-blackbox-exporter

File cấu hình tại /etc/prometheus/blackbox.yml đã được định nghĩa sẵn các module thông dụng như http_2xx, tcp_connect, icmp.

Bước 2: Cấu hình Prometheus Server

Mở /etc/prometheus/prometheus.yml trên Prometheus Server và cấu hình các mục tiêu muốn giám sát:

Kiểm tra Ping (ICMP):

  - job_name: 'Blackbox_icmp'
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets:
        - node02.srv.techcoban.com # Domain hoặc IP cần ping
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: node02.srv.techcoban.com:9115 # IP:Port của máy chạy Blackbox Exporter

Bạn cũng có thể thay module icmp bằng ssh_banner (Port 22) hoặc tcp_connect (Ví dụ Port 3306 cho MySQL/MariaDB) để theo dõi các dịch vụ tương ứng.

Lưu file và restart Prometheus:

sudo systemctl restart prometheus

Vào mục Status -> Targets, bạn sẽ thấy các mục tiêu Blackbox mới. Các dữ liệu kiểm tra sẽ nằm trong metric probe_success.


Tổng Kết

Việc triển khai Prometheus, kết hợp cùng AlertmanagerGrafana, mang lại cho doanh nghiệp và đội ngũ DevOps một hệ thống giám sát toàn diện, mạnh mẽ và tin cậy. Chỉ với vài thao tác thiết lập, bạn có thể dễ dàng quản lý tình trạng sức khỏe (Health check) của mọi thành phần hạ tầng: từ máy chủ vật lý, máy ảo Linux/Windows cho đến trạng thái của từng Website và Service cụ thể.

Hy vọng bài hướng dẫn này giúp bạn xây dựng thành công giải pháp giám sát cho hệ thống của mình!

Bình luận

Bài viết liên quan