#!/bin/bash # GENERE par Set-OPS (role client_metrique). Ne pas editer a la main. # # SONDE « metriques » — cette machine offre-t-elle vraiment ses metriques ? # # Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2. # Mise en defaut PAR PARAMETRE : `client_metrique_sonde_url` (port ferme, mauvais schema). set -uo pipefail URL={{ client_metrique_sonde_url }} # Les collecteurs qui cherchent du materiel qu'une VM n'a pas. Vider cette liste sur du # metal : leur echec y voudrait dire quelque chose. SANS_OBJET="{{ client_metrique_collecteurs_sans_objet | join(' ') }}" # ON INTERROGE L'ENDROIT QUE PROMETHEUS INTERROGE, pas le gestionnaire de services. # `-k` parce que le certificat est celui de l'hote, emis par notre AC : le valider ici # reviendrait a mesurer la PKI, ce que fait deja la sonde `certificat`. corps=$(curl -sk --max-time 10 "${URL}" 2>/dev/null) if [[ -z "${corps}" ]]; then echo "node_exporter ne rend rien sur ${URL}." exit 2 fi lignes=$(printf '%s\n' "${corps}" | grep -c '^node_') if (( lignes == 0 )); then echo "node_exporter repond sur ${URL} mais n'expose AUCUNE metrique node_." exit 2 fi # LES COLLECTEURS EN ECHEC, moins ceux qu'on a declares sans objet. en_echec=$(printf '%s\n' "${corps}" \ | sed -n 's/^node_scrape_collector_success{collector="\([a-z_]*\)"} 0$/\1/p' | sort) inattendus="" for c in ${en_echec}; do case " ${SANS_OBJET} " in *" ${c} "*) : ;; *) inattendus="${inattendus}${inattendus:+, }${c}" ;; esac done perf="lignes=${lignes} collecteurs_en_echec=$(printf '%s\n' "${en_echec}" | grep -c .)" if [[ -n "${inattendus}" ]]; then echo "Metriques servies (${lignes} lignes) mais collecteur(s) ATTENDU(S) en echec : ${inattendus} | ${perf}" exit 1 fi echo "Metriques servies : ${lignes} lignes node_, aucun collecteur attendu en echec. | ${perf}" exit 0