Aller au contenu

Blog ·

Un grand livre qui compte avant tout prix

La supervision produit un chiffre par contrôle bien avant qu’un prix existe. Voici pourquoi le comptage a été construit en premier, et ce que cet ordre protège.

Par Provibr

La supervision n’a pas de prix. Pas de montant, pas de devise, pas de forfait, pas de ligne de facture. Ce qui existe depuis cette série de travaux, c’est un grand livre qui consigne chaque contrôle réellement envoyé par la plateforme, le conserve treize mois et referme chaque heure dans un seau qui n’est plus jamais modifié.

Construire le comptage avant la facturation semble être le mauvais ordre jusqu’au jour où l’on a fait l’inverse. Un compteur qui naît à côté d’une facture hérite de toutes les commodités que cette facture réclame : une nouvelle tentative comptée en silence parce que le total avait l’air étrange autrement, une correction appliquée en modifiant la ligne. Ce sont des décisions, et elles se prennent mieux quand aucun total n’en dépend.

Le grand livre existe donc, il ne contient pas d’argent, et l’une de ses colonnes est délibérément vide.

Ce qui compte, c’est ce qui est réellement parti

Un contrôle planifié traverse quelques états, et le grand livre pose une seule question par état : du trafic est-il sorti du bâtiment. Cela s’écrit comme un tableau couvrant chaque issue et non comme un aiguillage doté d’une branche par défaut, car une branche par défaut est précisément la voie par laquelle une septième issue devient silencieusement « ne compte pas » et par laquelle un mois disparaît.

IssueLigne écriteComptéePourquoi
planifiénonnonle créneau est réservé, rien n’a encore été envoyé
réservénonnonréservé mais non envoyé ; la ligne naît à l’envoi
envoyéouiouiun contrôle est réellement sorti
terminéouiouiachevé ; il a reçu sa ligne dès l’envoi
manquénonnonjamais envoyé : pas d’agent, pas de sonde saine, maintenance ou créneau dépassé
expirénonnonl’échéance est passée sans que rien ne parte

Deux de ces lignes méritent une phrase à elles.

Un contrôle qui atteint une machine morte compte quand même. Il y a eu du trafic et il y a eu une mesure ; que la réponse soit « hors service » est le résultat et non la question. Une règle qui ne compterait que les contrôles réussis facturerait le moins aux clients pour lesquels on travaille le plus.

Et « expiré » est plus subtil qu’il n’y paraît, car une requête peut expirer après avoir été envoyée. Rien n’est compté deux fois, et ce n’est pas un hasard : un tic n’atteint cet état que par le balayage qui touche les tics n’ayant jamais franchi l’étape d’envoi, et ce qui est parti figurait déjà comme envoyé et possède sa ligne depuis lors.

La classe de source, notre propre sonde ou l’agent du client, figure dans la ligne et dans la signature de la fonction qui décide. Les deux comptent aujourd’hui de la même façon, et c’est justement pour cela que la classe est écrite plutôt que supposée.

Un tic, une ligne

La bascule est le cas qui gonfle silencieusement un chiffre d’usage. Un contrôle part d’une source, cette source ne répond pas, une autre prend le relais, et voilà deux tentatives pour une seule mesure.

Ici, c’est un index unique sur une clé de la forme tick:<identifiant du tic>. Les reprises et les bascules dans le même tic produisent la même clé, la seconde insertion entre donc en conflit et ne renvoie rien. Les deux chemins d’écriture procèdent ainsi ; aucun ne consulte d’abord, car entre une consultation et une insertion tient une seconde passerelle.

La clé est une colonne de texte et non la référence au tic, et c’est là que réside l’intérêt. Les tics vivent sept jours, l’usage treize mois. Quand le balayage retire le tic, cette référence devient vide, et dans Postgres une valeur vide n’est jamais égale à une autre valeur vide : un index unique sur cette colonne se mettrait donc à tolérer des doublons une semaine plus tard, sans rien dire.

Un test manuel est aussi du trafic

Il existe un bouton qui lance un contrôle immédiatement. Il ne compte pas, et il est tout de même consigné.

Les deux moitiés importent. Il ne compte pas parce qu’une personne appuyant sur un bouton n’est pas le service planifié. Il est consigné parce que cela reste du trafic vers la machine de quelqu’un, et mille appuis par heure sont exactement ce qu’un système d’usage doit pouvoir montrer. Une seconde table qu’aucun récapitulatif ne consulte cacherait précisément le cas où le chiffre devient intéressant.

Ce qui sépare les deux n’est pas une convention mais une contrainte dans la base : une ligne de type manuel ne peut ni compter ni porter de tic. « Manuel et comptabilisé » ne peut pas exister, et cela importe parce qu’une telle ligne paraît parfaitement ordinaire dans n’importe quel récapitulatif.

Une heure ferme tard, puis ne change plus jamais

Les seaux vont par organisation, par heure, par classe de source et par type de contrôle. Une heure n’est refermée qu’une fois quinze minutes de l’heure suivante écoulées.

La raison évidente, un résultat de mesure tardif, n’est pas la vraie ; les résultats ne touchent pas le total. Ce qui peut réellement arriver tard, c’est la ligne elle-même : une transaction validée à 10:59:59 devient visible à 11:00:00, plusieurs passerelles lisent chacune leur horloge, et l’une d’elles brièvement absente rattrape ensuite son retard. Quinze minutes, c’est un ordre de grandeur de plus que tout ce qu’un contrôle peut durer, où le délai maximal est de 120 secondes et la réservation de 45.

Une fois refermée, une heure n’est pas modifiée. Un événement tardif produit une nouvelle ligne qui pointe vers la ligne de base avec un motif lisible par machine, jamais une mise à jour. C’est la forme qui l’impose et non la discipline : l’index unique sur organisation, heure, classe de source et type est partiel et ne couvre que les lignes qui ne sont pas des corrections, de sorte qu’une seconde correction sur la même heure n’entre pas en conflit avec la première et ne disparaît pas. Si les corrections partageaient cet index, ce serait exactement la preuve utile en cas de litige qui se perdrait. Le motif lui-même est un mot et non une phrase libre, car le panneau le traduit en neuf langues et un export regroupe dessus.

Des limites qui ne sont pas un tarif

Chaque organisation dispose d’une marge autorisée, et chaque chiffre à l’intérieur a été choisi pour arrêter un accident, non pour décrire une offre.

Au plus 200 règles, délibérément le même chiffre que la fonction de création imposait déjà : une valeur par défaut plus basse aurait poussé des comptes existants au-delà de leur limite dès le premier jour et déclenché la règle de mise en pause ci-dessous sans annonce. Au plus 9 sources par règle, soit les huit emplacements hébergés plus un agent que le schéma autorisait déjà. Tous les types de contrôle connus, dérivés de cette liste plutôt qu’énumérés à la main, pour qu’un septième type ne soit pas interdit par défaut à tout le monde. Un plancher de 60 secondes, qu’une marge peut relever et jamais abaisser ; l’abaisser est un droit payant distinct qui porte un nom et n’existe pas.

Le numéro de révision de cette ligne est ce qui arrive dans le grand livre, et zéro signifie « il n’y a pas de ligne, ceci est la valeur par défaut ». Sans cette distinction, une ligne d’usage de l’an dernier ne peut pas être rattachée à ce qui était permis alors, et c’est bien pour cela qu’une révision est conservée.

Ce qui se met en pause quand la marge se réduit

Si quelqu’un abaisse une marge en dessous de ce qu’un compte utilise, des règles s’arrêtent. Lesquelles est une décision, et il y avait deux candidates.

Les plus chères d’abord est impossible, car il n’y a pas de prix. Il faudrait déduire le coût du nombre de sources ou de l’intervalle, et alors c’est la surveillance la plus fine du client qui se met en pause. Qui réduit son offre préfère perdre une mesure périphérique plutôt que l’alerte qui le réveille la nuit.

Ce sont donc les règles les plus anciennes qui continuent et les plus récentes qui s’arrêtent. Les anciennes portent le plus long historique d’incidents et les alertes sur lesquelles les gens comptent, et « ce que vous avez allumé en dernier s’éteint en premier » est le seul ordre qu’un client peut prévoir sans lire notre code. Le tri se fait par date de création puis par identifiant de règle, deux clés parce qu’appliquer un modèle crée plusieurs règles dans la même milliseconde ; sans ce second critère, l’aperçu ne correspondrait pas à ce qui se produit ensuite.

Les règles qui enfreignent une limite de forme, un type interdit, des sources hébergées qui ne sont plus permises, trop de sources, sont retirées d’abord puis comptent dans ce qui reste. Un intervalle devenu trop rapide ne met rien en pause du tout : un plancher relevé refuse une règle nouvelle ou modifiée et laisse tranquilles celles qui tournent, jusqu’à ce que quelqu’un y touche.

La colonne vide

Les seaux ont une colonne invoice_ref et elle est vide. C’est une couture nommée et non un oubli, dans le même esprit que le droit qui porte un nom sans implémentation : quand la facturation arrivera, la forme dont elle a besoin sera déjà là, et rien du comptage n’aura à être revu sous la pression d’une échéance.

Deux décisions voisines suivent le même raisonnement. Le grand livre a sa propre table plutôt qu’une dérivation des tics, car les tics vivent sept jours et ceci 395. Et les lignes par contrôle sont laissées hors de l’export de données personnelles, avec le motif écrit à côté : des centaines de milliers par mois, un export qui coupe chaque section à 25 000 lignes, et des seaux horaires qui portent les mêmes totaux. Les seaux et la ligne de limites, eux, sont bien inclus.

Ce que nous noterions

  1. Construisez le compteur avant le prix. Toute question se tranche plus honnêtement quand aucun total n’en dépend.
  2. Consignez au moment où le travail part, non quand la réponse arrive, et une réponse tardive cesse d’être un problème de mesure.
  3. Faites survivre la clé d’idempotence à son sujet. Une clé posée sur une ligne qui sera balayée se met à tolérer des doublons selon un calendrier.
  4. Énumérez chaque issue dans un tableau. Une branche par défaut transforme un état neuf en zéro silencieux.
  5. Les corrections sont des lignes, jamais des modifications, et l’unicité qui protège l’original ne doit pas bloquer la correction.
  6. Choisissez l’ordre que votre client peut prévoir, et notez celui que vous avez écarté.

Pour être clair sur ce dont il s’agit : la supervision est derrière un commutateur de déploiement désactivé par défaut, il n’y a pas de couche de droits contenant de l’argent, et rien de tout cela n’est achetable aujourd’hui. Deux choses restent non prouvées. Le balayage de rétention n’a jamais tourné contre une ligne réellement ancienne, seulement contre le schéma. Et le composant qui referme les heures a été éprouvé par sa fonction et non par un processus de longue durée : une passerelle absente une nuit et qui rattrape son retard est donc raisonnée et non observée.

Issu du travail de supervision sur Provibr. Pourquoi une sonde ne porte aucun droit dont elle n’a pas besoin est dans une sonde qu’on ne peut convaincre de rien, et pourquoi un incident ne se referme pas parce que les mesures cessent est dans un incident qui ne se ferme jamais sur un silence.

Commencez avec un hôte et un agent

Créez un compte, installez l’agent avec une seule commande et connectez votre premier hôte Proxmox. La période d’essai dure 14 jours et ne demande aucune coordonnée de paiement.