#!/bin/bash # Script de inicialización para Suite de Monitoreo # Configura permisos y estructura de directorios para Prometheus, Loki, Tempo y Grafana set -e # Salir si hay errores echo "🚀 Iniciando configuración de Suite de Monitoreo..." # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Función para imprimir mensajes print_status() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[ÉXITO]${NC} $1" } print_warning() { echo -e "${YELLOW}[ADVERTENCIA]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # Verificar que estamos en el directorio correcto if [ ! -f "docker-compose.yml" ]; then print_error "No se encontró docker-compose.yml. Ejecuta este script desde el directorio del proyecto." exit 1 fi # Parar contenedores existentes si están corriendo print_status "Parando contenedores existentes..." docker-compose down 2>/dev/null || true # Eliminar directorio data existente if [ -d "data" ]; then print_status "Eliminando directorio data existente..." rm -rf data/ print_success "Directorio data eliminado" fi # Crear estructura de directorios print_status "Creando estructura de directorios..." mkdir -p data/{prometheus,loki,tempo,grafana} # Crear subdirectorios específicos necesarios mkdir -p data/loki/{chunks,wal,rules} mkdir -p data/tempo/traces mkdir -p data/prometheus/{data,wal} mkdir -p data/grafana/{data,logs,plugins} print_success "Estructura de directorios creada" # Configurar permisos print_status "Configurando permisos..." # Dar permisos amplios temporalmente para permitir que los contenedores configuren sus propios permisos chmod -R 777 data/ print_success "Permisos configurados" # Verificar que Docker esté disponible if ! command -v docker &> /dev/null; then print_error "Docker no está instalado o no está en el PATH" exit 1 fi if ! command -v docker-compose &> /dev/null; then print_error "Docker Compose no está instalado o no está en el PATH" exit 1 fi # Verificar que Docker esté corriendo if ! docker info &> /dev/null; then print_error "Docker no está corriendo. Inicia Docker e intenta de nuevo." exit 1 fi # Iniciar servicios print_status "Iniciando servicios..." docker-compose up -d print_success "Servicios iniciados" # Esperar a que los servicios estén listos print_status "Esperando a que los servicios estén listos..." sleep 5 # Verificar estado de los servicios print_status "Verificando estado de los servicios..." # Función para verificar si un servicio está saludable check_service() { local service_name=$1 local port=$2 local container_name=$3 if docker ps | grep -q "$container_name.*Up"; then print_success "$service_name está ejecutándose correctamente" return 0 else print_warning "$service_name podría tener problemas" echo "Logs de $service_name:" docker logs "$container_name" --tail 5 return 1 fi } # Verificar cada servicio check_service "Prometheus" "9090" "prometheus" check_service "Loki" "3100" "loki" check_service "Tempo" "3200" "tempo" check_service "Grafana" "3000" "grafana" check_service "Alloy" "12345" "alloy" echo "" echo "🎉 ¡Configuración completada!" echo "" echo -e "${GREEN}Servicios disponibles:${NC}" echo -e " 📊 Grafana Dashboard: ${BLUE}http://localhost:3000${NC} (admin/admin123)" echo -e " 📈 Prometheus: ${BLUE}http://localhost:9090${NC}" echo -e " 📋 Loki: ${BLUE}http://localhost:3100${NC}" echo -e " 🔍 Tempo: ${BLUE}http://localhost:3200${NC}" echo -e " 🤖 Alloy UI: ${BLUE}http://localhost:12345${NC}" echo "" echo -e "${GREEN}🚪 Alloy - Única puerta de entrada para datos:${NC}" echo -e "${YELLOW}📊 Envío de métricas:${NC}" echo -e " • Remote Write: ${BLUE}http://localhost:9999/api/v1/write${NC}" echo -e " • Prometheus compatible: ${BLUE}http://localhost:9999/metrics${NC}" echo "" echo -e "${YELLOW}📋 Envío de logs:${NC}" echo -e " • HTTP API: ${BLUE}http://localhost:3101/loki/api/v1/push${NC}" echo -e " • Syslog TCP: ${BLUE}localhost:1514${NC}" echo "" echo -e "${YELLOW}🔍 Envío de trazas:${NC}" echo -e " • OTLP gRPC: ${BLUE}http://localhost:4317${NC}" echo -e " • OTLP HTTP: ${BLUE}http://localhost:4318/v1/traces${NC}" echo -e " • Jaeger gRPC: ${BLUE}localhost:14250${NC}" echo -e " • Jaeger HTTP: ${BLUE}http://localhost:14268/api/traces${NC}" echo -e " • Jaeger UDP: ${BLUE}localhost:6831${NC}" echo -e " • Zipkin: ${BLUE}http://localhost:9411/api/v2/spans${NC}" echo "" echo -e "${YELLOW}Comandos útiles:${NC}" echo -e " Ver logs: ${BLUE}docker-compose logs [servicio]${NC}" echo -e " Parar servicios: ${BLUE}docker-compose down${NC}" echo -e " Reiniciar servicios: ${BLUE}docker-compose restart${NC}" echo -e " Estado de servicios: ${BLUE}docker-compose ps${NC}" echo "" echo -e "${GREEN}✨ Configuración centralizada: Alloy recolecta todo y distribuye a Prometheus, Loki y Tempo${NC}" echo ""