sondes : les cinq qui manquaient le plus (autorite, base, annuaire, zones, edge)
CORRECTION DE COMPTE D ABORD. J avais annonce cinq groupes sans sonde. La
mesure en donne VINGT-SEPT : j avais compte ceux que j avais en tete, pas
ceux que le depot contient. Il en reste vingt-deux.
LES CINQ, PAR ORDRE DE DEGAT SILENCIEUX.
autorite (step_ca) — la plus urgente : nos certificats vivent 24 h, une AC
muette ne casse rien aujourd hui et casse TOUT demain, d un coup, sur les
21 machines. Elle surveille aussi l expiration de la RACINE, que personne
ne regarde parce qu elle vit des annees (relevee a 3642 jours).
base (postgresql) — une VRAIE requete, pas pg_isready : celui-ci dit que
le port repond, pas que la base sert. Plus le compte des connexions : a
saturation, chaque application tombe sans que la base ait l air morte.
annuaire (openldap) — elle COMPTE les entrees. Un annuaire vide repond
success a tout : le mensonge des sauvegardes vides, vert et sans contenu.
zones (powerdns) — un autoritatif sans zone repond NXDOMAIN a tout, ce qui
se lit comme « ce nom n existe pas ».
edge (nginx) — elle valide la configuration SUR DISQUE : nginx sert la
derniere valide, et une configuration cassee ne se voit qu au prochain
demarrage, souvent des mois plus tard.
Les cinq eprouvees vertes sur le sain puis rouges PAR PARAMETRE, sans
toucher a un service.
Etat : 20 sondes sur 19 roles, 23 services distincts, 70 instances, 67 au
vert. Les trois autres sont connues : deux sauvegardes sans donnee a
emporter, et Loki en delai de stabilisation apres redeploiement.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 03:47:03 -04:00
|
|
|
#jinja2: comment_start_string:'{=#', comment_end_string:'#=}'
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
# GENERE par Set-OPS (role serveur_nginx). Ne pas editer a la main.
|
|
|
|
|
#
|
2026-09-28 19:40:26 -04:00
|
|
|
# SONDE « edge » — l'edge ecoute, sa configuration tient, et ce qu'il publie REPOND
|
sondes : les cinq qui manquaient le plus (autorite, base, annuaire, zones, edge)
CORRECTION DE COMPTE D ABORD. J avais annonce cinq groupes sans sonde. La
mesure en donne VINGT-SEPT : j avais compte ceux que j avais en tete, pas
ceux que le depot contient. Il en reste vingt-deux.
LES CINQ, PAR ORDRE DE DEGAT SILENCIEUX.
autorite (step_ca) — la plus urgente : nos certificats vivent 24 h, une AC
muette ne casse rien aujourd hui et casse TOUT demain, d un coup, sur les
21 machines. Elle surveille aussi l expiration de la RACINE, que personne
ne regarde parce qu elle vit des annees (relevee a 3642 jours).
base (postgresql) — une VRAIE requete, pas pg_isready : celui-ci dit que
le port repond, pas que la base sert. Plus le compte des connexions : a
saturation, chaque application tombe sans que la base ait l air morte.
annuaire (openldap) — elle COMPTE les entrees. Un annuaire vide repond
success a tout : le mensonge des sauvegardes vides, vert et sans contenu.
zones (powerdns) — un autoritatif sans zone repond NXDOMAIN a tout, ce qui
se lit comme « ce nom n existe pas ».
edge (nginx) — elle valide la configuration SUR DISQUE : nginx sert la
derniere valide, et une configuration cassee ne se voit qu au prochain
demarrage, souvent des mois plus tard.
Les cinq eprouvees vertes sur le sain puis rouges PAR PARAMETRE, sans
toucher a un service.
Etat : 20 sondes sur 19 roles, 23 services distincts, 70 instances, 67 au
vert. Les trois autres sont connues : deux sauvegardes sans donnee a
emporter, et Loki en delai de stabilisation apres redeploiement.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 03:47:03 -04:00
|
|
|
#
|
|
|
|
|
# Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
|
|
|
|
|
# Mise en defaut PAR PARAMETRE : `serveur_nginx_sonde_ports` (port qui n'ecoute pas).
|
|
|
|
|
set -uo pipefail
|
|
|
|
|
|
|
|
|
|
PORTS="{{ serveur_nginx_sonde_ports }}"
|
|
|
|
|
|
|
|
|
|
systemctl is-active --quiet nginx || { echo "L'edge (nginx) n'est pas actif."; exit 2; }
|
|
|
|
|
|
|
|
|
|
# LA CONFIGURATION SUR DISQUE, PAS SEULEMENT CELLE EN MEMOIRE. nginx garde la derniere
|
|
|
|
|
# configuration VALIDE et continue de servir ; une configuration cassee ne se voit qu'au
|
|
|
|
|
# prochain redemarrage — c'est-a-dire au pire moment, souvent des mois plus tard.
|
|
|
|
|
nginx -t >/dev/null 2>&1 \
|
|
|
|
|
|| { echo "L'edge sert, mais sa configuration sur disque est INVALIDE : le prochain demarrage echouera."; exit 2; }
|
|
|
|
|
|
|
|
|
|
manquants=()
|
|
|
|
|
for p in ${PORTS}; do
|
|
|
|
|
ss -ltn 2>/dev/null | grep -qE "[:.]${p}[[:space:]]" || manquants+=("${p}")
|
|
|
|
|
done
|
|
|
|
|
if (( ${#manquants[@]} > 0 )); then
|
|
|
|
|
echo "L'edge n'ecoute pas sur : ${manquants[*]} — ce qui est publie derriere est injoignable."
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
2026-09-28 19:40:26 -04:00
|
|
|
|
|
|
|
|
# CE QUI EST PUBLIE REPOND-IL ? (2026-09-28) Ecouter n'est pas servir : un service publie
|
|
|
|
|
# dont l'amont est tombe rend 502, et l'edge reste « valide, a l'ecoute ». On interroge chaque
|
|
|
|
|
# exposition EN LOCAL — son nom et son SNI, vers 127.0.0.1 — : on teste ce que l'EDGE sert,
|
|
|
|
|
# sans dependre de la resolution de qui que ce soit. `-k` : le certificat est l'affaire de la
|
|
|
|
|
# sonde `certificat` ; ici, la question est la reponse. Une redirection (302 vers la
|
|
|
|
|
# connexion) est une reponse saine ; un 5xx ou un silence ne l'est pas.
|
|
|
|
|
{=# LE MEME FILTRE QUE LES VHOSTS (`expositions.conf.j2`) : un hote connu, une adresse, un
|
|
|
|
|
port. Une exposition sans port web (`dns`, `pki`, `sauvegarde` au site) n'a pas de vhost :
|
|
|
|
|
l'attendre ici faisait crier la sonde pour trois noms que l'edge ne publie pas. #=}
|
|
|
|
|
{% set publiees = [] %}
|
|
|
|
|
{% for expo in serveur_nginx_expositions | default([]) %}
|
|
|
|
|
{% if expo.hote in hostvars and hostvars[expo.hote].ansible_host is defined and expo.port %}
|
|
|
|
|
{% set _ = publiees.append(expo.fqdn) %}
|
|
|
|
|
{% endif %}
|
|
|
|
|
{% endfor %}
|
|
|
|
|
EXPOSITIONS="{{ publiees | unique | sort | join(' ') }}"
|
|
|
|
|
en_defaut=(); servies=0
|
|
|
|
|
for n in ${EXPOSITIONS}; do
|
|
|
|
|
code=$(curl -sk -o /dev/null -w '%{http_code}' --max-time 8 --resolve "${n}:443:127.0.0.1" "https://${n}/" 2>/dev/null)
|
|
|
|
|
if [[ "${code}" =~ ^[234][0-9][0-9]$ ]]; then servies=$((servies + 1)); else en_defaut+=("${n}=${code:-000}"); fi
|
|
|
|
|
done
|
|
|
|
|
perf="| expositions=${servies};;;0; en_defaut=${#en_defaut[@]}"
|
|
|
|
|
if (( ${#en_defaut[@]} > 0 )); then
|
|
|
|
|
echo "L'edge ecoute, mais des expositions ne sont PAS servies : ${en_defaut[*]} (000 = silence, 5xx = amont en defaut). ${perf}"
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
echo "Edge : configuration valide, ecoute sur ${PORTS}, ${servies} exposition(s) servie(s). ${perf}"
|