Я обнаружил, что для некоторых графиков я получаю двойные значения от Prometheus, где должны быть только единицы:
Я использую запрос:
increase(signups_count[4m])
Интервал очистки установлен на рекомендованный максимум, равный 2 минутам.
Если я запрашиваю фактические сохраненные данные:
curl -gs 'localhost:9090/api/v1/query?query=(signups_count[1h])'
"values":[
[1515721365.194, "579"],
[1515721485.194, "579"],
[1515721605.194, "580"],
[1515721725.194, "580"],
[1515721845.194, "580"],
[1515721965.194, "580"],
[1515722085.194, "580"],
[1515722205.194, "581"],
[1515722325.194, "581"],
[1515722445.194, "581"],
[1515722565.194, "581"]
],
Я вижу, что было всего два прибавления. И действительно, если я запрашиваю это время, я вижу ожидаемый результат:
curl -gs 'localhost:9090/api/v1/query_range?step=4m&query=increase(signups_count[4m])&start=1515721965.194&end=1515722565.194'
"values": [
[1515721965.194, "0"],
[1515722205.194, "1"],
[1515722445.194, "0"]
],
Но Графана (и Прометей в графическом интерфейсе) имеет тенденцию устанавливать разные step
в запросах, с которыми я получаю очень неожиданный результат для человека, незнакомого с внутренней работой Прометея.
curl -gs 'localhost:9090/api/v1/query_range?step=15&query=increase(signups_count[4m])&start=1515721965.194&end=1515722565.194'
... skip ...
[1515722190.194, "0"],
[1515722205.194, "1"],
[1515722220.194, "2"],
[1515722235.194, "2"],
... skip ...
Зная, что increase()
- это просто синтаксический сахар для конкретного варианта использования функции rate()
, я полагаю, что именно так он и должен работать с учетом обстоятельств.
Как избежать таких ситуаций? Как сделать так, чтобы Прометей / Графана в большинстве случаев показывала мне одного для одного и двоих для двоих? Кроме увеличения интервала очистки (это будет мое последнее средство).
Что еще мне здесь не хватает?
increase()
функцию, которая возвращает правильные целочисленные результаты для медленно растущих временных рядов. - person valyala   schedule 06.12.2020