Погружение в самую важную метрику Прометея

Метрика счетчика Прометея требует некоторого привыкания. Официальная документация хорошо объясняет теорию, но только когда я создал несколько графиков, я понял, насколько мощна эта метрика.

В этой статье теория сочетается с графиками, чтобы лучше понять счетную метрику Прометея. Мы увидим, как работают функции PromQL rate, increase, irate и resets, и в довершение всего мы рассмотрим некоторые графики, генерируемые счетными метриками для производственных данных.

Единственный путь - вверх…

Как вы уже догадались по названию, счетчик считает вещи. Он делает это самым простым способом, так как его значение может только увеличиваться, но никогда не уменьшаться¹.

Хотя уменьшить значение текущего счетчика невозможно, его можно сбросить. Сброс происходит при перезапуске приложения.

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

  • Количество выпитых вами сортов пива
  • Общее расстояние, которое вы проезжаете на машине

Или в разработке приложений:

  • Общее количество HTTP-запросов
  • Общее количество сообщений журнала
  • Общий объем выполненных работ

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

Работа со счетчиками

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

Этот фрагмент кода определяет счетчик с именем job_execution. Библиотека показателей приложения Micrometer экспортирует эту метрику как job_execution_total. Метод execute() запускается каждые 30 секунд, при каждом запуске он увеличивает наш счетчик на единицу.

Необработанные значения счетчиков

Информация, которую вы получаете из необработанных значений счетчиков, в большинстве случаев не имеет ценности. Если мы построим необработанное значение счетчика, мы увидим постоянно растущую линию.

Эта строка будет продолжать расти, пока мы не перезапустим приложение. При перезапуске приложения счетчик обнуляется.

К счастью для нас, PromQL (язык запросов Prometheus) предоставляет функции для получения более точных данных с наших счетчиков.

Темп

Функция rate Прометея вычисляет, с какой скоростью увеличивается счетчик в секунду в течение определенного временного окна. Следующее выражение PromQL вычисляет посекундную скорость выполнения заданий за последнюю минуту².

rate(job_execution_total[1m])

Наша работа выполняется с фиксированным интервалом, поэтому нанесение вышеуказанного выражения на график приводит к прямой линии.

На графике мы видим около 0,036 выполнения заданий в секунду. Умножьте это число на 60, и вы получите 2,16. Это выше, чем можно было бы ожидать, поскольку наше задание выполняется каждые 30 секунд, то есть дважды в минуту.

Способ, которым Prometheus извлекает метрики, вызывает незначительные различия между ожидаемыми и измеренными значениями. В зависимости от времени результирующее значение может быть больше или меньше. Важно помнить, что показатели Прометея не являются точной наукой.

rate PromQL автоматически настраивается на сброс счетчиков и другие проблемы. Поэтому всякий раз, когда приложение перезапускается, мы не увидим никаких странных падений, как это было с необработанным значением счетчика.

Перерывы в монотонности (например, сброс счетчика из-за перезапуска цели) автоматически корректируются. Кроме того, расчет экстраполируется к концам временного диапазона, что позволяет пропустить царапины или несовершенное согласование циклов очистки с периодом времени диапазона. - Документы Prometheus

И последнее, что следует отметить в отношении функции rate: мы должны использовать ее только со счетчиками. Нет смысла использовать rate с другими типами метрик Прометея.

Увеличивать

Функция increase Прометея вычисляет увеличение счетчика за указанный период времени². Следующее выражение PromQL вычисляет количество выполненных заданий за последние 5 минут.

increase(job_execution_total[5m])

Поскольку наша работа выполняется с фиксированным интервалом в 30 секунд, на нашем графике должно отображаться значение около 10.

Прометей экстраполирует increase, чтобы охватить все указанное временное окно. Из-за этого можно получить нецелочисленные результаты, несмотря на то, что счетчик увеличивается только на целые приращения¹.

Подобно rate, мы должны использовать increase только со счетчиками. Нет смысла использовать increase с другими типами метрик Прометея.

Разгневанный

Этот показатель очень похож на rate. Так же, как rate, irate вычисляет, с какой скоростью счетчик увеличивается в секунду в течение определенного временного окна. Разница в том, что irate смотрит только на последние две точки данных. Благодаря этому irate хорошо подходит для построения графиков непостоянных и / или быстро меняющихся счетчиков².

Следующее выражение PromQL возвращает посекундную скорость выполнения заданий при поиске двух последних точек данных за две минуты назад.

irate(job_execution_total[2m])

Мы должны использовать только Irate со счетчиками.

Сбрасывает

Функция resets Прометея показывает количество сбросов счетчика за заданное временное окно². Следующее выражение PromQL вычисляет количество сбросов счетчика выполнения заданий за последние 5 минут.

resets(job_execution_total[5m])

Мы должны использовать только resets со счетчиками.

Примеры графиков из реального мира

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

Чтобы лучше понять, как эти графики будут выглядеть в производственной среде, я сделал несколько снимков экрана с нашей панели инструментов Grafana в процессе работы.

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

На приведенном ниже графике используется increase для расчета количества обрабатываемых сообщений в минуту. При построении этого графика в течение 24-часового окна можно четко увидеть, что в ночное время трафик намного ниже.

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

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

В этом примере я предпочитаю вариант rate. Я думаю, что увидеть, что мы обрабатываем 6,5 сообщений в секунду, легче интерпретировать, чем увидеть, что мы обрабатываем 390 сообщений в минуту.

Заключение

Счетчик Prometheus - это простая метрика, но можно получить ценную информацию, используя различные функции PromQL, которые были разработаны для использования со счетчиками. Какую функцию PromQL вы должны использовать, зависит от того, что измеряется, и от того, что вы ищете.

Спасибо за чтение. Я надеюсь, что это было полезно. Не стесняйтесь оставлять ответ, если у вас есть вопросы или отзывы.

использованная литература

[1] https://prometheus.io/docs/concepts/metric_types/

[2] https://prometheus.io/docs/prometheus/latest/querying/functions/