diff --git a/IA_agents/context.md b/IA_agents/context.md index 6e3b5a7..8a5d045 100644 --- a/IA_agents/context.md +++ b/IA_agents/context.md @@ -21,6 +21,9 @@ A déployer par **`lecoffre_node/`** : - image: git.4nkweb.com/4nk/bitcoin:latest (pour mainchain et signet custom) - image: git.4nkweb.com/4nk/blindbit-oracle:dev (pour scan des blocs et détection des secrets dans les transaction silent payment) - image: containrrr/watchtower (pour la surveillance et mise à jour automatique des images) +- image: grafana/grafana:latest (pour le monitoring des évènements) +- image: grafana/loki:latest +- grafana/promtail:latest --- @@ -35,6 +38,7 @@ A déployer par **`lecoffre_node/`** (d'autres projets externes sont ne dépenda - **`lecoffre-back-mini/`** (backend pour les API tierces du projet lecoffre) - **`lecoffre-front/`** (frontend du projet lecoffre) - **`lecoffre_node/miner/`** (miner de la blockchain de preuves -layer2 de bitcoin depuis un signet-) +- **`status-api`** (interface d'affichage des statuts des interfaces et des services) --- diff --git a/conf/grafana/provisioning/datasources/loki.yml b/conf/grafana/provisioning/datasources/loki.yml index 4803b57..dedef26 100644 --- a/conf/grafana/provisioning/datasources/loki.yml +++ b/conf/grafana/provisioning/datasources/loki.yml @@ -3,12 +3,14 @@ apiVersion: 1 datasources: - name: Loki type: loki - access: proxy + access: server url: http://loki:3100 + uid: loki isDefault: true editable: true jsonData: maxLines: 1000 + timeout: 60 derivedFields: - datasourceUid: loki matcherRegex: "traceID=(\\w+)" diff --git a/scripts/test-dashboards.sh b/scripts/test-dashboards.sh index 51a2081..2d3dc8d 100755 --- a/scripts/test-dashboards.sh +++ b/scripts/test-dashboards.sh @@ -16,25 +16,25 @@ ADMIN_PASS="admin123" test_dashboard() { local dashboard_title="$1" local dashboard_uid="$2" - + echo "📊 Test du dashboard: $dashboard_title" - + # Vérifier que le dashboard existe dashboard_info=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/dashboards/uid/$dashboard_uid" \ -H "Content-Type: application/json") - + if echo "$dashboard_info" | jq -e '.dashboard.title' > /dev/null 2>&1; then echo " ✅ Dashboard accessible: $dashboard_title" - + # Vérifier les panneaux panel_count=$(echo "$dashboard_info" | jq '.dashboard.panels | length') echo " 📈 Nombre de panneaux: $panel_count" - + # Vérifier les requêtes Loki loki_queries=$(echo "$dashboard_info" | jq '.dashboard.panels[] | select(.targets[]?.datasource.type == "loki") | .targets[]?.expr' | wc -l) echo " 🔍 Requêtes Loki: $loki_queries" - + return 0 else echo " ❌ Dashboard inaccessible: $dashboard_title" @@ -45,19 +45,20 @@ test_dashboard() { # Fonction pour tester l'API Loki test_loki_api() { echo "🔍 Test de l'API Loki" - + # Test de connectivité Loki loki_response=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/datasources/proxy/loki/api/v1/labels" \ - -H "Content-Type: application/json" 2>/dev/null || echo "ERROR") - + -H "Content-Type: application/json" \ + -H "X-Scope-OrgID: anonymous" 2>/dev/null || echo "ERROR") + if [[ "$loki_response" != "ERROR" ]] && echo "$loki_response" | jq -e '.data' > /dev/null 2>&1; then echo " ✅ API Loki accessible" - + # Compter les labels disponibles label_count=$(echo "$loki_response" | jq '.data | length') echo " 🏷️ Labels disponibles: $label_count" - + return 0 else echo " ❌ API Loki inaccessible" @@ -68,17 +69,18 @@ test_loki_api() { # Fonction pour tester les logs des services test_service_logs() { echo "📋 Test des logs des services" - + services=("bitcoin-signet" "blindbit-oracle" "sdk_relay" "sdk_signer" "sdk_storage" "lecoffre-back" "lecoffre-front" "ihm_client" "signet_miner") - + for service in "${services[@]}"; do echo " 🔍 Test des logs: $service" - + # Test d'une requête simple sur les logs du service loki_response=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/datasources/proxy/loki/api/v1/query?query={container=\"$service\"}&limit=1" \ - -H "Content-Type: application/json" 2>/dev/null || echo "ERROR") - + -H "Content-Type: application/json" \ + -H "X-Scope-OrgID: anonymous" 2>/dev/null || echo "ERROR") + if [[ "$loki_response" != "ERROR" ]] && echo "$loki_response" | jq -e '.data.result' > /dev/null 2>&1; then log_count=$(echo "$loki_response" | jq '.data.result | length') if [ "$log_count" -gt 0 ]; then @@ -96,29 +98,30 @@ test_service_logs() { generate_health_report() { echo "📊 Rapport de Santé des Dashboards" echo "==================================" - + # Test de connectivité Grafana grafana_status=$(curl -s -o /dev/null -w "%{http_code}" \ -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/health") - + if [ "$grafana_status" = "200" ]; then echo "✅ Grafana: Opérationnel (HTTP $grafana_status)" else echo "❌ Grafana: Problème (HTTP $grafana_status)" fi - + # Test de connectivité Loki loki_status=$(curl -s -o /dev/null -w "%{http_code}" \ -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/datasources/proxy/loki/ready") - + "$GRAFANA_URL/api/datasources/proxy/loki/ready" \ + -H "X-Scope-OrgID: anonymous") + if [ "$loki_status" = "200" ]; then echo "✅ Loki: Opérationnel (HTTP $loki_status)" else echo "❌ Loki: Problème (HTTP $loki_status)" fi - + echo "" echo "🎯 Dashboards disponibles:" curl -s -u "$ADMIN_USER:$ADMIN_PASS" \