159 lines
4.9 KiB
Bash
Executable File
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 "" |