Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018BAUeCFpDkRD6tU5wGsc1C
77 lines
3.2 KiB
Bash
Executable File
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
|