Mein Name ist Daniel, Ich bin ein Newcomer accountwise aber eine lange Zeit lurker. Ich beschloss, Apache Cassandra für meine nächsten "lets write schreiben Code, während die Kinder schlafen" -Projekt zu lernen.Wie man Cassandra DB für Time Series, Servermetriken modelliert
Was ich schreibe ist eine nette kleine API, die Lesen und Schreiben gegen eine Cassandra-Datenbank tun wird. hatte ich eine Menge der db-Layout in mongodb herausgefunden, aber für mich ist es Zeit, auf und wachsen als Ingenieur zu bewegen :)
Mission: I-Metriken von den Servern in meinem Rack sammeln, wird ein Agent senden Sie eine Payload von Metriken jede Minute. Ich habe den API-Teil ziemlich viel herausgefunden, werde JWT-Tokens verwenden, die die Nutzdaten signieren. Die Art der Daten, die ich speichern werde, kann unten gesehen werden. cpuload, CPUUsage, memusage, Usage usw.
Der Teil, wo ich mit cassandra bin verwirrt ist, wie das eigentliche Modell zu schreiben, verstehe ich die storagengines Art schreibt sie alle als Zeitreihe auf der Festplatte für mich machen liest schon erstaunlich. Ich weiß, alles, was ich würde zusammen peitschen jetzt würde für mein Labor arbeiten, da es nur 30 Maschinen, ist, aber ich versuche zu verstehen, wie diese Dinge richtig gemacht werden und wie es für ein reales Leben Szenario wie Serverdichte, Datadog getan werden konnte, "Fügen Sie Ihren bevorzugten Server-Überwachungsdienst ein". :)
Aber wie haben Sie erfahrene Ingenieure, die ein solches Schema entwerfen?
Einsatzszenarien für die Datenbank:
- Schreib Nutzlasten jeder Minute durch die api. (Lässt sich vorstellen, das ist atleast 100k schreibt pro Minute aus Gründen der etwas nützliche Lern)
Lesen Sie die Vermögenswerte im Zusammenhang mit denen Benutzer-ID
- Pull neuesten Daten (3h)
- Pull neuesten Daten (täglich)
- neuesten Daten (wöchentlich)
- Pull neuesten Daten (monatlich) ziehen
- etc etc
Generieren Sie monatliche PDF-Berichte, die die Betriebszeit und ähnliches anzeigen.
Sollte ich legen Sie die Zeilen die volle Nutzlast enthält, oder bin ich besser von ihnen pro Service-Basis einfügen: timeuid | CPUUsage
für den Dienst Reihe
CREATE TABLE metrics(
id uuid PRIMARY KEY,
assetid int,
serviceType text,
metricValue int
)
Alles in einem
CREATE TABLE metrics(
id uuid PRIMARY KEY,
assetid int,
cpuload int,
cpuusage int,
memusage int,
diskusage int,
)
In Mongo würde ich die Eimer vorallocate, und auch eine schnelle lesen avg innerhalb der Dokument. Also im Webgui konnte ich einfach die avg stats für vordefinierte Zeiträume zeigen.
Beispiele für Dummköpfe werden sehr geschätzt. Hoffe du kannst mein eher schlechtes Englisch entziffern.
Gerade gefunden diese URL in der SO Vorschläge: Cassandra data model for time series Ich denke, das ist etwas, das für mich auch gilt.
Sincerly Daniel Olsson