From 61020645bfdf327f288e230028ccc79a69effc35 Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Tue, 8 Sep 2026 01:53:32 +0200 Subject: [PATCH] =?UTF-8?q?Les=20sondes=20de=20Loki=20cessent=20d'exiger?= =?UTF-8?q?=20une=20r=C3=A9ponse=20en=20une=20seconde=20d'un=20Raspberry?= =?UTF-8?q?=20Pi=20(#45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un startupProbe patient tient le rejeu du WAL, la readinessProbe reste stricte ensuite. 30 échecs en 25 min sur un Loki parfaitement sain, faute d'une seconde — et sans endpoint, la source de données Grafana était inutilisable. Traite le point 2 de #44. Co-Authored-By: Claude Opus 5 Co-authored-by: Gabriel Radureau --- loki/values.yaml | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/loki/values.yaml b/loki/values.yaml index 5e1405b..4e02b90 100644 --- a/loki/values.yaml +++ b/loki/values.yaml @@ -26,6 +26,51 @@ loki: deploymentMode: SingleBinary loki: + # ── LES SONDES, RÉGLÉES POUR UN RASPBERRY PI (tools#44) ────────────────── + # + # ⚠⚠ MESURÉ le 2026-09-07, quelques heures après le premier déploiement : + # **30 échecs de la sonde de disponibilité en 25 minutes**, tous en + # `context deadline exceeded` — pendant que Loki tournait parfaitement. Il + # finissait de rejouer son WAL (`checkpoint done time=4m23s`) sur un nœud + # tendu. Le défaut amont est `timeoutSeconds: 1` : **une seconde** pour + # répondre, ce qui est raisonnable sur une machine rapide et intenable ici. + # + # Conséquence, et elle n'est pas cosmétique : sans sonde verte, **aucun + # endpoint derrière le service**, donc la source de données Grafana est + # inutilisable — un magasin de journaux vivant mais injoignable. + # + # ⚠ LE REMÈDE N'EST PAS D'ASSOUPLIR LA DISPONIBILITÉ. On sépare deux + # questions que le défaut amont confondait : + # · « Loki a-t-il fini de DÉMARRER ? » → `startupProbe`, patiente et + # généreuse (jusqu'à 10 min : c'est le rejeu du WAL qu'on attend). + # · « Loki répond-il MAL ? » → `readinessProbe`, qui reste stricte et + # ne prend le relais qu'une fois le démarrage acquis. + # Un délai de 5 s y remplace la seconde amont : c'est le temps qu'un Pi + # chargé met à servir `/ready`, pas une tolérance à la panne. + startupProbe: + httpGet: + path: /ready + port: http-metrics + periodSeconds: 10 + failureThreshold: 60 # 10 min pour rejouer un WAL, puis on abandonne + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: http-metrics + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + timeoutSeconds: 5 + # ⚠ `initialDelaySeconds: 0` est ÉCRIT, pas omis. Le chart FUSIONNE cette + # table avec la sienne au lieu de la remplacer : l'omettre laissait + # passer le `15` amont — vérifié au `helm template`, qui rendait encore + # `initialDelaySeconds: 15` sur un premier jet où je croyais l'avoir + # retiré. C'est le `startupProbe` qui tient la phase de démarrage ; + # attendre en plus ici ferait patienter deux fois et masquerait laquelle + # des deux sondes a réellement gardé quoi. + initialDelaySeconds: 0 + # Locataire unique : personne d'autre que le homelab n'écrit ici. Laisser # `true` obligerait chaque requête (et chaque source de données Grafana) à # porter un en-tête X-Scope-OrgID, pour aucun bénéfice.