Triển khai Prometheus và Grafana trên Proxmox
Cài đặt Prometheus qua Docker Compose
Tạo thư mục chứa cấu hình Prometheus trên node Proxmox (thường là node quản lý hoặc node riêng biệt chạy Docker).
Việc này giúp cô lập stack giám sát khỏi OS host, dễ dàng nâng cấp và quản lý version mà không ảnh hưởng đến hệ điều hành Proxmox.
Chạy lệnh sau để tạo thư mục và file cấu hình:
sudo mkdir -p /opt/monitoring/prometheus
sudo chown $USER:$USER /opt/monitoring/prometheus
Tạo file cấu hình `prometheus.yml` với nội dung hoàn chỉnh để scrape các target mặc định:
cat > /opt/monitoring/prometheus/prometheus.yml
File `prometheus.yml` đã được tạo tại `/opt/monitoring/prometheus/` với cấu hình scrape 4 job: bản thân Prometheus, Node Exporter, Proxmox (giả định IP 192.168.1.10), và AWS Cloudwatch Exporter.
Triển khai Docker Compose cho Prometheus và Grafana
Sử dụng Docker Compose để deploy đồng thời Prometheus, Node Exporter, và Grafana trên cùng một host Proxmox.
Docker Compose giúp quản lý mạng nội bộ (internal network) để các container có thể giao tiếp qua tên service thay vì IP, đơn giản hóa việc cấu hình scraping.
Tạo file `docker-compose.yml` tại thư mục `/opt/monitoring/prometheus/`:
cat > /opt/monitoring/prometheus/docker-compose.yml
File `docker-compose.yml` đã sẵn sàng với 3 service liên kết qua mạng `monitoring-net` và lưu trữ persistent data.
Triển khai Grafana Provisioning
Cấu hình tự động (Provisioning) cho Grafana để tự động thêm datasource Prometheus và import dashboard mẫu.
Tránh phải cấu hình thủ công qua web UI mỗi khi container restart hoặc redeploy, đảm bảo trạng thái đồng bộ với GitOps.
Tạo thư mục provisioning và file cấu hình datasource:
mkdir -p /opt/monitoring/prometheus/grafana/provisioning/datasources
cat > /opt/monitoring/prometheus/grafana/provisioning/datasources/prometheus.yml
File `prometheus.yml` trong thư mục provisioning đã được tạo, Grafana sẽ tự động thêm datasource này khi khởi động.
Chạy lệnh để khởi động toàn bộ stack giám sát:
cd /opt/monitoring/prometheus
sudo docker-compose up -d
Các container Prometheus, Node Exporter và Grafana sẽ chạy ở background. Bạn có thể verify bằng lệnh `docker ps` để thấy 3 container trạng thái Up.
Cấu hình scraping metrics từ Proxmox và AWS
Cấu hình Node Exporter cho Proxmox
Triển khai Node Exporter trực tiếp trên host Proxmox (không qua Docker) để thu thập metrics sâu hơn của hệ thống (CPU, RAM, Disk I/O, Network) ở cấp độ host.
Việc cài đặt trực tiếp trên host đảm bảo Prometheus có thể scrape được các metrics của bản thân Proxmox Cluster, bao gồm cả các container LXC và VM đang chạy.
Tải và cài đặt Node Exporter trên Proxmox:
curl -sS https://packagecloud.io/install/repositories/prometheus/prometheus/gpgkey | sudo apt-key add -
echo "deb [signed-by=/usr/share/keyrings/prometheusprometheus.gpg] https://packagecloud.io/prometheus/prometheus/ubuntu/ focal main" | sudo tee /etc/apt/sources.list.d/prometheus.list
sudo apt update
sudo apt install prometheus-node-exporter
Node Exporter đã được cài đặt và chạy tự động qua systemd. Verify bằng lệnh `systemctl status prometheus-node-exporter`.
Triển khai AWS Cloudwatch Exporter
Triển khai `prometheus-aws-cloudwatch-exporter` để kéo metrics từ AWS EC2, RDS, và S3 về Prometheus local.
Tool này đóng vai trò cầu nối, query API Cloudwatch của AWS và chuyển đổi thành format metrics mà Prometheus có thể scrape được.
Tạo file cấu hình AWS với credentials (đã được set trong biến môi trường hoặc file `~/.aws/credentials`):
cat > /opt/monitoring/prometheus/aws_exporter.yml
File cấu hình AWS đã được tạo. Lưu ý thay thế `your-bucket-name` bằng tên bucket thực tế của bạn.
Chạy AWS Exporter trong Docker Compose bằng cách thêm service vào file `docker-compose.yml` (hoặc tạo file mới `aws-exporter.yml` và compose lên):
cat >> /opt/monitoring/prometheus/docker-compose.yml
Service `aws_cloudwatch_exporter` đã được thêm vào docker-compose. Chạy `sudo docker-compose up -d` để apply thay đổi.
Cập nhật Prometheus để scrape AWS và Proxmox Host
Cập nhật file `prometheus.yml` để thêm target cho Proxmox host (Node Exporter trực tiếp) và AWS Exporter.
Đảm bảo Prometheus biết đường dẫn chính xác để scrape metrics từ cả Proxmox host và AWS Exporter container.
Sửa file `/opt/monitoring/prometheus/prometheus.yml`:
cat > /opt/monitoring/prometheus/prometheus.yml
File `prometheus.yml` đã được cập nhật. Lưu ý: Phần `proxmox_api` ở đây là giả định bạn đã cài đặt prometheus exporter riêng cho API Proxmox, nếu chưa, hãy bỏ qua job này và chỉ giữ `node_proxmox`.
Reload cấu hình Prometheus mà không cần restart container:
curl -X POST http://localhost:9090/-/reload
Prometheus sẽ reload cấu hình. Truy cập `http://:9090/targets` để kiểm tra trạng thái các job (UP/Green).
Tạo dashboard thống nhất để theo dõi sức khỏe hệ thống
Import Dashboard Multi-Cloud
Sử dụng tính năng provisioning của Grafana để tự động import dashboard tổng hợp cho Multi-Cloud.
Thay vì import thủ công từng dashboard qua UI, chúng ta dùng file YAML để đảm bảo dashboard luôn hiện diện sau khi redeploy hoặc disaster recovery.
Tạo file dashboard provisioning:
mkdir -p /opt/monitoring/prometheus/grafana/provisioning/dashboards
cat > /opt/monitoring/prometheus/grafana/provisioning/dashboards/multi-cloud.yml
Tạo thư mục dashboards và file cấu hình provider để Grafana tự động scan thư mục này.
Tạo thư mục chứa dashboard JSON (dùng dashboard mẫu cho Node Exporter và AWS):
mkdir -p /opt/monitoring/prometheus/grafana/dashboards
# Tải dashboard Node Exporter Full (ID 1860)
curl -s https://raw.githubusercontent.com/grafana/dashboards/main/1860.json > /opt/monitoring/prometheus/grafana/dashboards/node_exporter_full.json
# Tải dashboard AWS EC2 (ID 7907)
curl -s https://raw.githubusercontent.com/grafana/dashboards/main/7907.json > /opt/monitoring/prometheus/grafana/dashboards/aws_ec2.json
2 file JSON dashboard đã được tải về thư mục `dashboards`. Grafana sẽ tự động import chúng khi restart hoặc khi file thay đổi.
Restart Grafana để apply dashboard provisioning:
sudo docker-compose restart grafana
Grafana khởi động lại và tự động thêm dashboard "Node Exporter Full" và "AWS EC2" vào folder "Hybrid Cloud".
Tùy chỉnh Dashboard Proxmox
Tạo dashboard thủ công cho Proxmox vì không có template JSON mặc định cho Proxmox API metrics.
Dashboard này sẽ hiển thị CPU, RAM, và Disk Usage của các VM và Container trên Proxmox Cluster.
Truy cập Grafana Web UI (`http://:3000`), tạo dashboard mới, và thêm panel với Query sau:
# CPU Usage % per VM/Container
sum(rate(node_cpu_seconds_total{mode!="idle", instance=~"192.168.1.10:9100"}[5m])) by (instance) * 100
# Memory Usage %
(node_memory_MemTotal_bytes{instance=~"192.168.1.10:9100"} - node_memory_MemAvailable_bytes{instance=~"192.168.1.10:9100"}) / node_memory_MemTotal_bytes{instance=~"192.168.1.10:9100"} * 100
# Disk Usage %
(1 - (node_filesystem_avail_bytes{mountpoint="/", instance=~"192.168.1.10:9100"} / node_filesystem_size_bytes{mountpoint="/", instance=~"192.168.1.10:9100"})) * 100
Dashboard Proxmox đã được tạo với 3 panel hiển thị CPU, Memory và Disk usage của host Proxmox.
Verify kết quả Dashboard
Truy cập Grafana tại `http://:3000` (user: admin, pass: admin123).
Đảm bảo bạn thấy folder "Hybrid Cloud" và có thể xem metrics từ cả Proxmox (Node Exporter) và AWS (EC2 Exporter) trên các dashboard tương ứng.
Cấu hình cảnh báo tự động khi có sự cố
Cấu hình Alertmanager
Triển khai Alertmanager để xử lý các cảnh báo từ Prometheus và gửi thông báo qua Email hoặc Slack.
Prometheus chỉ phát hiện sự cố, Alertmanager chịu trách nhiệm group, inhibit, và route cảnh báo đến đúng người nhận.
Tạo file cấu hình Alertmanager:
mkdir -p /opt/monitoring/prometheus/alertmanager
cat > /opt/monitoring/prometheus/alertmanager/alertmanager.yml
File `alertmanager.yml` đã được tạo. Thay thế thông tin SMTP và email bằng thông tin thực tế của bạn.
Thêm service Alertmanager vào `docker-compose.yml`:
cat >> /opt/monitoring/prometheus/docker-compose.yml
Chạy `sudo docker-compose up -d` để khởi động Alertmanager.
Viết Rule cảnh báo cho Hybrid Cloud
Tạo file rule YAML chứa các logic cảnh báo cho cả Proxmox và AWS.
Định nghĩa các threshold cụ thể: CPU > 80%, Disk > 90%, hoặc EC2 Instance bị dừng (StatusCheckFailed).
Tạo thư mục rules và file rule:
mkdir -p /opt/monitoring/prometheus/rules
cat > /opt/monitoring/prometheus/rules/hybrid_alerts.yml 90
for: 10m
labels:
severity: critical
annotations:
summary: "Critical Disk Usage on Proxmox"
description: "Disk usage is above 90% on {{ \$labels.instance }}."
- alert: EC2InstanceStatusCheckFailed
expr: aws_cloudwatch_instance_status_check{status="insufficient"} == 1
for: 2m
labels:
severity: critical
annotations:
summary: "EC2 Instance Status Check Failed"
description: "Instance {{ \$labels.instance_id }} in {{ \$labels.region }} is failing status check."
- alert: EC2HighCPU
expr: aws_cloudwatch_cpu_utilization{metric="CPUUtilization"} > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU on AWS EC2"
description: "CPU utilization on {{ \$labels.instance_id }} is above 80%."
EOF
File rule `hybrid_alerts.yml` đã được tạo với 4 rule cảnh báo cho cả Proxmox và AWS.
Link Rule với Prometheus
Cấu hình Prometheus để load file rule vừa tạo.
Chỉnh sửa `prometheus.yml` để thêm tham số `rule_files`.
Cập nhật file `/opt/monitoring/prometheus/prometheus.yml`:
cat > /opt/monitoring/prometheus/prometheus.yml
File `prometheus.yml` đã được cập nhật để load rules và gửi cảnh báo đến Alertmanager.
Reload Prometheus để apply rule mới:
curl -X POST http://localhost:9090/-/reload
Truy cập `http://:9090/alerts` để xem danh sách các rule đã load (trạng thái Pending nếu chưa trigger).
Verify kết quả cảnh báo
Để test cảnh báo, bạn có thể tạo một tình huống giả lập.
Chạy lệnh sau trên Proxmox host để tăng CPU load lên 90% trong 1 phút:
yes > /dev/null & sleep 60; kill %1
Chờ khoảng 5-6 phút, sau đó kiểm tra email hoặc trang `http://:9093` (Alertmanager UI) để xem cảnh báo "HighCPUProxmox" đã được trigger và gửi đi chưa.
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Multi-Cloud Hybrid với Terraform, Crossplane và GitOps trên hạ tầng Proxmox và AWS
« Phần 8: Bảo mật và quản lý truy cập cho nền tảng Multi-Cloud
Phần 10: Troubleshooting nâng cao và các mẹo tối ưu hiệu năng »