Есть ли способ заполнить недостающие данные в графите при использовании statsD?
Я использую statsD для отправки данных счетчику в графит; отправляет галочку каждый раз, когда я получаю сообщение. Это отлично работает, за исключением ситуации, когда statsD должен перезагружаться по любой причине. Затем я получаю огромные дыры на моих графиках, так как statsD теперь больше не отправляет "0" каждые 10 секунд для периодов, когда я не получал никаких сообщений.
Я сообщаю о различных типах сообщений и очередях, и иногда я не получаю сообщение для определенной очереди в течение длительного времени.
Существует ли какой-либо существующий способ "заполнить" отсутствующие данные значением по умолчанию, которое я указываю (в моем случае это будет 0)?
Я подумал о том, чтобы отправить счетчик "0" для данной метрики, чтобы statsD начал отправлять 0 для него, но я не всегда знаю набор показателей, о которых я буду сообщать заранее.
Ответы
Ответ 1
Если вы просто хотите "заполнить" визуальный график нулями, посмотрите "Параметры графика → Линейный режим → Нарисуйте нуль как ноль". Это не позволит вам установить значение, отличное от 0, и оно не приведет к появлению 0, если вы получите данные в формате json или csv, но часто это то, что вы хотите, если хотите просто посмотреть график с некоторыми растягивается, когда данные не записываются.
![without Draw Null as Zero]()
![With Draw Null as Zero]()
Ответ 2
Проверьте функцию transformNull, которую предоставляет Graphite. например.
transformNull(stats.timers.deploys.all.duration.total.mean, 0)
Это отобразит разделы с нулевыми данными в 0.
Ответ 3
Вы можете использовать функцию "keepLastValue (requestContext, seriesList)" в графите для обработки отсутствующих данных. Он "[c] выводит строку с последним полученным значением, когда пробелы (" Нет значений ") отображаются в ваших данных, а не ломаются."
Ответ 4
Решение этой проблемы заключается не в том, чтобы сохранить последнее значение или преобразовать нули. Реализация одного из этих параметров приведет только к отображению неверных данных, и вы не будете предупреждены, если что-то не так.
Вам нужно изменить схему хранения, чтобы он хранил объем данных, которые вы отправляете, и не более того.
Если метрики отправляются каждые 5 секунд, а схема хранения - 1 с, вы получите пять точек данных, четыре из которых будут пустыми.
Проверьте этот документ: https://github.com/etsy/statsd/blob/master/docs/graphite.md