1abfe7044b5ec158f9811f34b1a9c78e47040f1d
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
1abfe7044b |
__meta_kubernetes_pod_node_name — un relabel dont la source est vide ne dit rien
Helm Charts / Detect changed charts (pull_request) Successful in 24s
Helm Charts / Library charts tool (pull_request) Skipped
Helm Charts / Application charts crowdsec (pull_request) Skipped
Helm Charts / Application charts hashicorp-vault (pull_request) Skipped
Helm Charts / Application charts minio (pull_request) Skipped
Helm Charts / Application charts pgbouncer (pull_request) Skipped
Helm Charts / Application charts pgcat (pull_request) Skipped
Helm Charts / Application charts prometheus (pull_request) Skipped
Helm Charts / Application charts redis (pull_request) Skipped
Helm Charts / Application charts chart (pull_request) Successful in 29s
Helm Charts / Application charts loki (pull_request) Successful in 47s
Helm Charts / Application charts grafana (pull_request) Successful in 50s
Helm Charts / Application charts alloy (pull_request) Successful in 45s
L'étiquette `node` était absente de Loki sur une collecte par ailleurs saine : `__meta_kubernetes_node_name` n'existe QUE pour `role = "node"`. Sous `role = "pod"`, elle est vide — et un relabel dont la source est vide ne pose pas l'étiquette, SANS erreur ni avertissement. On ne s'en aperçoit qu'en DEMANDANT les valeurs de l'étiquette (`/loki/api/v1/label/node/values`) et en trouvant la liste vide. Les six composants d'Alloy restaient `healthy`, 68 fichiers activement suivis, les lignes arrivaient. Seule l'étiquette par laquelle on aurait cherché « que disait pi2 cette nuit-là » manquait. Vérifié après correction : `node` rend pi1, pi2, pi3. ⚠ Relevé au passage, à ne pas oublier : le `config-reloader` n'a PAS rechargé Alloy quand la ConfigMap a changé. Le fichier monté portait bien la correction (horodaté 15:31), le composant en mémoire exécutait toujours l'ancienne règle. Il a fallu un `rollout restart` pour que la nouvelle config prenne. Le rechargement à chaud n'est donc pas une garantie — après un changement de configuration d'Alloy, VÉRIFIER la propriété visée plutôt que supposer. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Fable 5.1 <[email protected]> |
||
|
|
c4720a1dfd |
Ces nœuds tournent sous Docker, et leur racine est ailleurs — la collecte lisait le vide
Helm Charts / Detect changed charts (pull_request) Successful in 41s
Helm Charts / Library charts tool (pull_request) Skipped
Helm Charts / Application charts crowdsec (pull_request) Skipped
Helm Charts / Application charts pgcat (pull_request) Skipped
Helm Charts / Application charts prometheus (pull_request) Skipped
Helm Charts / Application charts redis (pull_request) Skipped
Helm Charts / Application charts alloy (pull_request) Successful in 14s
Helm Charts / Application charts chart (pull_request) Successful in 36s
Helm Charts / Application charts loki (pull_request) Successful in 51s
Helm Charts / Application charts grafana (pull_request) Successful in 56s
Helm Charts / Application charts hashicorp-vault (pull_request) Skipped
Helm Charts / Application charts minio (pull_request) Skipped
Helm Charts / Application charts pgbouncer (pull_request) Skipped
Trois faits mesurés au déploiement, qu'aucune lecture du chart n'aurait donnés.
1. LE CLUSTER TOURNE SOUS DOCKER, PAS SOUS CONTAINERD.
`kubectl get nodes -o …containerRuntimeVersion` :
pi1 docker://29.1.3
pi2 docker://28.4.0
pi3 docker://27.4.0
Le commentaire du premier jet affirmait le contraire. Il était faux.
2. LES JOURNAUX NE SONT PAS SOUS /var/log — CE SONT DES LIENS.
/var/log/pods/<ns>_<pod>_<uid>/<conteneur>/0.log
-> /mnt/arcodange/docker/containers/<id>/<id>-json.log
La racine Docker est déplacée sur un disque externe. Monter /var/log donne
les liens et PAS leurs cibles : `ls` les montre, `stat` échoue dessus. Le
drapeau `dockercontainers` du chart monterait /var/lib/docker/containers,
qui n'existe pas ici. On monte la vraie racine, en lecture seule.
Chemin vérifié identique sur pi1 et pi3, pod par pod.
3. LE FORMAT EST DU JSON DOCKER, DONC `stage.docker`, PAS `stage.cri`.
Avec le mauvais décodeur, l'horodatage stocké serait celui de la LECTURE et
non celui de l'écriture — or dater une panne à la minute est précisément
l'usage qui motive ce lot (tools#36).
⚠⚠ CE QUI REND CE DÉFAUT DANGEREUX : IL SE PRÉSENTE COMME UNE SANTÉ PARFAITE.
Les six composants d'Alloy se déclaraient `healthy`, aucune erreur de poussée,
Loki répondait `ready`, les trois agents étaient 2/2 Running. La seule chose
qui parlait était `loki_source_file_files_active_total = 0` et l'export vide de
`local.file_match`. Une pile de journaux qui rassure sans rien garder : le
défaut même que l'issue #38 demande de ne pas reproduire.
Le hostPath est en `type: Directory` et non `DirectoryOrCreate`, exprès — si un
nœud n'a pas ce chemin, son agent doit refuser de démarrer et le DIRE, plutôt
que de monter un dossier vide et de rapporter zéro en se déclarant sain.
Corrige aussi le second conteneur non plafonné, jumeau de celui de Loki :
`config-reloader` arrive avec une REQUÊTE de 50Mi et AUCUNE limite. Une requête
sans limite n'est pas un plafond, c'est une réservation — et sur un DaemonSet
cela vaut sur les trois nœuds. On ne peut pas l'éteindre sans perdre le
rechargement à chaud : on le plafonne (32Mi / 64Mi).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
|
||
|
|
b66e79aadc |
Ce qu'un pod a dit lui survit — Loki et Alloy, sous plafond (#38)
Helm Charts / Detect changed charts (pull_request) Successful in 3m18s
Helm Charts / Library charts tool (pull_request) Skipped
Helm Charts / Application charts crowdsec (pull_request) Skipped
Helm Charts / Application charts hashicorp-vault (pull_request) Skipped
Helm Charts / Application charts minio (pull_request) Skipped
Helm Charts / Application charts prometheus (pull_request) Skipped
Helm Charts / Application charts pgbouncer (pull_request) Skipped
Helm Charts / Application charts pgcat (pull_request) Skipped
Helm Charts / Application charts redis (pull_request) Skipped
Helm Charts / Application charts chart (pull_request) Successful in 29s
Helm Charts / Application charts alloy (pull_request) Successful in 59s
Helm Charts / Application charts grafana (pull_request) Successful in 1m1s
Helm Charts / Application charts loki (pull_request) Successful in 48s
Le cluster n'avait AUCUNE collecte de journaux : la seule lecture possible
était `kubectl logs`, c'est-à-dire le tampon du kubelet, qui tourne. Mesuré
le 2026-09-07 en demandant à chaque journal jusqu'où il remonte :
kube-system/traefik pod démarré il y a 12 j — journal remontant à 10 MIN
tools/clickhouse-0 pod démarré il y a 8 j — journal remontant à 2 MIN
Les deux composants les plus bavards du cluster gardent entre deux et dix
minutes d'histoire. C'est pire que ce que l'issue supposait.
Ce lot pose Loki (binaire unique, stockage fichier sur Longhorn) et Alloy
(l'agent, un pod par nœud), et branche la source de données au Grafana qui
tourne déjà.
L'AGENT : Alloy, pas Promtail — et c'est mesuré, pas une préférence. L'index
Helm de Grafana marque le chart `promtail` `deprecated: true`, dernière
publication 2025-10-31. Alloy : 2026-08-27. On n'installe pas à neuf un agent
que l'amont a déjà rangé.
LA RÉTENTION : 30 jours, sur un débit mesuré de ~305 Mio/jour bruts pour tout
le cluster, soit 0,9 à 1,8 Gio compressés. 7 jours auraient perdu le début des
deux pannes qui motivent ce lot (kadans#1033, des SEMAINES ; tools#36, 3 jours).
LES PLAFONDS NE SONT PAS OPTIONNELS : pi2 est mesuré à 108 % de sa mémoire
allouable. Les défauts amont du chart Loki y auraient posé un memcached
réclamant 8 Gio (`chunksCache.allocatedMemory: 8192`), un second memcached, un
nginx, un DaemonSet canari et trois jeux de répliques. Chaque extinction est
nommée dans `loki/values.yaml`, avec sa raison.
⚠ La CI de ce dépôt monte une matrice CODÉE EN DUR : un chart absent de la
liste n'est jamais construit et sa PR est verte quand même (tools#32). `loki`
et `alloy` y sont ajoutés — sans ça, ce lot n'aurait aucune preuve.
Deux découvertes faites en déployant, pas en lisant :
- `admin_api_directory` est accepté par le chart mais REFUSÉ par le binaire
OSS (champ d'édition entreprise) : CrashLoopBackOff jusqu'à ce qu'on l'ôte ;
- le chart ajoute un side-car `loki-sc-rules` SANS aucune limite de
ressources — un conteneur non plafonné dans un pod plafonné annule le
plafond. Éteint (le ruler est à 0 réplique).
Closes #38
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
|