Графана - один стат после сброса большого счетчика - PullRequest
0 голосов
/ 30 апреля 2019

Мы используем Grafana + Prometheus для мониторинга нашей инфраструктуры, и недавно мы добавили некоторые ориентированные на бизнес показатели, и у меня возникли проблемы с одним из отслеживаемых счетчиков.Это счетчик времени сеанса.По сути, каждый раз, когда сеанс заканчивается, мы увеличиваем этот счетчик на время, которое пользователь провел в этом сеансе.Таким образом, если пользователь тратит 2 м, используя программное обеспечение, счетчик будет увеличен на 120000 мс.В течение нескольких дней этот подход работал идеально, но со вчерашнего дня, когда у нас было большое расхождение между одним счетчиком экземпляров и остальными, и этот большой счетчик был сброшен из-за перезапуска части службы, я не могу получитьзначимая единая панель статистики больше.

Вот график того, что произошло (этот счетчик имеет 3 метки, в результате которых> 50 комбинаций меток)

График Прометея

Текущее общее время за все время, отслеживаемое этим счетчиком, составляет 13,8 года в течение 4-дневного периода, но с момента сброса счетчика мои показатели одиночной статистики были либо -20 лет (с использованием различий), либо 35 лет (с использованием диапазона) в течение 24 часов.период.Это не так, если вы не учитываете сброс счетчика, так как diff и range будут смотреть на минимальные / максимальные / первые / текущие значения, но это больше не полезный показатель.

Если я установил таймфреймчтобы не включать сброс счетчика, и Diff, и Range показывают очень близкие значения к ожидаемому (наше использование очень линейное и предсказуемое).

Формула для панели с одиночным статусом выглядит следующим образом

sum(dyno_app_music_total_user_listen_time{server=~"[[server]]", clusterId=~"[[clusterid]]"})

Как я могу обработать сбросы в счетчике для метрики синглстата?

1 Ответ

0 голосов
/ 07 мая 2019

Я не уверен, что полностью понимаю ваш вопрос, но если бы мне пришлось подвести итог, то я понял, что у вас есть метрика с 3 метками (в результате получается 50 различных временных рядов), и вы хотите отобразить панель единой статистики, которая суммирует все эти счетчики вместе за все время.

Способ обработки сброса счетчика в Prometheus заключается в использовании rate() или, если вам нужно абсолютное значение increase(). Таким образом, вы могли бы написать свой запрос (при условии, что вы хотите, чтобы сумма счетчиков увеличивалась за все время):

sum(increase(dyno_app_music_total_user_listen_time{...}[100y]))

Заметьте, однако, что со временем это будет становиться все медленнее и медленнее, потому что Прометею придется вернуться и загрузить все 50 временных рядов за все время, прежде чем выполнять вычисления. (До того момента, когда количество загруженных сэмплов превысит либо предел, настроенный в Prometheus, либо объем доступной памяти).

Что может быть более полезным, чем это (и со временем избавится от всплеска, который вы испытали «вчера»), - это вместо этого показать график скорости изменения ваших счетчиков за более короткий промежуток времени:

sum(rate(dyno_app_music_total_user_listen_time{...}[1h]))

Это покажет вам (приблизительное) среднее количество сеансов за предыдущий час для любого временного диапазона, который вы можете выбрать для отображения на графике.

...