#!/bin/bash
hostname=$(hostname)

# ==========================================
# Docker 一键监控部署脚本 (Metrics + Logs)
# ==========================================

echo "🚀 开始部署监控服务栈..."

# 1. 清理旧容器 (如果存在)
echo "🧹 清理可能存在的旧容器..."
docker rm -f ${hostname}-prometheus ${hostname}-node-exporter ${hostname}-cadvisor ${hostname}-grafana ${hostname}-loki ${hostname}-promtail 2>/dev/null

# 2. 创建自定义网络 (忽略已存在的报错)
echo "🌐 创建 Docker 网络 (monitor-net)..."
docker network create monitor-net 2>/dev/null || true

# 3. 创建持久化数据卷
echo "💾 创建持久化数据卷..."
docker volume create prometheus-data 2>/dev/null || true
docker volume create grafana-data 2>/dev/null || true
docker volume create loki-data 2>/dev/null || true

# 4. 启动服务
CURRENT_DIR=$(pwd)

echo "📦 1/6 启动 Prometheus..."
docker run -d \
  --name ${hostname}-prometheus \
  --network monitor-net \
  --restart unless-stopped \
  -v "${CURRENT_DIR}/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro" \
  -v prometheus-data:/prometheus \
  prom/prometheus:latest \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/prometheus \
  --storage.tsdb.retention.time=15d

echo "📦 2/6 启动 Node Exporter (宿主机指标)..."
docker run -d \
  --name ${hostname}-node-exporter \
  --pid host \
  --network host \
  --restart unless-stopped \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /:/rootfs:ro \
  prom/node-exporter:latest \
  --path.procfs=/host/proc \
  --path.sysfs=/host/sys \
  --path.rootfs=/rootfs

echo "📦 3/6 启动 cAdvisor (容器指标)..."
docker run -d \
  --name ${hostname}-cadvisor \
  --network monitor-net \
  --restart unless-stopped \
  -p 8080:8080 \
  -v /:/rootfs:ro \
  -v /var/run:/var/run:ro \
  -v /sys:/sys:ro \
  -v /var/lib/docker/:/var/lib/docker:ro \
  gcr.io/cadvisor/cadvisor:latest

echo "📦 4/6 启动 Grafana (可视化面板)..."
docker run -d \
  --name ${hostname}-grafana \
  --network monitor-net \
  --restart unless-stopped \
  -p 3000:3000 \
  -e GF_SECURITY_ADMIN_USER=admin \
  -e GF_SECURITY_ADMIN_PASSWORD=admin \
  -v grafana-data:/var/lib/grafana \
  grafana/grafana-oss:latest

echo "📦 5/6 启动 Loki (日志存储引擎)..."
docker run -d \
  --name ${hostname}-loki \
  --network monitor-net \
  --restart unless-stopped \
  -p 3100:3100 \
  -v "${CURRENT_DIR}/loki/loki-config.yml:/etc/loki/loki-config.yml:ro" \
  -v loki-data:/loki \
  grafana/loki:latest \
  -config.file=/etc/loki/loki-config.yml

echo "📦 6/6 启动 Promtail (日志采集探针)..."
docker run -d \
  --name ${hostname}-promtail \
  --network monitor-net \
  --restart unless-stopped \
  -v /var/lib/docker/containers:/var/lib/docker/containers:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /var/log:/var/log:ro \
  -v "${CURRENT_DIR}/promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro" \
  grafana/promtail:latest \
  -config.file=/etc/promtail/promtail-config.yml

echo "✅ 部署完成！"
echo "👉 Grafana 访问地址: http://<你的服务器IP>:3000 (账号: admin / 密码: admin)"
