Performance Statistiken in Elasticsearch speichern

Falc410

Vice Admiral
Registriert
Juni 2006
Beiträge
6.640
Ich habe ein Python Script welches täglich in einem Docker Container ausgeführt wird. Das Script bekommt eine Liste von Tasks die der Reihe nach abgearbeitet werden und die Ergebnisse werden dann in einer Elasticsearch gespeichert.

Ich möchte nun aber ein paar Statistiken speichern und später in Kibana oder Grafana darstellen und zwar möchte ich wissen, wie lange die Ausführungszeit pro Task war, wie viele Tasks übergeben worden sind und wie lange die komplette Ausführung gedauert hat. Eigentlich ganz simpel, ich bin nur unsicher wie ich das am sinnvollsten speichere.
Ich hätte jetzt in das Python Script in die for-Loop einfach eine Variable eingebaut, die die Zeit misst und dann am Ende in die Elasticsearch schreibt. Also ungefähr diese Datenstruktur:
JSON:
{
    "scriptname": "script1"
    "task-id": "1"
    "anzahl-tasks": "42"
    "execution-time": "1337",
    "execution-date": "20230822"
},
{
    "scriptname": "script1"
    "task-id": "2"
    "anzahl-tasks": "42"
    "execution-time": "4242",
    "execution-date": "20230822"
}
Dann hätte ich später in der Elasticsearch für eine komplette Ausführung 42 Einträge in diesem Beispiel und könnte mir doch die Summe der Execution Time anschauen. Aber ich möchte eben auch wissen ob sich die Laufzeiten an manchen Tagen unterscheiden für bestimmte Task IDs - also braucht Montag vielleicht Task ID 5 deutlich länger am nächsten Tag.

Geht das so, oder müsste ich noch etwas beachten?
 
Ein paar Tips (falls du es nicht eh schon gemacht hast):
Deine Time (in s oder ms) als echte Nummer speichern für Range Lookup
Deine Execution Time als entsprechenden Date Typen speichern.

Das was du willst, also outlier erkennen, geht sehr schnell in die ML Teile von ES, siehe zb:
https://www.elastic.co/guide/en/machine-learning/current/ml-dfa-finding-outliers.html

Da musst du aufpassen, die erfordern teilweise explizite Indexstrukturen, d.h. spiel deren Beispiel mit deinen Daten durch und schau ob's geht.

Anmerkung noch: Afaik ist der ML Teil nicht bei der Basic Lizenz von ES dabei.
 
  • Gefällt mir
Reaktionen: Falc410
Danke, dann bin ich wohl auf dem richtigen Weg. Ja der ML Teil kostet extra leider. Im ersten Schritt reicht es auch wenn ich das manuell auswerten kann, in dem ich die Werte plotte.
 
Jo, ggf. reicht ja Histogramm mit groß genugen Buckets, also z.b. wenns in Millisekunden ist, 1000ms Buckets, und dann einfach schauen ob es was im Bucket > 10000 gibt oder so. Das sagt dir dann zwar nicht wer es war, aber dann halt query machen.
 
Zurück
Oben