Files
suite_logs/init.sh
T

159 lines
4.9 KiB
Bash
Executable File

#!/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" "3500" "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:3500${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 ""