Есть ли способ заполнить недостающие данные в графите при использовании statsD?

Я использую statsD для передачи данных счетчика в graphite; отправляет галочку каждый раз, когда я получаю сообщение. Это прекрасно работает, за исключением ситуации, когда statsD по какой-либо причине должен перезапуститься. Затем я получаю огромные дыры в своих графиках, так как statsD больше не отправляет «0» каждые 10 секунд в периоды, когда я не получал никаких сообщений.

Я отчитываюсь о различных типах сообщений и очередях, и иногда я не получаю сообщения для определенной очереди в течение длительного времени.

Существует ли какой-либо существующий способ «заполнить» отсутствующие данные значением по умолчанию, которое я укажу (в моем случае это будет 0)?

Я подумал о том, чтобы отправить значение «0» для данной метрики, чтобы statsD начал отправлять для нее 0, но я не всегда заранее знаю, какой набор метрик я буду сообщать.


person BigBen    schedule 06.12.2012    source источник
comment
Оказывается, есть функция, которая будет делать именно то, что я хочу. Хотя, как указывает @ALQ, важно знать, что это повлияет на агрегаты; трансформироватьНулл().   -  person BigBen    schedule 12.12.2012


Ответы (4)


Если вы просто хотите «заполнить» визуальный график нулями, посмотрите «Параметры графика» -> «Режим линии» -> «Рисовать ноль как ноль». Это не позволит вам установить значение, отличное от 0, и не приведет к отображению 0, если вы получите данные в формате json или csv, но часто это то, что вам нужно, если вы просто хотите увидеть график с некоторыми участки, где данные не записываются.

без рисования нуля как нуля

С отрисовкой нуля как нуля

person mmrobins    schedule 12.12.2012

Ознакомьтесь с функцией transformNull, которую предоставляет Graphite. например

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

Это сопоставит разделы с нулевыми данными с 0.

person ferrouswheel    schedule 28.06.2013

Вы можете использовать функцию «keepLastValue (requestContext, seriesList)» в графите для обработки отсутствующих данных. Он «[c] продолжает строку с последним полученным значением, когда в ваших данных появляются пробелы (значения «Нет»), а не разрывает вашу строку».

person perfectfromnowon    schedule 06.12.2012
comment
Это отлично! Не совсем то, что я хочу, так как я хочу иметь возможность сообщать 0, а не последнее значение. Однако чаще всего значение равно 0, поэтому на данный момент это будет работать. Спасибо! - person BigBen; 06.12.2012
comment
Чтобы не быть педантичным, отправка 0 вместо отсутствия данных окажет понижающий эффект на ваши агрегаты (квантили, среднее значение). - person Alexis Lê-Quôc; 07.12.2012

Решение этой проблемы не в том, чтобы сохранять последнее значение или преобразовывать нули. Реализация одного из этих вариантов приведет только к отображению неверных данных, и вы не будете предупреждены, если что-то не так.

Вам нужно изменить схему хранения так, чтобы в ней хранился тот объем данных, который вы отправляете, и не более того.

Если метрики отправляются каждые 5 с, а ваша схема хранения указывает 1 с, вы получите пять точек данных, четыре из которых будут нулевыми.

Ознакомьтесь с этим документом: https://github.com/etsy/statsd/blob/master/docs/graphite.md

person mdandr    schedule 13.05.2016