xpeditis2.0/infra/prod/scripts/deploy-monitoring.sh
2026-09-07 21:40:50 +02:00

77 lines
3.2 KiB
Bash
Executable File

#!/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