2014-11-06 24 views
8

Ich verwende Graphite + Statsd (mit Python-Client), um benutzerdefinierte Metriken von einer Webanwendung zu sammeln: ein Zähler für erfolgreiche Transaktionen. Nehmen wir an, der Zähler ist stats.transactions.count, der auch eine Rate/pro Sekunde-Metrik bei stats.transactions.rate zur Verfügung hat.Wie in Seyren mit Graphite zu alarmieren, wenn Transaktionen in den letzten 60 Minuten weniger als x sind?

Ich habe auch Seyren als Monitor + Alarmsystem eingerichtet und Metriken erfolgreich aus Graphite gezogen. Jetzt Ich möchte einen Alarm in Seyren einrichten, wenn die Anzahl der erfolgreichen Transaktionen in den letzten 60 Minuten weniger als ein bestimmtes Minimum ist.

Welche metrische und Graphite Funktion sollte ich verwenden? Ich habe versucht mit summarize(metric, '1h'), aber dies gibt mir eine Warnung jede Stunde, wenn Graphite beginnt, die Metrik für die Startstunde zu aggregieren.

Beachten Sie, dass Seyren auch die Parameter from und until von Graphite angeben kann, wenn dies hilft.

Antwort

14

Ich habe den Seyren-Code zur Unterstützung from/until beigetragen, um diese genaue Situation zu behandeln. summarize (nonNegativeDerivative (stats.transactions.count:

Die folgende Konfiguration eine Warnung, wenn die Zählung für die letzte Stunde 50, und ein Fehler, wenn es fällt unter sinkt unter 25.

  • Ziel erhöhen sollte), "1h", "Summe", true)
  • Von: -1h
  • An: [blank]
  • Warn: 50 (soft Minimum)
  • Fehler: 25 (Fest Minimum)

Hinweis dies jede Minute laufen, so dass die "letzte Stunde" ist eine gleitende Skala. Beachten Sie auch, dass der dritte boolesche Parameter true für die summarize-Funktion es anweist, seinen 1h-Bucket an From auszurichten, was bedeutet, dass Sie einen vollen 1-Stunden-Bucket ab 1 Stunde erhalten, anstatt versehentlich einen halben Bucket zu bekommen. (Neuere Versionen von Graphite können dies automatisch tun.)

Ihre Laufleistung kann variieren. Ich hatte Probleme mit diesem Ansatz, wenn der Zähler beim Serverneustart auf 0 zurückgesetzt wird. Aber in meinem Fall verwende ich Dropwizard Metriken + Graphit, nicht Statistik + Graphit, so dass Sie dieses Problem möglicherweise nicht haben.

Bitte lassen Sie mich wissen, ob dieser Ansatz für Sie funktioniert!

+3

Danke! Ich habe integral (transformNull (stats.transactions.count, 0)) von -1h zu [leer] verwendet, um ein ähnliches Ergebnis zu erzielen. Vielleicht können wir ein paar Beispiele für die Seyren-Dokumente beisteuern? – dukebody