Mise en production : la supervision qui voit le chemin du jury, le stockage de secours, la traçabilité honnête #233
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!233
Loading…
Reference in a new issue
No description provided.
Delete branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce que ça change
Mise en production de tout ce qui est entré dans
developdepuis la livraisondu 08/09 au soir (#220) : la supervision qui sonde enfin le chemin du jury et
les sept tâches planifiées, le stockage de secours Azure, le panneau de
traçabilité qui dit la vérité sur ce qu'il montre, et la documentation d'EC02.
C'est le critère de sortie du jalon J2 :
main=develop.Refs #48
Preuve
Les demandes livrées :
Elles servent les tickets #44, #48, #69, #215 et #228. Chacune est entrée dans
developavec ses quatre tâches de chaîne au vert et l'approbation d'un pair.Aucune n'a été forcée. La chaîne est au vert sur la tête de
develop(
96eb3fd), les quatre tâches.Aucune migration dans cette livraison.
db/migrationsest inchangé, et.forgejo/workflowsaussi. Le retour arrière est ungit revertdu commit defusion suivi d'un redéploiement, sans opération de base à défaire — ce qui
n'était pas le cas de la #220.
Ce qui change pour la démonstration
blackboxinterrogeait chaque service sur son écoute directe : il serait resté tout vert
avec Caddy arrêté, un vhost mal routé ou un
/srv/www/appvide — les trois casoù plus personne ne peut ouvrir l'application. Le front n'était sondé nulle
part. Un job
blackbox-vhostsonde maintenantapp.g2.enervisionen 443, TLSet routage par nom d'hôte compris. MLflow et MinIO, également sans sonde,
en ont une.
le cron de
deploy, une seule publiait une métrique : l'arrêt de l'ETL argent,de l'ETL or, du chargement PostgreSQL, de la prévision ou des recommandations
ne se voyait nulle part.
bin/_metriques-ops.shsort le mécanisme decollecte-current.shet les six autres s'en servent ; une seule règle« tâche en retard » les couvre toutes, à partir de la cadence publiée.
Cinq règles d'alerte s'ajoutent — l'ENF-08 en compte dix (#232).
moyenne horaire, le panneau lisait la minute pile du haut de l'heure : jusqu'à
52 kW d'écart relevés sur SITE003, sous une ligne intitulée « Valeur
affichée ». Le panneau montre désormais les deux grandeurs, séparées et
nommées, avec le nombre de minutes retenues — une heure dont la moyenne ne
porte que sur deux minutes le dit maintenant.
Terraform, alerte de capacité qui sonne pour de vrai, runbook
stockage-secours.md.reprise.mdest autoportante depuis, et le relevé du rejeu est au dépôt.docs/RAPPORT-EC02.md, le planning annoncé contre le réalisé, etle journal d'équipe complété de son J5 et du week-end.
Relecture
Où regarder en priorité
1. Ce que la fusion déclenche vraiment. Le rôle Ansible
appdéploierepo_version: develop, pasmain(infra/ansible/group_vars/all/vars.yml).La fusion vers
maindéclenche donc un déploiement dont le contenu vient dedevelop— identique à ce qui est fusionné à cet instant, mais ce n'est vraique parce que les deux branches coïncident au moment du push. Constat
antérieur, sans ticket ; il vaut d'être vu ici.
2. Le déploiement n'est toujours pas gardé par la chaîne.
deploy.ymlsedéclenche sur
push: main, sansworkflow_runnineeds. Sur un exécuteurunique le déploiement peut partir avant le verdict de la chaîne. La barrière
reste une convention de fusion. Inchangé depuis la #220, redit ici parce que
c'est la deuxième mise en production.
3. La pile de supervision est recréée par le déploiement.
supervisionest dans
app_stacksavecrecreate: true: Prometheus, Grafana et lesexportateurs redémarrent pendant le déploiement. Cette livraison change la
configuration de Prometheus, les règles d'alerte et les tableaux — c'est donc
le redémarrage qui les prend en compte, et une supervision brièvement muette
pendant qu'il se joue. À ne pas confondre avec une panne si quelqu'un regarde
au même moment.
4. Terraform ne part pas tout seul, et c'est voulu.
stockage.tf,alerte-capacite.tfet les sorties du #69 s'appliquent à la main, poste parposte, sur l'abonnement école. Le
planattendu selon l'état du compte estdécrit dans
infra/terraform/README.md. Rien dans cette fusion ne joint Azure.5. Les scripts de tâches planifiées sourcent un fichier neuf.
bin/_metriques-ops.shest sourcé par six scripts de cron. Il arrive par leclone du dépôt que fait le rôle
app, donc en même temps qu'eux — mais c'estle point où un déploiement partiel casserait les six d'un coup. Le fichier est
écrit pour ne jamais faire échouer son appelant (
ops_publier_resultatrendtoujours 0) ; c'est le point à vérifier en relecture.
La courbe a un pas d'une heure : chaque barre est la moyenne des soixante minutes, lue dans mesure_horaire. La route de tracabilite lit public.mesure a la cle exacte (site_id, horodatage), donc la minute PILE du haut de l'heure, une sur soixante. La ligne s'appelait « Valeur affichee ». Elle ne l'etait pas. Releve sur enervision_prod, SITE003, le 09/09 : heure courbe panneau ecart 05:00 749,40 kW 744,11 kW -5,29 04:00 757,55 kW 810,26 kW +52,71 03:00 763,90 kW 773,61 kW +9,71 Le mecanisme d'auditabilite est juste de bout en bout : la cle est commune de la zone bronze a la zone or, c'est verifiable et c'est l'ENF-07. C'etait son APPARIEMENT a l'ecran qui mentait, et PanneauIdentite.vue affirme mot pour mot « Chaque valeur affichee remonte a sa lecture et a sa methode ». Le panneau montre desormais les deux, separes et nommes. « Ce que la courbe affiche » : la moyenne de l'heure, et sur combien de minutes elle porte. « Lecture d'origine d'une de ces minutes » : valeur retenue, valeur brute, methode, qualite. Une phrase sous les deux blocs dit que l'ecart est normal. C'est plus fort que l'ancien affichage, parce que c'est vrai : on voit la moyenne, on voit une des minutes qui la composent, et on voit le lien. La serie porte donc minutes_retenues et minutes_ecartees, sommes de releves_pris_en_compte et releves_exclus que la migration 0016 pose depuis toujours et que personne ne lisait. Second usage, dans le meme sujet : une heure dont la moyenne porte sur DEUX minutes s'affichait comme une heure pleine — vu le 08/09 a 08:00 sur SITE003. Le panneau le signale maintenant. chargerTracabilite prend le point entier et non son seul horodatage. Il reste compatible avec un horodatage nu, que les cas d'essai et la vue site lui passent. Eprouve : cinq cas neufs sur le panneau, trois assertions de GraphiqueSite mises a jour, 346 cas Python au vert, mypy --strict et ruff propres. La requete a ete passee a la main sur enervision_prod. Une assertion de test a failli partir fausse : formaterKw arrondit a l'entier (maximumFractionDigits: 0), 757,55 s'ecrit donc « 758 » et non « 757,6 ». Verifie avant de commettre, pas apres la chaine rouge.