Zum Inhalt springen

Blog ·

Ein Hauptbuch, das vor jedem Preis zählt

Monitoring erzeugt für jede Prüfung eine Zahl, lange bevor es einen Preis gibt. So haben wir zuerst das Zählen gebaut, und warum diese Reihenfolge sicher ist.

Von Provibr

Auf Monitoring liegt kein Preis. Kein Betrag, keine Währung, kein Tarif, keine Rechnungszeile. Was es seit dieser Runde gibt, ist ein Hauptbuch, das jede tatsächlich versendete Prüfung festhält, sie dreizehn Monate aufbewahrt und jede Stunde in einen Eimer schließt, der danach nie wieder bearbeitet wird.

Das Zählen vor dem Abrechnen zu bauen wirkt wie die falsche Reihenfolge, bis man es einmal andersherum gemacht hat. Ein Zähler, der neben einer Rechnung entsteht, erbt jede Bequemlichkeit, die diese Rechnung sich wünscht: einen Wiederholungsversuch, der stillschweigend mitgezählt wird, weil die Summe sonst seltsam aussah, eine Korrektur, die als Änderung an der Zeile ausgeführt wird. Das sind Entscheidungen, und sie lassen sich leichter gut treffen, wenn keine Summe davon abhängt.

Das Hauptbuch gibt es also, es enthält kein Geld, und eine Spalte darin ist absichtlich leer.

Gezählt wird, was tatsächlich hinausging

Eine geplante Prüfung durchläuft wenige Zustände, und das Hauptbuch stellt je Zustand eine Frage: ist Verkehr das Haus verlassen. Das steht als Tabelle über jeden Ausgang und nicht als Verzweigung mit einem Standardzweig, denn ein Standardzweig ist genau der Weg, auf dem ein siebter Ausgang stillschweigend zu „zählt nicht“ wird und ein Monat fehlt.

AusgangZeile geschriebenZählt mitWarum
geplantneinneinder Slot ist reserviert, es wurde noch nichts gesendet
beanspruchtneinneinbeansprucht, aber nicht gesendet; die Zeile entsteht beim Versand
gesendetjajaeine Prüfung ist wirklich hinausgegangen
abgeschlossenjajafertig; die Zeile gab es schon beim Versand
ausgefallenneinneinnie gesendet: kein Agent, keine gesunde Sonde, Wartung oder ein verstrichener Slot
abgelaufenneinneindie Frist verstrich, ohne dass etwas hinausging

Zwei dieser Zeilen verdienen einen eigenen Satz.

Eine Prüfung, die eine tote Maschine erreicht, zählt mit. Es gab Verkehr und es gab eine Messung; dass die Antwort „down“ lautet, ist das Ergebnis und nicht die Frage. Eine Regel, die nur erfolgreiche Prüfungen zählt, würde am wenigsten bei den Kunden berechnen, für die am härtesten gearbeitet wird.

Und „abgelaufen“ ist feiner, als es aussieht, denn eine Anfrage kann ablaufen, nachdem sie gesendet wurde. Doppelt gezählt wird nicht, und das nicht zufällig: ein Tick erreicht diesen Zustand nur über den Durchlauf, der Ticks berührt, die den Versandschritt nie erreicht haben, und was hinausging, stand bereits auf gesendet und hat seine Zeile längst.

Die Quellklasse, unsere eigene Sonde oder der Agent des Kunden, steht in der Zeile und in der Signatur der entscheidenden Funktion. Beide zählen heute gleich, und gerade deshalb ist die Klasse aufgeschrieben und nicht angenommen.

Ein Tick, eine Zeile

Ein Failover ist der Fall, der eine Nutzungszahl still aufbläht. Eine Prüfung läuft von einer Quelle, diese Quelle ist nicht erreichbar, eine andere übernimmt, und nun gibt es zwei Versuche für eine Messung.

Hier ist das ein eindeutiger Index auf einem Schlüssel der Form tick:<Tick-Kennung>. Wiederholungen und Failover innerhalb desselben Ticks ergeben denselben Schlüssel, die zweite Einfügung kollidiert also und liefert nichts zurück. Beide Schreibwege tun das; keiner schaut vorher nach, denn zwischen ein Nachsehen und ein Einfügen passt ein zweites Gateway.

Der Schlüssel ist eine Textspalte und nicht der Verweis auf den Tick, und das ist der interessante Teil. Ticks bleiben sieben Tage, Nutzung dreizehn Monate. Räumt der Durchlauf den Tick weg, wird der Verweis leer, und in Postgres ist ein leerer Wert nie gleich einem anderen leeren Wert; ein eindeutiger Index auf dieser Spalte würde eine Woche später still Doppelzählungen erlauben.

Ein manueller Test ist auch Verkehr

Es gibt eine Schaltfläche, die sofort eine Prüfung ausführt. Sie zählt nicht mit, und sie wird trotzdem festgehalten.

Beide Hälften sind wichtig. Sie zählt nicht, weil ein Mensch an einer Schaltfläche nicht der geplante Dienst ist. Sie wird festgehalten, weil es weiterhin Verkehr zur Maschine von jemandem ist, und tausend Klicks pro Stunde sind genau das, was ein Nutzungssystem zeigen können muss. Eine zweite Tabelle, in die keine Übersicht schaut, würde ausgerechnet den Fall verbergen, in dem die Zahl interessant ist.

Was die beiden trennt, ist keine Absprache, sondern eine Prüfbedingung in der Datenbank: eine Zeile der Art „manuell“ darf nicht mitzählen und keinen Tick tragen. „Manuell und mitzählend“ kann nicht existieren, und das ist wichtig, weil eine solche Zeile in jeder Auswertung völlig gewöhnlich aussieht.

Eine Stunde schließt spät und ändert sich danach nie mehr

Eimer gehen je Organisation, Stunde, Quellklasse und Prüfungsart. Eine Stunde wird erst geschlossen, wenn fünfzehn Minuten der folgenden Stunde vorbei sind.

Der naheliegende Grund, ein spätes Messergebnis, ist nicht der eigentliche; Ergebnisse berühren die Summe nicht. Wirklich spät kommen kann die Zeile selbst: eine Transaktion, die um 10:59:59 abschließt, wird um 11:00:00 sichtbar, mehrere Gateways lesen jeweils ihre eigene Uhr, und eines, das kurz weg war, holt hinterher auf. Fünfzehn Minuten sind eine Größenordnung mehr als alles, was eine einzelne Prüfung dauern darf, wo die höchste Zeitgrenze 120 Sekunden und die Reservierung 45 beträgt.

Ist eine Stunde geschlossen, wird sie nicht bearbeitet. Ein spätes Ereignis erzeugt eine neue Zeile, die mit einem maschinenlesbaren Grund auf die Grundzeile zeigt, niemals eine Änderung. Das erzwingt die Form und nicht die Disziplin: der eindeutige Index über Organisation, Stunde, Quellklasse und Prüfungsart ist partiell und gilt nur für Zeilen, die keine Korrektur sind, damit eine zweite Korrektur derselben Stunde nicht mit der ersten kollidiert und verschwindet. Teilten sich Korrekturen diesen Index, ginge genau der Beleg verloren, den man in einer Auseinandersetzung braucht. Der Grund selbst ist ein Wort und kein freier Satz, denn das Panel übersetzt ihn in neun Sprachen und ein Export gruppiert danach.

Grenzen, die keine Preisliste sind

Jede Organisation hat einen zulässigen Rahmen, und jede Zahl darin wurde gewählt, um einen Unfall zu verhindern, nicht um ein Paket zu beschreiben.

Höchstens 200 Regeln, absichtlich dieselbe Zahl, die die Anlegefunktion bereits erzwang: ein niedrigerer Standardwert hätte bestehende Konten am ersten Tag über ihre Grenze geschoben und die Pausenregel unten ohne Ankündigung auslösen lassen. Höchstens 9 Quellen je Regel, also die acht gehosteten Standorte plus ein Agent, die das Schema ohnehin erlaubte. Alle bekannten Prüfungsarten, aus dieser Liste abgeleitet statt ausgeschrieben, damit eine siebte Art nicht standardmäßig für alle verboten ist. Eine Untergrenze von 60 Sekunden, die ein Rahmen anheben und nie senken darf; senken ist ein eigenes bezahltes Recht, das einen Namen hat und nicht existiert.

Die Revisionsnummer dieser Zeile landet im Hauptbuch, und null bedeutet „es gibt keine Zeile, dies ist der Standard“. Ohne diese Unterscheidung lässt sich eine Nutzungszeile aus dem Vorjahr nicht auf das zurückführen, was damals erlaubt war, und genau dafür wird eine Revision gespeichert.

Was pausiert, wenn der Rahmen kleiner wird

Wird ein Rahmen unter das gesenkt, was ein Konto nutzt, halten Regeln an. Welche, ist eine Entscheidung, und es gab zwei Kandidaten.

Die teuerste zuerst geht nicht, denn es gibt keinen Preis. Es hieße, „teuer“ aus der Zahl der Quellen oder dem Intervall abzuleiten, und dann pausiert genau die schärfste Überwachung, die der Kunde hat. Wer seinen Tarif verkleinert, verliert lieber eine Randmessung als die Meldung, die ihn nachts weckt.

Also laufen die ältesten Regeln weiter und die neuesten pausieren. Die ältesten tragen die längste Vorfallgeschichte und die Meldungen, auf die sich Menschen verlassen, und „was zuletzt eingeschaltet wurde, geht zuerst aus“ ist die einzige Reihenfolge, die ein Kunde vorhersagen kann, ohne unseren Code zu lesen. Sortiert wird nach Anlegezeit und dann nach Regelkennung, zwei Schlüssel, weil eine Vorlage mehrere Regeln in derselben Millisekunde anlegt; ohne das zweite Merkmal stimmt die Vorschau nicht mit dem überein, was danach geschieht.

Regeln, die eine Grenze ihrer Form verletzen, eine verbotene Prüfungsart, gehostete Quellen, die nicht mehr erlaubt sind, zu viele Quellen, werden zuerst entfernt und zählen danach in dem mit, was übrig bleibt. Ein Intervall, das jetzt zu schnell ist, pausiert gar nichts: eine angehobene Untergrenze weist eine neue oder geänderte Regel ab und lässt laufende in Ruhe, bis jemand sie anfasst.

Die leere Spalte

Eimer haben eine Spalte invoice_ref, und sie ist leer. Es ist eine benannte Naht und keine Nachlässigkeit, im selben Geist wie das Recht, das einen Namen und keine Umsetzung hat: kommt die Abrechnung, steht die von ihr benötigte Form bereits da, und am Zählen muss unter Termindruck nichts überdacht werden.

Zwei verwandte Entscheidungen folgen derselben Überlegung. Das Hauptbuch hat eine eigene Tabelle statt einer Ableitung aus den Ticks, denn Ticks leben sieben Tage und dies 395. Und die Zeilen je Prüfung fehlen absichtlich im Export personenbezogener Daten, mit dem Grund daneben aufgeschrieben: Hunderttausende pro Monat, ein Export, der je Abschnitt bei 25.000 Zeilen endet, und Stundeneimer, die dieselben Summen tragen. Eimer und Rahmenzeile gehen sehr wohl mit.

Was wir aufschreiben würden

  1. Bauen Sie den Zähler vor dem Preis. Jede Frage lässt sich ehrlicher beantworten, wenn keine Summe davon abhängt.
  2. Buchen Sie in dem Moment, in dem die Arbeit hinausgeht, nicht wenn die Antwort kommt, und eine späte Antwort ist kein Messproblem mehr.
  3. Lassen Sie den Idempotenzschlüssel sein Subjekt überleben. Ein Schlüssel auf einer Zeile, die weggeräumt wird, erlaubt nach Zeitplan Doppelungen.
  4. Zählen Sie jeden Ausgang in einer Tabelle auf. Ein Standardzweig macht aus einem neuen Zustand eine stille Null.
  5. Korrekturen sind Zeilen, nie Änderungen, und die Eindeutigkeit, die das Original schützt, darf die Korrektur nicht blockieren.
  6. Wählen Sie die Reihenfolge, die Ihr Kunde vorhersagen kann, und schreiben Sie auf, welche Sie verworfen haben.

Zur Klarheit darüber, was das ist: Monitoring liegt hinter einem Ausrollschalter, der standardmäßig aus ist, es gibt keine Rechteebene mit Geld darin, und nichts davon ist heute käuflich. Zwei Dinge sind unbewiesen. Der Aufräumdurchlauf lief nie gegen eine wirklich alte Zeile, nur gegen das Schema. Und die Komponente, die Stunden schließt, wurde über ihre Funktion erprobt und nicht über einen langlaufenden Prozess; ein Gateway, das eine Nacht fehlt und aufholt, ist somit durchdacht und nicht beobachtet.

Aus der Monitoringarbeit an Provibr. Warum eine Sonde keine Rechte trägt, die sie nicht braucht, steht in eine Sonde, die sich zu nichts überreden lässt, und warum ein Vorfall nicht schließt, weil die Messungen aufhörten, steht in ein Vorfall, der nicht bei Stille schließt.

Fangen Sie mit einem Host und einem Agenten an

Konto erstellen, den Agenten mit einem einzigen Befehl installieren und Ihren ersten Proxmox-Host verbinden. Die Testphase läuft 14 Tage und fragt nicht nach Zahlungsdaten.