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
- Vào Connections → Data Sources → Add data source
- Chọn Prometheus, nhập URL:
http://localhost:9090 - Lưu và kiểm tra kết nối (Save & test)
- Nhập dashboard ID
12633(Linux Host Details) hoặc4701(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.