#!/usr/bin/env bash # ============================================================================= # Deploiement de la pile d'observabilite # ============================================================================= # export KUBECONFIG=~/.kube/xpeditis-prod.yaml # bash scripts/deploy-monitoring.sh # # Loki (journaux) + Promtail (collecte) + Prometheus (metriques) + # Alertmanager (Discord) + Grafana (consultation). set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" K8S_DIR="${HERE}/../k8s" REPO_ROOT="$(cd "${HERE}/../../.." && pwd)" log() { printf '\n>>> %s\n' "$*"; } kubectl get ns monitoring >/dev/null 2>&1 || kubectl apply -f "${K8S_DIR}/base/00-namespaces.yaml" kubectl -n monitoring get secret grafana-admin >/dev/null 2>&1 \ || { echo "Secret grafana-admin absent : lancez d'abord scripts/secrets-apply.sh" >&2; exit 1; } kubectl -n monitoring get secret alertmanager-secrets >/dev/null 2>&1 \ || { echo "Secret alertmanager-secrets absent : lancez d'abord scripts/secrets-apply.sh" >&2; exit 1; } # --- Tableaux de bord -------------------------------------------------------- # Reutilise les tableaux de bord deja ecrits pour la preprod plutot que d'en # maintenir un second jeu. DASHBOARD_SRC="${REPO_ROOT}/infra/logging/grafana/provisioning/dashboards" if [[ -d "$DASHBOARD_SRC" ]]; then log "Tableaux de bord depuis ${DASHBOARD_SRC}" kubectl -n monitoring create configmap grafana-dashboards \ $(find "$DASHBOARD_SRC" -name '*.json' -exec printf -- '--from-file=%s ' {} +) \ --dry-run=client -o yaml | kubectl apply -f - else echo "AVERTISSEMENT: aucun tableau de bord trouve dans ${DASHBOARD_SRC}" fi log "Loki" kubectl apply -f "${K8S_DIR}/monitoring/01-loki.yaml" log "Promtail" kubectl apply -f "${K8S_DIR}/monitoring/02-promtail.yaml" log "Prometheus" kubectl apply -f "${K8S_DIR}/monitoring/03-prometheus.yaml" log "node-exporter" kubectl apply -f "${K8S_DIR}/monitoring/04-node-exporter.yaml" log "Alertmanager" kubectl apply -f "${K8S_DIR}/monitoring/05-alertmanager.yaml" log "Grafana" kubectl apply -f "${K8S_DIR}/monitoring/06-grafana.yaml" log "Politiques reseau du namespace monitoring" kubectl apply -f "${K8S_DIR}/base/10-network-policies.yaml" kubectl apply -f "${K8S_DIR}/base/08-traefik-middlewares.yaml" log "Attente du demarrage" kubectl -n monitoring rollout status deploy/loki --timeout=300s kubectl -n monitoring rollout status deploy/prometheus --timeout=300s kubectl -n monitoring rollout status deploy/alertmanager --timeout=180s kubectl -n monitoring rollout status deploy/grafana --timeout=300s log "Etat" kubectl -n monitoring get pods,svc,pvc cat <<'NEXT' Grafana : https://grafana.xpeditis.com Identifiants : Secret monitoring/grafana-admin L'acces est filtre par IP (middleware monitoring-admin-ip-allowlist). Adaptez la liste dans k8s/base/08-traefik-middlewares.yaml, sinon vous obtiendrez un 403 depuis votre poste. Verifier que les alertes partent bien, AVANT d'en avoir besoin : kubectl -n monitoring port-forward svc/alertmanager 9093:9093 curl -XPOST http://localhost:9093/api/v2/alerts -H 'Content-Type: application/json' \ -d '[{"labels":{"alertname":"TestDeRoutage","severity":"avertissement"}}]' NEXT