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
34 lines
1.6 KiB
Django/Jinja
34 lines
1.6 KiB
Django/Jinja
#!/bin/bash
|
|
# GENERE par Set-OPS (role serveur_postgresql). Ne pas editer a la main.
|
|
#
|
|
# SONDE « base » — la base repond a une requete et garde des connexions libres
|
|
#
|
|
# Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
|
|
# Mise en defaut PAR PARAMETRE : `serveur_postgresql_sonde_pct_avert` (seuil impossible).
|
|
set -uo pipefail
|
|
|
|
AVERT={{ serveur_postgresql_sonde_pct_avert }}
|
|
CRIT={{ serveur_postgresql_sonde_pct_crit }}
|
|
|
|
systemctl is-active --quiet postgresql || { echo "PostgreSQL n'est pas actif."; exit 2; }
|
|
|
|
# UNE REQUETE, PAS UN `pg_isready`. `pg_isready` ouvre une connexion et la ferme : il dit
|
|
# que le port repond, pas que la base sert. Une base en recuperation, en lecture seule ou
|
|
# a court de connexions passe `pg_isready` et refuse tout travail.
|
|
util=$(sudo -u postgres psql -Atc 'select 1' 2>&1)
|
|
[[ "${util}" == "1" ]] || { echo "La base n'execute plus de requete : ${util:0:70}"; exit 2; }
|
|
|
|
ouvertes=$(sudo -u postgres psql -Atc 'select count(*) from pg_stat_activity' 2>/dev/null)
|
|
max=$(sudo -u postgres psql -Atc 'show max_connections' 2>/dev/null)
|
|
[[ "${ouvertes}" =~ ^[0-9]+$ && "${max}" =~ ^[0-9]+$ ]] || { echo "Base vivante, comptes de connexions illisibles."; exit 1; }
|
|
pct=$(( ouvertes * 100 / max ))
|
|
|
|
if (( pct >= CRIT )); then
|
|
echo "Connexions a ${pct}% (${ouvertes}/${max}) — les applications vont etre refusees.|conn=${ouvertes};;;0;${max}"
|
|
exit 2
|
|
fi
|
|
if (( pct >= AVERT )); then
|
|
echo "Connexions a ${pct}% (${ouvertes}/${max}), seuil ${AVERT}%.|conn=${ouvertes};;;0;${max}"
|
|
exit 1
|
|
fi
|
|
echo "Base : requete servie, ${ouvertes}/${max} connexions (${pct}%).|conn=${ouvertes};;;0;${max}"
|