Gabarit setops-rapport-attendu : actif, dummy critique, check_interval = le ttl que le noeud envoie. Prouve a t+60 s sur site-mon-01, deploye sur les trois Icinga ; la garde test_fraicheur_icinga lie seuils et ttl. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
2.4 KiB
Django/Jinja
50 lines
2.4 KiB
Django/Jinja
/*
|
|
* Gere par Set-OPS (role serveur_icinga). Ne pas editer a la main.
|
|
*
|
|
* LES SONDES QUE LES ROLES DECLARENT — voir docs/supervision-conception.md.
|
|
*
|
|
* Rien ici n'est ecrit a la main : chaque service vient d'un `meta/supervision.yml`, et
|
|
* s'attache aux hotes qui portent le role qui le declare. Ajouter une sonde a un role la
|
|
* fait apparaitre ici sans toucher a ce fichier — comme un flux declare devient une
|
|
* regle nftables.
|
|
*
|
|
* CE QUE CA REMPLACE : dix-neuf lignes `surveillance:` en prose dans
|
|
* `docs/dependances-groupes.yml`, ecrites, versionnees, relues — et qu'aucun mecanisme
|
|
* n'executait. La carte disait ce qui etait surveille, et personne ne surveillait.
|
|
*
|
|
* Les HOTES sont definis dans `setops-hotes.conf` : ici, rien que des services.
|
|
*/
|
|
|
|
{#
|
|
* UN SERVICE PASSIF N'EXISTE QUE POUR UN HOTE QUI PEUT POUSSER (2026-09-10).
|
|
*
|
|
* Les hyperviseurs ont rejoint `client_metrique` — c'est par ce groupe qu'on leur
|
|
* DEPLOIE node_exporter. La derivation en tirait donc `asgard!metriques`, et Icinga
|
|
* refusait la configuration ENTIERE :
|
|
*
|
|
* Attribute 'host_name': Object 'asgard' of type 'Host' does not exist.
|
|
*
|
|
* Meme en definissant l'hote, le service serait reste UNKNOWN pour toujours : un
|
|
* hyperviseur ne porte pas `client_sante`, parce que sa route par defaut est gelee et
|
|
* qu'il ne peut rien pousser (D-57). On le TIRE avec Prometheus.
|
|
*
|
|
* L'appartenance a un groupe sert donc DEUX choses qui ne coincident pas toujours : a
|
|
* qui l'on deploie, et de qui l'on attend un rapport. La seconde se lit sur le porteur
|
|
* lui-meme — `client_sante` — et nulle part ailleurs.
|
|
#}
|
|
{% for role, sondes in (serveur_icinga_sondes | default({})) | dictsort %}
|
|
{% for hote in ((groups[role] | default([])) | intersect(groups['client_sante'] | default([]))) | sort %}
|
|
{% for sonde in sondes %}
|
|
object Service "{{ sonde.nom }}" {
|
|
import "setops-rapport-attendu"
|
|
host_name = "{{ hote }}"
|
|
check_interval = {{ serveur_icinga_fraicheur_sondes }}s
|
|
retry_interval = {{ serveur_icinga_fraicheur_sondes }}s
|
|
vars.dummy_text = "AUCUN RAPPORT depuis {{ (serveur_icinga_fraicheur_sondes / 60) | int }} min : cette sonde ne rapporte plus, ou n a jamais rapporte."
|
|
vars.setops_source = "{{ hote }}"
|
|
vars.setops_role = "{{ role }}"
|
|
vars.setops_raison = "{{ (sonde.raison | default('')) | replace('"', "'") | replace('\n', ' ') | trim }}"
|
|
}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
{% endfor %}
|