Triển khai hệ thống giám sát hiệu năng với Prometheus và Grafana

Cài đặt các thành phần cốt lõi

Tải và giải nén các binary cần thiết vào thư mục /opt/monitoring:

sudo mkdir -p /opt/monitoring
cd /opt/monitoring

# Prometheus (v2.54.1)
sudo wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
sudo tar -xzf prometheus-2.54.1.linux-amd64.tar.gz
sudo mv prometheus-2.54.1.linux-amd64 prometheus

# Alertmanager (v0.28.2)
sudo wget https://github.com/prometheus/alertmanager/releases/download/v0.28.2/alertmanager-0.28.2.linux-amd64.tar.gz
sudo tar -xzf alertmanager-0.28.2.linux-amd64.tar.gz
sudo mv alertmanager-0.28.2.linux-amd64 alertmanager

# Node Exporter (v1.9.2)
sudo wget https://github.com/prometheus/node_exporter/releases/download/v1.9.2/node_exporter-1.9.2.linux-amd64.tar.gz
sudo tar -xzf node_exporter-1.9.2.linux-amd64.tar.gz
sudo mv node_exporter-1.9.2.linux-amd64 node_exporter

# Grafana OSS (v11.5.4)
sudo wget https://dl.grafana.com/oss/release/grafana-11.5.4.linux-amd64.tar.gz
sudo tar -xzf grafana-11.5.4.linux-amd64.tar.gz
sudo mv grafana-11.5.4 grafana

Tạo tài khoản dịch vụ cách ly

sudo useradd --system --no-create-home --shell /usr/sbin/nologin monitoring

Phân quyền thư mục

sudo chown -R monitoring:monitoring /opt/monitoring/{prometheus,alertmanager,node_exporter,grafana}
sudo mkdir -p /var/lib/{prometheus,alertmanager}
sudo chown -R monitoring:monitoring /var/lib/{prometheus,alertmanager}

Cấu hình systemd cho Prometheus

sudo tee /etc/systemd/system/prometheus.service << 'EOF'
[Unit]
Description=Prometheus Monitoring System
Wants=network-online.target
After=network-online.target

[Service]
Type=exec
User=monitoring
Group=monitoring
Restart=always
RestartSec=10
ExecStart=/opt/monitoring/prometheus/prometheus \
  --config.file=/opt/monitoring/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --storage.tsdb.retention.time=30d \
  --web.listen-address=:9090 \
  --web.enable-lifecycle \
  --log.level=info

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

Truy cập giao diện web tại: http://192.168.174.131:9090

Cấu hình Alertmanager như một dịch vụ nền

sudo tee /etc/systemd/system/alertmanager.service << 'EOF'
[Unit]
Description=Alertmanager Notification Service
Wants=network-online.target
After=network-online.target

[Service]
Type=exec
User=monitoring
Group=monitoring
Restart=always
RestartSec=10
ExecStart=/opt/monitoring/alertmanager/alertmanager \
  --config.file=/opt/monitoring/alertmanager/alertmanager.yml \
  --storage.path=/var/lib/alertmanager \
  --web.listen-address=:9093 \
  --log.level=info

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now alertmanager

Kết nối Alertmanager với Prometheus

Sửa tệp cấu hình /opt/monitoring/prometheus/prometheus.yml, thêm khối sau vào phần gốc:

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

rule_files:
  - "/opt/monitoring/alertmanager/rules/*.yml"

Tạo thư mục quy tắc và định nghĩa cảnh báo cơ bản:

sudo mkdir -p /opt/monitoring/alertmanager/rules
sudo tee /opt/monitoring/alertmanager/rules/host-down.yml << 'EOF'
groups:
- name: "infrastructure-alerts"
  rules:
  - alert: HostUnreachable
    expr: up == 0
    for: "90s"
    labels:
      severity: "high"
    annotations:
      summary: "Máy chủ {{ $labels.instance }} không phản hồi"
      description: "Cụm metrics từ máy chủ đã bị gián đoạn trong hơn 90 giây."
EOF

sudo chown -R monitoring:monitoring /opt/monitoring/alertmanager/rules

Xác thực cấu hình và khởi động lại

/opt/monitoring/prometheus/promtool check config /opt/monitoring/prometheus/prometheus.yml
sudo systemctl restart prometheus

Giao diện Alertmanager: http://192.168.174.131:9093

Triển khai Node Exporter để thu thập chỉ số hệ thống

sudo tee /etc/systemd/system/node-exporter.service << 'EOF'
[Unit]
Description=Node Exporter for Hardware Metrics
Wants=network-online.target
After=network-online.target

[Service]
Type=exec
User=monitoring
Group=monitoring
Restart=on-failure
RestartSec=5
ExecStart=/opt/monitoring/node_exporter/node_exporter \
  --web.listen-address=:9100 \
  --log.level=warn

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now node-exporter

Bổ sung job quét cho Node Exporter trong Prometheus

Thêm vào phần scrape_configs trong prometheus.yml:

- job_name: "server-metrics"
  scrape_interval: 15s
  static_configs:
    - targets: ["localhost:9100"]
      labels:
        env: "production"
        role: "backend"

Kiểm tra và áp dụng: sudo systemctl restart prometheus. Kiểm tra trạng thái đích tại /targets.

Cấu hình Grafana làm bảng điều khiển trực quan

sudo tee /etc/systemd/system/grafana.service << 'EOF'
[Unit]
Description=Grafana Dashboard Platform
Wants=network-online.target
After=network-online.target

[Service]
Type=exec
User=monitoring
Group=monitoring
Restart=on-failure
RestartSec=10
Environment="GF_PATHS_CONFIG=/opt/monitoring/grafana/conf/defaults.ini"
Environment="GF_PATHS_DATA=/var/lib/grafana"
Environment="GF_PATHS_LOGS=/var/log/grafana"
ExecStart=/opt/monitoring/grafana/bin/grafana-server

[Install]
WantedBy=multi-user.target
EOF

sudo mkdir -p /var/lib/grafana /var/log/grafana
sudo chown -R monitoring:monitoring /var/{lib,log}/grafana
sudo systemctl daemon-reload
sudo systemctl enable --now grafana

Truy cập tại: http://192.168.174.131:3000 — đăng nhập bằng admin/admin, đổi mật khẩu ngay lần đầu.

Kết nối nguồn dữ liệu Prometheus vào Grafana

  1. Vào Connections → Data Sources → Add data source
  2. Chọn Prometheus, nhập URL: http://localhost:9090
  3. Lưu và kiểm tra kết nối (Save & test)
  4. Nhập dashboard ID 12633 (Linux Host Details) hoặc 4701 (JVM Micrometer) tại Dashboard → Import

Mở rộng giám sát ứng dụng Spring Boot

Thêm các dependency sau vào pom.xml:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Cấu hình application.yml:

management:
  endpoint:
    health:
      show-details: when_authorized
  endpoints:
    web:
      exposure:
        include: health,prometheus
      base-path: /manage
  prometheus:
    metrics:
      export:
        enabled: true

spring:
  security:
    user:
      name: monitor
      password: "P@ssw0rd2024"

Thêm job quét đặc tả trong prometheus.yml:

- job_name: "springboot-app"
  scrape_interval: 10s
  metrics_path: "/manage/prometheus"
  basic_auth:
    username: "monitor"
    password: "P@ssw0rd2024"
  static_configs:
    - targets: ["192.168.174.131:8080"]
      labels:
        app: "payment-service"
        version: "v2.1"

Khởi động lại Prometheus để áp dụng cấu hình mới.

Thẻ: prometheus Grafana alertmanager node-exporter spring-boot-actuator

Đăng vào ngày 27 tháng 6 lúc 14:27