Разницу двух чисел, делённую на время, PromQL считает сам — по всем отсчётам за окно.
PromQL — язык запросов Prometheus. Запрос по имени метрики возвращает последнее значение каждого ряда — это мгновенный вектор. Если дописать к нему окно в квадратных скобках, node_network_receive_bytes_total[1m], вернутся все отсчёты за последнюю минуту — вектор за интервал.
Функция <code>rate</code> берёт вектор за интервал и считает средний прирост в секунду за это окно:
Получится около 200 000 — те же 200 КБ в секунду, что ты посчитал по двум запросам. Если с подготовки прошло меньше минуты, окно заполнено не целиком и число меньше. Имени метрики в ответе нет: скорость — уже другая величина, а метки ряда остались. increase(…[1m]) считает то же, но итогом за окно — сколько байт пришло за минуту.
Счётчик обнуляется, когда перезапускается его служба. rate и increase видят падение и считают его сбросом: счёт продолжается от нуля, и скорость не становится отрицательной. Для gauge rate не нужен — его значение уже «сейчас».
labapp перезапустили, и его счётчик запросов упал с 5000 до 30. Что покажет rate(labapp_http_requests_total[1m]) для этого ряда через 10 секунд?
-
rateсчитает падение счётчика сбросом и продолжает счёт от нуля: скорость не бывает отрицательной. -
Прирост после сброса
rateсчитает от нуля: 30 новых запросов — уже прирост, ждать 5000 не нужно.
rate и increase видят, что счётчик упал, и считают это перезапуском: прирост после сброса идёт от нуля. Поэтому скорость остаётся обычной, а перезапуск службы не ломает графики.
Главное в шаге
-
Число счётчика — итог с запуска; нагрузку показывает его скорость:
rate(метрика[1m])— прирост в секунду за окно. -
increase— тот же прирост итогом за окно; сброс счётчика при перезапуске обе функции учитывают. - Окно в квадратных скобках заполняется отсчётами со временем: первую минуту после старта скорость занижена.