#!/bin/bash # setup-monitoring.sh # Sets up Prometheus scraping and Grafana dashboards for Proxmox set -euo pipefail # Colors GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Configuration PROMETHEUS_NAMESPACE="${PROMETHEUS_NAMESPACE:-monitoring}" GRAFANA_NAMESPACE="${GRAFANA_NAMESPACE:-monitoring}" DASHBOARD_DIR="${DASHBOARD_DIR:-./infrastructure/monitoring/dashboards}" log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" } error() { echo -e "${RED}[ERROR]${NC} $1" >&2 exit 1 } warn() { echo -e "${YELLOW}[WARN]${NC} $1" } info() { echo -e "${BLUE}[INFO]${NC} $1" } check_prerequisites() { log "Checking prerequisites..." if ! command -v kubectl &> /dev/null; then error "kubectl is required but not installed" fi if ! kubectl cluster-info &> /dev/null; then error "Cannot connect to Kubernetes cluster" fi log "✓ Prerequisites check passed" } create_prometheus_service_monitor() { log "Creating Prometheus ServiceMonitor for Proxmox exporters..." kubectl apply -f - < 90 for: 10m labels: severity: warning annotations: summary: "Proxmox node CPU usage is high" description: "Node {{ \$labels.node }} CPU usage is {{ \$value }}%" - alert: ProxmoxHighMemory expr: pve_node_memory_usage > 90 for: 10m labels: severity: warning annotations: summary: "Proxmox node memory usage is high" description: "Node {{ \$labels.node }} memory usage is {{ \$value }}%" - alert: ProxmoxStorageFull expr: pve_storage_usage > 90 for: 5m labels: severity: critical annotations: summary: "Proxmox storage is nearly full" description: "Storage {{ \$labels.storage }} on node {{ \$labels.node }} is {{ \$value }}% full" EOF log "✓ Alert rules created" } main() { echo "" echo "╔══════════════════════════════════════════════════════════════╗" echo "║ Proxmox Monitoring Setup ║" echo "╚══════════════════════════════════════════════════════════════╝" echo "" check_prerequisites echo "" create_prometheus_service_monitor echo "" create_prometheus_scrape_config echo "" create_alerts echo "" import_grafana_dashboards echo "" create_grafana_datasource echo "" log "Monitoring setup complete!" echo "" info "Next steps:" info "1. Verify Prometheus is scraping: kubectl port-forward -n ${PROMETHEUS_NAMESPACE} svc/prometheus 9090:9090" info "2. Import Grafana dashboards via UI" info "3. Configure alert notifications" info "4. Verify metrics are being collected" } main "$@"