266 lines
7.0 KiB
Bash
Executable File
266 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Script de déploiement centralisé pour Grafana et la stack de monitoring
|
||
# Usage: ./scripts/deploy-grafana.sh [start|stop|restart|status|logs]
|
||
|
||
set -e
|
||
|
||
COMPOSE_FILE="docker-compose.yml"
|
||
GRAFANA_ADMIN_PASSWORD="${GRAFANA_ADMIN_PASSWORD:-admin123}"
|
||
GRAFANA_PORT="${GRAFANA_PORT:-3005}"
|
||
LOKI_PORT="${LOKI_PORT:-3100}"
|
||
|
||
# Couleurs pour les messages
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
log_info() {
|
||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
# Fonction pour vérifier si Docker est en cours d'exécution
|
||
check_docker() {
|
||
if ! docker info >/dev/null 2>&1; then
|
||
log_error "Docker n'est pas en cours d'exécution"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# Fonction pour vérifier la configuration
|
||
check_config() {
|
||
log_info "Vérification de la configuration..."
|
||
|
||
# Vérifier que les fichiers de configuration existent
|
||
required_files=(
|
||
"conf/grafana/provisioning/datasources/loki.yml"
|
||
"conf/grafana/provisioning/dashboards/dashboards.yml"
|
||
"conf/grafana/dashboards/lecoffre-overview.json"
|
||
"conf/grafana/dashboards/bitcoin-miner.json"
|
||
"conf/grafana/dashboards/services-overview.json"
|
||
"conf/promtail/promtail.yml"
|
||
"conf/nginx/grafana.conf"
|
||
)
|
||
|
||
for file in "${required_files[@]}"; do
|
||
if [ ! -f "$file" ]; then
|
||
log_error "Fichier de configuration manquant: $file"
|
||
exit 1
|
||
fi
|
||
done
|
||
|
||
log_success "Configuration vérifiée"
|
||
}
|
||
|
||
# Fonction pour démarrer la stack de monitoring
|
||
start_monitoring() {
|
||
log_info "Démarrage de la stack de monitoring..."
|
||
|
||
check_docker
|
||
check_config
|
||
|
||
# Créer les dossiers nécessaires
|
||
mkdir -p logs/{bitcoin,blindbit,sdk_relaysdk_storagelecoffre-front,ihm_client,tor,miner,nginx}
|
||
|
||
# Démarrer les services de monitoring
|
||
log_info "Démarrage de Loki..."
|
||
docker compose up -d loki
|
||
|
||
log_info "Attente que Loki soit prêt..."
|
||
sleep 10
|
||
|
||
log_info "Démarrage de Promtail..."
|
||
docker compose up -d promtail
|
||
|
||
log_info "Démarrage de Grafana..."
|
||
docker compose up -d grafana
|
||
|
||
log_info "Attente que Grafana soit prêt..."
|
||
sleep 15
|
||
|
||
# Vérifier le statut des services
|
||
check_monitoring_status
|
||
|
||
log_success "Stack de monitoring démarrée avec succès!"
|
||
echo ""
|
||
echo "🔗 URLs d'accès:"
|
||
echo " - Grafana: https://dev4.4nkweb.com/grafana/"
|
||
echo " - Loki API: https://dev4.4nkweb.com/loki/"
|
||
echo " - Grafana Local: http://localhost:${GRAFANA_PORT}"
|
||
echo ""
|
||
echo "🔐 Identifiants Grafana:"
|
||
echo " - Utilisateur: admin"
|
||
echo " - Mot de passe: ${GRAFANA_ADMIN_PASSWORD}"
|
||
}
|
||
|
||
# Fonction pour arrêter la stack de monitoring
|
||
stop_monitoring() {
|
||
log_info "Arrêt de la stack de monitoring..."
|
||
|
||
docker compose stop grafana promtail loki
|
||
|
||
log_success "Stack de monitoring arrêtée"
|
||
}
|
||
|
||
# Fonction pour redémarrer la stack de monitoring
|
||
restart_monitoring() {
|
||
log_info "Redémarrage de la stack de monitoring..."
|
||
stop_monitoring
|
||
sleep 5
|
||
start_monitoring
|
||
}
|
||
|
||
# Fonction pour vérifier le statut
|
||
check_monitoring_status() {
|
||
log_info "Vérification du statut des services..."
|
||
|
||
services=("loki" "promtail" "grafana")
|
||
|
||
for service in "${services[@]}"; do
|
||
if docker compose ps "$service" | grep -q "Up"; then
|
||
log_success "$service: En cours d'exécution"
|
||
else
|
||
log_warning "$service: Arrêté ou en erreur"
|
||
fi
|
||
done
|
||
|
||
# Vérifier les ports
|
||
if netstat -tuln 2>/dev/null | grep -q ":${GRAFANA_PORT} "; then
|
||
log_success "Grafana accessible sur le port ${GRAFANA_PORT}"
|
||
else
|
||
log_warning "Grafana non accessible sur le port ${GRAFANA_PORT}"
|
||
fi
|
||
|
||
if netstat -tuln 2>/dev/null | grep -q ":${LOKI_PORT} "; then
|
||
log_success "Loki accessible sur le port ${LOKI_PORT}"
|
||
else
|
||
log_warning "Loki non accessible sur le port ${LOKI_PORT}"
|
||
fi
|
||
}
|
||
|
||
# Fonction pour afficher les logs
|
||
show_logs() {
|
||
local service=${1:-"grafana"}
|
||
|
||
log_info "Affichage des logs pour $service..."
|
||
docker compose logs -f "$service"
|
||
}
|
||
|
||
# Fonction pour initialiser Grafana
|
||
init_grafana() {
|
||
log_info "Initialisation de Grafana..."
|
||
|
||
# Attendre que Grafana soit prêt
|
||
log_info "Attente que Grafana soit prêt..."
|
||
timeout=60
|
||
while [ $timeout -gt 0 ]; do
|
||
if curl -s http://localhost:${GRAFANA_PORT}/api/health >/dev/null 2>&1; then
|
||
log_success "Grafana est prêt!"
|
||
break
|
||
fi
|
||
sleep 2
|
||
timeout=$((timeout - 2))
|
||
done
|
||
|
||
if [ $timeout -le 0 ]; then
|
||
log_error "Timeout: Grafana n'est pas prêt après 60 secondes"
|
||
return 1
|
||
fi
|
||
|
||
# Créer un utilisateur admin si nécessaire
|
||
log_info "Configuration de l'utilisateur admin..."
|
||
curl -X POST \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"user\":\"admin\",\"password\":\"${GRAFANA_ADMIN_PASSWORD}\"}" \
|
||
http://admin:admin@localhost:${GRAFANA_PORT}/api/admin/users \
|
||
2>/dev/null || true
|
||
|
||
log_success "Grafana initialisé"
|
||
}
|
||
|
||
# Fonction pour collecter les logs de tous les services
|
||
collect_all_logs() {
|
||
log_info "Collecte des logs de tous les services..."
|
||
|
||
./scripts/collect-logs.sh
|
||
|
||
log_success "Logs collectés dans le dossier logs/"
|
||
}
|
||
|
||
# Fonction d'aide
|
||
show_help() {
|
||
echo "Usage: $0 [COMMAND]"
|
||
echo ""
|
||
echo "Commandes disponibles:"
|
||
echo " start Démarrer la stack de monitoring (Grafana + Loki + Promtail)"
|
||
echo " stop Arrêter la stack de monitoring"
|
||
echo " restart Redémarrer la stack de monitoring"
|
||
echo " status Vérifier le statut des services"
|
||
echo " logs Afficher les logs (par défaut: grafana)"
|
||
echo " init Initialiser Grafana"
|
||
echo " collect Collecter les logs de tous les services"
|
||
echo " help Afficher cette aide"
|
||
echo ""
|
||
echo "Variables d'environnement:"
|
||
echo " GRAFANA_ADMIN_PASSWORD Mot de passe admin Grafana (défaut: admin123)"
|
||
echo " GRAFANA_PORT Port Grafana (défaut: 3000)"
|
||
echo " LOKI_PORT Port Loki (défaut: 3100)"
|
||
echo ""
|
||
echo "Exemples:"
|
||
echo " $0 start"
|
||
echo " $0 logs promtail"
|
||
echo " GRAFANA_ADMIN_PASSWORD=mypass $0 start"
|
||
}
|
||
|
||
# Fonction principale
|
||
main() {
|
||
case "${1:-help}" in
|
||
start)
|
||
start_monitoring
|
||
;;
|
||
stop)
|
||
stop_monitoring
|
||
;;
|
||
restart)
|
||
restart_monitoring
|
||
;;
|
||
status)
|
||
check_monitoring_status
|
||
;;
|
||
logs)
|
||
show_logs "$2"
|
||
;;
|
||
init)
|
||
init_grafana
|
||
;;
|
||
collect)
|
||
collect_all_logs
|
||
;;
|
||
help|--help|-h)
|
||
show_help
|
||
;;
|
||
*)
|
||
log_error "Commande inconnue: $1"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Exécution du script
|
||
main "$@"
|