40 lines
2.1 KiB
Text
40 lines
2.1 KiB
Text
|
|
#!/bin/bash
|
||
|
|
# GENERE par Set-OPS (role serveur_icinga). Ne pas editer a la main.
|
||
|
|
#
|
||
|
|
# SONDE « moteur » — l'etat des controles arrive frais jusqu'a IcingaDB
|
||
|
|
#
|
||
|
|
# Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
|
||
|
|
# Mise en defaut PAR PARAMETRE : `serveur_icinga_sonde_age_crit` (age impossible).
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
CONF={{ serveur_icinga_sonde_config_db }}
|
||
|
|
AVERT={{ serveur_icinga_sonde_age_avert }}
|
||
|
|
CRIT={{ serveur_icinga_sonde_age_crit }}
|
||
|
|
|
||
|
|
systemctl is-active --quiet icinga2 || { echo "Le moteur Icinga n'est pas actif."; exit 2; }
|
||
|
|
systemctl is-active --quiet icingadb || { echo "La synchronisation IcingaDB n'est pas active."; exit 2; }
|
||
|
|
|
||
|
|
# ON NE SE FIE PAS A `is-active` SEUL — c'est le mensonge que ce depot a deja paye avec
|
||
|
|
# les sauvegardes : un service vert sur un travail qui n'aboutit pas. On demande a la BASE
|
||
|
|
# depuis combien de temps elle n'a pas ete rafraichie.
|
||
|
|
hote=$(grep -m1 -A5 '^database:' "${CONF}" 2>/dev/null | grep -m1 'host:' | awk '{print $2}')
|
||
|
|
mdp=$(grep -m1 'password:' "${CONF}" 2>/dev/null | awk '{print $2}')
|
||
|
|
base=$(grep -m1 -A5 '^database:' "${CONF}" 2>/dev/null | grep -m1 'database:' | awk '{print $2}')
|
||
|
|
util=$(grep -m1 -A6 '^database:' "${CONF}" 2>/dev/null | grep -m1 'user:' | awk '{print $2}')
|
||
|
|
[[ -n "${hote}" && -n "${mdp}" ]] || { echo "Configuration IcingaDB illisible (${CONF})."; exit 2; }
|
||
|
|
|
||
|
|
age=$(PGPASSWORD="${mdp}" psql -h "${hote}" -U "${util:-icingadb}" -d "${base:-icingadb}" -Atc \
|
||
|
|
"select coalesce(extract(epoch from now()) - max(last_update)/1000, 999999)::bigint from service_state" 2>/dev/null)
|
||
|
|
[[ "${age}" =~ ^-?[0-9]+$ ]] || { echo "La base de supervision ne repond pas (${hote})."; exit 2; }
|
||
|
|
(( age < 0 )) && age=0
|
||
|
|
|
||
|
|
if (( age >= CRIT )); then
|
||
|
|
echo "Etat FIGE : rien de neuf en base depuis ${age} s — la supervision montre le passe.|age=${age}s;${AVERT};${CRIT};0;"
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
if (( age >= AVERT )); then
|
||
|
|
echo "Etat vieillissant : ${age} s sans mise a jour (seuil ${AVERT}).|age=${age}s;${AVERT};${CRIT};0;"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "Moteur et synchronisation vivants : base rafraichie il y a ${age} s.|age=${age}s;${AVERT};${CRIT};0;"
|