2012-12-06 3 views
11

Ich verwende statsD, um Zählerdaten an Graphit zu melden; sendet jedes Mal ein Häkchen, wenn ich eine Nachricht bekomme. Das funktioniert großartig, außer in der Situation, in der statsD aus welchem ​​Grund auch immer neu starten muss. Dann bekomme ich große Löcher in meinen Graphen, da statsD nun nicht mehr alle 10 Sekunden '0' sendet, wenn ich keine Nachrichten bekomme.Gibt es eine Möglichkeit, fehlende Daten in Graphit zu füllen, wenn statsD verwendet wird?

Ich berichte für verschiedene verschiedene Nachrichtentypen und Warteschlangen, und manchmal bekomme ich eine Nachricht für eine bestimmte Warteschlange für eine lange Zeit nicht.

Gibt es eine Möglichkeit, die fehlenden Daten mit einem von mir angegebenen Standardwert zu füllen (in meinem Fall wäre das 0)?

Ich dachte über das Senden einer "0" -Zählung für eine bestimmte Metrik, so dass statsD beginnt, Nullen dafür zu senden, aber ich weiß nicht immer die Menge der Metriken, die ich im Voraus melden werde.

+0

Stellt sich heraus, es ist eine Funktion, die genau das tun, was ich will. Obwohl @ALQ darauf hinweist, ist es wichtig zu wissen, dass es Aggregate beeinflussen würde; transformNull(). – BigBen

Antwort

7

Wenn Sie das visuelle Diagramm nur mit Nullen "ausfüllen" möchten, sehen Sie sich "Diagrammoptionen -> Linienmodus -> Null als Null zeichnen" an. Dadurch können Sie keinen anderen Wert als 0 festlegen, und es werden keine Nullen angezeigt, wenn Sie die Daten im JSON- oder CSV-Format erhalten, aber es ist oft das, was Sie wollen, wenn Sie nur ein Diagramm mit einigen sehen möchten Strecken, wo keine Daten aufgezeichnet werden.

without Draw Null as Zero

With Draw Null as Zero

10

Sie können die Funktion "keepLastValue (requestContext, serialList)" in Graphite verwenden, um mit fehlenden Daten umzugehen. Es "fügt die Zeile mit dem letzten empfangenen Wert ein, wenn Lücken ('Keine' Werte) in Ihren Daten angezeigt werden, anstatt Ihre Zeile zu unterbrechen."

+0

Das ist ausgezeichnet! Nicht ganz was ich will, da ich 0 anstatt den letzten Wert melden möchte. In den meisten Fällen ist der Wert jedoch 0, so dass dies für den Moment funktioniert. Vielen Dank! – BigBen

+2

Um nicht pedantisch zu sein, wird das Senden von 0 anstelle von "keine Daten" eine abschwächende Wirkung auf Ihre Aggregate (Quantile, Durchschnitt) haben. –

+1

@ALQ, überhaupt nicht pedantisch, danke für die Erinnerung. – BigBen

16

Überprüfen Sie die Funktion aus, die transformNull Graphite bietet. z.B.

transformNull(stats.timers.deploys.all.duration.total.mean, 0) 

Diese Kartenausschnitte mit Null-Daten auf 0

2

Die Lösung für dieses Problem ist nicht den letzten Wert zu halten oder NULL-Werte zu transformieren. Die Implementierung einer dieser Optionen führt nur dazu, dass Sie falsche Daten anzeigen, und Sie werden nicht benachrichtigt, wenn etwas nicht in Ordnung ist.

Sie müssen Ihr Speicherschema so ändern, dass es die gesendete Datenmenge speichert, und nicht mehr.

Wenn Messwerte alle 5s gesendet werden und Ihr Speicherschema 1s angibt, erhalten Sie fünf Datenpunkte, von denen vier null sind.

Schauen Sie sich diese doc: https://github.com/etsy/statsd/blob/master/docs/graphite.md

Verwandte Themen