2012-12-06 8 views
11

Używam statsD do raportowania danych licznika do grafitu; wysyła tick za każdym razem, gdy otrzymam wiadomość. Działa to świetnie, z wyjątkiem sytuacji, gdy statsD musi zostać uruchomiony ponownie z dowolnego powodu. Wtedy dostaję ogromne dziury na moich wykresach, ponieważ statsD nie wysyła już "0" co 10 sekund w okresach, kiedy nie otrzymałem żadnych wiadomości.Czy istnieje sposób na uzupełnienie brakujących danych grafitowych podczas korzystania ze statsD?

Zgłaszam dla różnych typów wiadomości i kolejek, a czasami nie otrzymuję wiadomości dla konkretnej kolejki przez długi czas.

Czy istnieje sposób "uzupełnienia" brakujących danych o wartość domyślną, którą określam (w moim przypadku byłaby to 0)?

Pomyślałem o wysłaniu liczby "0" dla danej miary, aby statsD zaczął wysyłać do niej 0, ale nie zawsze znam zestaw danych, które będę zgłaszał z góry.

+0

Okazuje się, że jest to funkcja, która zrobi dokładnie to, co chcę. Chociaż jak wskazuje @ALQ, ważne jest, aby wiedzieć, że wpłynie to na agregaty; transformNull(). – BigBen

Odpowiedz

7

Jeśli chcesz tylko "wypełnić" wizualny wykres zerami, spójrz na "Opcje wykresów -> Tryb linii -> Rysuj zero jako zero". To nie pozwoli ci ustawić wartości innej niż 0 i nie spowoduje to pojawienia się 0, jeśli otrzymasz dane w formacie json lub csv, ale często jest to, co chcesz, jeśli chcesz zobaczyć wykres z niektórymi rozciąga się, gdy nie rejestruje się żadnych danych.

without Draw Null as Zero

With Draw Null as Zero

10

Możesz użyć funkcji "keepLastValue (requestContext, seriesList)" na graficie, aby poradzić sobie z brakującymi danymi. To "[c] kontynuuje linię z ostatnią otrzymaną wartością, gdy przerwy (wartości" Brak ") pojawiają się w danych, zamiast przerywania linii."

+0

To świetnie! Nie do końca tego, czego chcę, ponieważ chcę mieć możliwość zgłaszania 0, a nie ostatniej wartości. Jednak częściej niż nie, wartość wynosi 0, więc to zadziała na chwilę. Dzięki! – BigBen

+2

Nie być pedantycznym, wysłanie 0 zamiast "brak danych" spowoduje obniżenie twoich agregatów (kwantyle, średnia). –

+1

@ ALQQ, nie pedantycznie, dzięki za przypomnienie. – BigBen

16

Wyjazd funkcję transformNull że Grafit przewiduje. na przykład

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

To będzie mapować sekcje danych zerowych na 0.

2

Rozwiązanie tego problemu nie jest aby zachować ostatnią wartość lub przekształcić wartości null. Wdrożenie jednej z tych opcji spowoduje wyświetlenie nieprawidłowych danych, a użytkownik nie zostanie ostrzeżony, gdy coś jest nie tak.

Należy zmienić schemat przechowywania, tak aby zapisywał on ilość wysyłanych danych i nic więcej.

Jeśli dane są wysyłane co 5 sekund, a schemat przechowywania mówi 1s, otrzymasz pięć punktów danych, z których cztery będą miały wartość zerową.

Sprawdź ten doc: https://github.com/etsy/statsd/blob/master/docs/graphite.md

Powiązane problemy