sonde disque : espace et inodes de chaque systeme de fichiers, sur tout noeud
Seuls le cache apt et les depots de sauvegarde etaient surveilles. Declaree par serveur_debian, posee par client_sante (pas par common_packages, qui ferait un upgrade full de la flotte pour deposer un script). Seuils 80/90 pourcent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
5e7534d87f
commit
40b38467e8
4 changed files with 87 additions and 0 deletions
|
|
@ -63,3 +63,9 @@ client_sante_delai_sonde: 20
|
|||
client_sante_paquets:
|
||||
- curl
|
||||
- monitoring-plugins-basic
|
||||
|
||||
# LA SONDE « disque » (2026-09-28) — pourcentage UTILISE, pour l'espace comme pour les
|
||||
# inodes. Mesure le jour de sa pose : au plus 22 % d'espace et 7 % d'inodes sur les 35
|
||||
# machines ; ces seuils laissent donc voir une croissance longtemps avant la panne.
|
||||
client_sante_disque_avert: 80
|
||||
client_sante_disque_crit: 90
|
||||
|
|
|
|||
|
|
@ -142,6 +142,27 @@
|
|||
{{ group_names | map('extract', client_sante_registre) | select('defined')
|
||||
| select('sequence') | flatten | map(attribute='nom') | list }}
|
||||
|
||||
# LA SONDE « disque » EST POSEE ICI, PAS PAR `common_packages` (2026-09-28). Elle est
|
||||
# DECLAREE par `serveur_debian` — tout hote la porte — comme `correctifs`. Mais
|
||||
# `common_packages` fait un `upgrade: full` a chaque passage : la poser par lui aurait
|
||||
# impose une mise a jour de toute la flotte pour deposer un script. Ce role-ci execute
|
||||
# deja les sondes, et se redeploie sans toucher au systeme.
|
||||
- name: Assurer le repertoire des sondes
|
||||
ansible.builtin.file:
|
||||
path: /usr/local/lib/setops/sondes
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Deposer la sonde de l'espace disque
|
||||
ansible.builtin.template:
|
||||
src: sonde-disque.sh.j2
|
||||
dest: /usr/local/lib/setops/sondes/disque.sh
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0750"
|
||||
|
||||
- name: Relever les sondes reellement posees
|
||||
ansible.builtin.find:
|
||||
paths: "{{ client_sante_repertoire_sondes | default('/usr/local/lib/setops/sondes') }}"
|
||||
|
|
|
|||
52
roles/client_sante/templates/sonde-disque.sh.j2
Normal file
52
roles/client_sante/templates/sonde-disque.sh.j2
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
# GENERE par Set-OPS (role client_sante). Ne pas editer a la main.
|
||||
#
|
||||
# SONDE « disque » — reste-t-il de la place, et des inodes, sur chaque systeme de fichiers ?
|
||||
#
|
||||
# Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
|
||||
# Seuils : `client_sante_disque_avert` / `client_sante_disque_crit` (pourcentage utilise),
|
||||
# les memes pour l'espace et pour les inodes.
|
||||
#
|
||||
# POURQUOI ELLE MANQUAIT (2026-09-28). Seuls les volumes du cache apt et des depots de
|
||||
# sauvegarde etaient surveilles. Rien ne regardait le disque de la base, des boites, de
|
||||
# Nextcloud, ni de Loki qui grossit chaque jour. Prometheus collecte bien l'occupation,
|
||||
# mais aucune regle n'en fait une alerte : un disque plein arretait la base ou le courriel
|
||||
# sans rien dire avant. Les INODES aussi : une file de courriel ou un cache de petits
|
||||
# fichiers les epuise avec la moitie de l'espace libre, et le message d'erreur parle alors
|
||||
# d'un disque « plein » qu'un `df` dit a moitie vide.
|
||||
set -uo pipefail
|
||||
|
||||
AVERT={{ client_sante_disque_avert }}
|
||||
CRIT={{ client_sante_disque_crit }}
|
||||
# Pas les pseudo-systemes : ils se remplissent et se vident par nature.
|
||||
EXCLUS=(-x tmpfs -x devtmpfs -x squashfs -x overlay -x efivarfs)
|
||||
|
||||
pire=0; pire_quoi=""; perf=""
|
||||
lire() { # $1 = espace|inodes, puis la sortie de df -P[i]
|
||||
local genre=$1 ligne pct mp
|
||||
while read -r ligne; do
|
||||
pct=$(awk '{print $5}' <<<"${ligne}" | tr -d '%')
|
||||
mp=$(awk '{print $6}' <<<"${ligne}")
|
||||
[[ "${pct}" =~ ^[0-9]+$ ]] || continue # `-` : pas d'inodes sur ce type
|
||||
local etiq=${mp#/}; etiq=${etiq//\//_}; etiq=${etiq:-racine}
|
||||
perf+="${genre}_${etiq}=${pct}%;${AVERT};${CRIT};0;100 "
|
||||
if (( pct > pire )); then pire=${pct}; pire_quoi="${mp} (${genre}) a ${pct} %"; fi
|
||||
done
|
||||
}
|
||||
lire espace < <(df -P "${EXCLUS[@]}" 2>/dev/null | tail -n +2)
|
||||
lire inodes < <(df -Pi "${EXCLUS[@]}" 2>/dev/null | tail -n +2)
|
||||
|
||||
if [[ -z "${pire_quoi}" ]]; then
|
||||
echo "Aucun systeme de fichiers lisible par df."
|
||||
exit 3
|
||||
fi
|
||||
if (( pire >= CRIT )); then
|
||||
echo "DISQUE CRITIQUE : ${pire_quoi} (seuil ${CRIT} %). | ${perf}"
|
||||
exit 2
|
||||
fi
|
||||
if (( pire >= AVERT )); then
|
||||
echo "Disque en tension : ${pire_quoi} (seuil ${AVERT} %). | ${perf}"
|
||||
exit 1
|
||||
fi
|
||||
echo "Place suffisante : le plus rempli est ${pire_quoi}. | ${perf}"
|
||||
exit 0
|
||||
|
|
@ -26,6 +26,14 @@
|
|||
# COMBIEN DE TEMPS. Le retard seul ne dit rien — c'est sa DUREE qui transforme un
|
||||
# correctif publie en exposition acceptee.
|
||||
sondes:
|
||||
# POSEE PAR `client_sante` (voir ses taches) : la poser par `common_packages` aurait
|
||||
# impose un `upgrade: full` de toute la flotte pour deposer un script.
|
||||
- nom: disque
|
||||
ttl: 5400
|
||||
raison: >-
|
||||
Reste-t-il de la place, et des inodes, sur chaque systeme de fichiers ? Seuls le
|
||||
cache apt et les depots de sauvegarde etaient surveilles : un disque plein arretait
|
||||
la base ou le courriel sans prevenir.
|
||||
- nom: correctifs
|
||||
ttl: 5400
|
||||
raison: >-
|
||||
|
|
|
|||
Loading…
Reference in a new issue