Un veilleur hors de Prometheus, pour que son silence cesse de ressembler au bon fonctionnement (#39)
Helm Charts / Detect changed charts (push) Successful in 10s
Helm Charts / Library charts tool (push) Skipped
Helm Charts / Application charts grafana (push) Skipped
Helm Charts / Application charts hashicorp-vault (push) Skipped
Helm Charts / Application charts minio (push) Skipped
Helm Charts / Application charts pgbouncer (push) Skipped
Helm Charts / Application charts pgcat (push) Skipped
Helm Charts / Application charts redis (push) Skipped
Helm Charts / Application charts chart (push) Skipped
Helm Charts / Application charts crowdsec (push) Skipped
Helm Charts / Application charts prometheus (push) Failing after 50s
Helm Charts / Detect changed charts (push) Successful in 10s
Helm Charts / Library charts tool (push) Skipped
Helm Charts / Application charts grafana (push) Skipped
Helm Charts / Application charts hashicorp-vault (push) Skipped
Helm Charts / Application charts minio (push) Skipped
Helm Charts / Application charts pgbouncer (push) Skipped
Helm Charts / Application charts pgcat (push) Skipped
Helm Charts / Application charts redis (push) Skipped
Helm Charts / Application charts chart (push) Skipped
Helm Charts / Application charts crowdsec (push) Skipped
Helm Charts / Application charts prometheus (push) Failing after 50s
Un CronJob toutes les 5 minutes interroge Prometheus depuis dehors et pousse lui-même sur Telegram. Il couvre les trois morts, dont celle qui est arrivée : répondre parfaitement en n'enregistrant rien. Éprouvé en vrai sur le cluster : 187 s entre la panne armée et le message accepté par Telegram, mesuré deux fois. Contre 4620 minutes de silence réel. Ferme #36. Co-Authored-By: Claude Opus 5 <[email protected]> Co-authored-by: Gabriel Radureau <[email protected]>
This commit was merged in pull request #39.
This commit is contained in:
@@ -1265,6 +1265,64 @@ prometheus: &prometheus_config
|
||||
annotations:
|
||||
summary: "Homelab — cert {{ $labels.namespace }}/{{ $labels.name }} expire dans {{ $value | humanizeDuration }}"
|
||||
description: "Le renouvellement automatique (cert-manager → step-issuer → step-ca) est en échec. Vérifier : kubectl get certificaterequest -A, logs step-issuer (résolution DNS de ssl-ca.arcodange.lab), santé de step-ca sur pi1:8443."
|
||||
# Le veilleur (arcodange-org/tools#36). Du 2026-09-04 02:41 au
|
||||
# 2026-09-07 07:37, Prometheus n'a rien enregistré et les 11 règles
|
||||
# ci-dessus se sont TUES — sans échantillon frais, une règle ne se
|
||||
# déclenche pas. Sur Telegram, ce silence est indiscernable du bon
|
||||
# fonctionnement.
|
||||
#
|
||||
# ⚠⚠ CES DEUX RÈGLES NE SONT PAS LE REMÈDE : elles vivent dans le
|
||||
# Prometheus surveillé, donc elles sont muettes exactement quand il
|
||||
# faudrait qu'elles parlent. Le remède est le CronJob
|
||||
# `veilleur-prometheus` (templates/veilleur.yaml), qui interroge
|
||||
# Prometheus depuis l'EXTÉRIEUR et pousse lui-même sur Telegram.
|
||||
# Ces deux règles-ci sont ce que le CronJob observe et ce qui le
|
||||
# complète — rien de plus.
|
||||
- name: veilleur
|
||||
rules:
|
||||
- alert: Veilleur
|
||||
# Témoin toujours allumé (dead man's switch). Il ne dit rien de
|
||||
# l'état du système : il est TOUJOURS vrai. C'est son ABSENCE
|
||||
# dans Alertmanager qui est le signal, et c'est le CronJob
|
||||
# `veilleur-prometheus` qui la constate depuis dehors.
|
||||
#
|
||||
# ⚠ `vector(1)` ne lit AUCUNE série : ce témoin aurait continué
|
||||
# de tirer pendant les 3 j 5 h de panne. Il prouve que la chaîne
|
||||
# évaluation → Alertmanager vit, jamais que le TSDB enregistre.
|
||||
# C'est le contrôle de fraîcheur du CronJob qui garde ça.
|
||||
#
|
||||
# Il ne part PAS sur Telegram : la route `veilleur` d'Alertmanager
|
||||
# l'envoie au récepteur vide (cf. alertmanager.config plus bas).
|
||||
# Un témoin qui sonne toutes les 3 h serait un témoin qu'on coupe.
|
||||
expr: vector(1)
|
||||
labels:
|
||||
severity: none
|
||||
app: veilleur
|
||||
annotations:
|
||||
summary: "Témoin toujours allumé — c'est son absence qui est le signal"
|
||||
description: "Si cette alerte disparaît d'Alertmanager, l'évaluation des règles de Prometheus ou sa livraison vers Alertmanager est arrêtée : AUCUNE alerte ne partirait plus."
|
||||
- alert: VeilleurMuet
|
||||
# L'auto-plainte du veilleur, deuxième moitié : il pousse un
|
||||
# battement au Pushgateway à chaque exécution menée à son terme.
|
||||
# 1200 s = 4 tours de CronJob (*/5).
|
||||
#
|
||||
# ⚠ Cette règle est DANS le Prometheus surveillé : elle ne peut
|
||||
# rien dire d'un Prometheus mort — ce n'est pas son travail, c'est
|
||||
# celui du CronJob. Elle couvre le cas inverse : Prometheus en
|
||||
# pleine forme et le veilleur, lui, à l'arrêt (CronJob suspendu,
|
||||
# image introuvable, Telegram injoignable). Le cas « les deux à la
|
||||
# fois » reste NON COUVERT : il faudrait un second canal,
|
||||
# indépendant de ce homelab.
|
||||
expr: >-
|
||||
time() - veilleur_prometheus_derniere_reussite_timestamp_seconds > 1200
|
||||
or absent(veilleur_prometheus_derniere_reussite_timestamp_seconds)
|
||||
for: 5m
|
||||
labels:
|
||||
severity: critical
|
||||
app: veilleur
|
||||
annotations:
|
||||
summary: "Veilleur — le guetteur extérieur de Prometheus ne rapporte plus"
|
||||
description: "Le CronJob veilleur-prometheus (ns tools) n'a pas mené une exécution à son terme depuis plus de 20 min. Tant qu'il est muet, une panne d'enregistrement de Prometheus redeviendrait invisible. Vérifier : kubectl -n tools get cronjob,jobs -l app.kubernetes.io/name=veilleur-prometheus puis les journaux du dernier Job."
|
||||
# groups:
|
||||
# - name: Instances
|
||||
# rules:
|
||||
@@ -1345,7 +1403,19 @@ prometheus: &prometheus_config
|
||||
group_interval: 5m
|
||||
repeat_interval: 3h
|
||||
receiver: telegram
|
||||
routes:
|
||||
# Le témoin toujours allumé ne dérange personne : il est là pour être
|
||||
# CONSTATÉ par le CronJob veilleur-prometheus via /api/v2/alerts, pas
|
||||
# pour être lu. Sans cette route il sonnerait toutes les 3 h, et un
|
||||
# témoin qui sonne est un témoin qu'on finit par couper.
|
||||
- matchers:
|
||||
- alertname="Veilleur"
|
||||
receiver: neant
|
||||
group_wait: 0s
|
||||
repeat_interval: 8760h
|
||||
receivers:
|
||||
# Récepteur vide = trou noir. C'est la forme prévue par Alertmanager.
|
||||
- name: neant
|
||||
- name: telegram
|
||||
telegram_configs:
|
||||
- bot_token_file: /etc/alertmanager/telegram/BOT_TOKEN
|
||||
|
||||
Reference in New Issue
Block a user