Комментарии 12
Спидометр показывает скорость. Если измерять скорость раз в минуту по спидометру, то средняя скорость, которую мы посчитаем на основе этих данных, не будет совпадать с данными одометра.
Как вы решили эту проблему? Судя по цитате ниже, не решили, или поправьте меня.
Таким образом, первая инсталляция Prometheus работает по-прежнему (обращается каждые 60 или, например, 30 секунд) ко всем целям в кластере Kubernetes, а вторая — раз в 5 минут получает данные с первой и хранит их для возможности смотреть данные за большой период (но без глубокой детализации).
Большая часть показателей, которые экспортируются всеми системами — это "одометры" (тип counter), так что в целом эта проблема более-менее решена. Например, данные по CPU контейнера приходят как counter с количеством потраченных секунд. Соотвественно в основном Prometheus'е у нас данные за каждые 30 секунд, а в longterm за каждые 5 минут, но и по тем и по другим абсолютно корректно считать среднее, предварительно взяв "производную" (см. функцию rate). Дальше вопрос упирается в возможности источника данных — в ядре Linux многие вещи считаются (и есть возможность получать) правильно, в "одометрах", а вот в redis, например, это не так.
Для всяких штук, типа "время ответа по HTTP" (или "размер HTTP ответа"), для которых средний показатель имеет очень ограниченный смысл, мы активно используем Histogram'ы.
Моменты сброса counter в 0 создают ли какие-то проблемы на практике?
Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for.
prometheus.io/docs/prometheus/latest/querying/functions/#rate()
Идея про «одометры» здравая!
Но, даже если считать метрики через аккумулирующие счётчики, то возникает вопрос в дальнейшей агрегации.
Допустим мы 1 раз в 15 секунд смотрим на суммарное потребление процессорного времени с момента старта, что на графике показывать? Число ядро*15секунд? Ну неудобно как-то. Нормировать и делить на 15 секунд? Ну это уже получается средняя скорость по одометру, не совсем то.
А если пользователь выбрал агрегацию за последний месяц, и в точке хранятся почасовые данные, что показывать: сумму (одометр) или среднее (спидометр) ?:)
Мониторинг и Kubernetes (обзор и видео доклада)