2016-06-30 22 views
5

Korzystam z danych kodahale (obecnie metryki dropwizard), aby monitorować kilka "zdarzeń" zachodzących w moim systemie. Korzystam z danych counters, aby śledzić czas, w którym wydarzenie miało miejsce.Dane Dropwizard - Jak zresetować liczniki po interwale raportów

Sprawdziłem wartości wydrukowane przez reportera dla mojego metryki licznika i wygląda na to, że wartość stale rośnie (i nigdy nie spada). Wydaje się to logiczne, ponieważ zawsze korzystam z funkcji metics.inc() za każdym razem, gdy pojawia się moje "zdarzenie".

What I really want is to get count of my 'event' happening between two reporting times, w tym celu muszę zresetować licznik za każdym razem, gdy zgłaszam dane, ale nie mogłem znaleźć żadnej opcji w metrach licznika, aby to zrobić. Czy istnieje sposób lub ogólna praktyka stosowana przez użytkowników codahale do generowania takich wskaźników?

Aktualny Zachowanie (raportowanie czasu 10 sek):

00:00:00 0 
00:00:10 2 // event happened twice 
00:00:20 2 // event did not occur 
00:00:30 5 // event occured three times` 

Oczekiwane wskaźniki:

00:00:00 0 
00:00:10 2 
00:00:20 0 
00:00:30 3 

Odpowiedz

1

wierzę, że counter nie jest poprawne dane dla swojej sprawy. Rozważyć użycie meter który zapewni Ci stawkę za przedziale czasowym:

while(...) { 
    int stuffProcesssed = doStuff(); 
    meter.mark(stuffProcesssed); 
} 
+0

Podczas gdy mark.meter podaje ostatnie minuty minut i wskaźnik przeciążenia (lub od uruchomienia aplikacji), nie ma możliwości wyboru arbitralnego interwału. – Sasha

1

Reasumując lub obliczyć liczbę (łącznie) za arbitralne przedziale:

hitcount(perSecond(your.count), '1day') 

AFAIK robi całą czarną magię wewnątrz. Obejmuje to, ale nie wyłącznie, summarize(scaleToSeconds(nonNegativeDerivative(your.count),1), '1day') , a także powinno być skalowanie zgodnie z okresami retencji węgla (jednym lub wieloma), które mieszczą się w wybranym interwale agregacji.