Получить общее количество запросов за период времени
Мне нужно показать в Grafana панель с количеством запросов за выбранный период времени в верхнем правом углу.
Для этого мне нужно решить 2 вопроса здесь, я задам здесь вопрос о Прометее и вопрос о Графане в другой ссылке.
Если у меня есть счетчик http_requests_total
Как я могу построить запрос, чтобы получить целое число с общим количеством запросов за период времени (например, 24 часа)?
10 ответов
Вам нужна функция увеличения (), которая будет вычислять разницу между значениями счетчика в начале и в конце указанного интервала времени. Он также правильно обрабатывает сброс счетчика в течение этого периода времени (если есть).
increase(http_requests_total[24h])
Если у вас есть несколько счетчиков http_requests_total
(например, из нескольких экземпляров), и вам нужно получить совокупное количество запросов, используйте оператор sum():
sum(increase(http_requests_total[24h]))
Смотрите также мой ответ на эту часть вопроса об использовании выбора временного диапазона Графаны в запросах.
Так что не позволю мне комментировать ответ Йори, поэтому я должен сделать новый...
В Grafana 5.3 они ввели $__range
для Прометея это проще в использовании:
sum(rate(http_requests_total[$__range]))
Эта переменная представляет диапазон для текущей панели инструментов. Рассчитывается до - от
Согласно документации увеличения (), это не оператор агрегации. Таким образом, он даст неправильный ответ. (Смотрите примечание.)
Вы должны использовать функцию sum_over_time(), которая агрегирует по временному интервалу.
sum_over_time(http_requests_total[24h])
Если у вас несколько счетчиков, используйте оператор sum ():
sum(sum_over_time(http_requests_total[24h]))
Примечание: у меня есть 5 точек данных со значениями: 847, 870, 836, 802, 836. (обновляется каждую минуту)
increase(http_requests_total[5m]) returns 2118.75
sum_over_time(http_requests_total[5m]) returns 4191
http_requests_total - http_requests_total offset $__interval > 0
Это основывается на другом ответе и комментарии, которые работают и обрабатывают ситуации перезапуска.
Смещение всегда сохраняет значение как целое число и не пытается выполнить интерполяцию, как
increase
и
rate
функции.
В
> 0
фильтр в конце будет игнорировать все отрицательные значения, которые могут быть захвачены из-за перезапуска.
Конечным результатом будет точное общее количество запросов с течением времени, если вы выберете общее значение в легенде.
Решение: для расчета суммы счетчиков https на prometheus grafana следует использоватьincrease
метод и установить общий временной диапазон $interval
для суммирования и расчета всех счетчиков http-запросов.
increase(http_requests_total[$interval])
Согласно справке Прометея:
increase()
Increase(v range-vector) вычисляет увеличение временного ряда в векторе диапазона. Перерывы в монотонности (например, сброс счетчика из-за перезапуска цели) автоматически корректируются. Увеличение экстраполируется для покрытия всего временного диапазона, указанного в селекторе вектора диапазона, так что можно получить нецелочисленный результат, даже если счетчик увеличивается только на целые приращения.В следующем примере выражения возвращается количество HTTP-запросов, измеренное за последние 5 минут, для каждого временного ряда в векторе диапазона:
increase(http_requests_total{job="api-server"}[5m])
Увеличение следует использовать только со счетчиками. Это синтаксический сахар для скорости (v), умноженной на количество секунд в указанном временном диапазоне, и должен использоваться в первую очередь для удобства чтения человеком. Используйте скорость в правилах записи, чтобы увеличение отслеживалось последовательно на посекундной основе.
PS
- Вы должны установить правильный быстрый диапазон на Grafana для установки правильного временного интервала, который вы выберете (этот прямой рендеринг
$interval
переменная) Кроме того, я предлагаю установить для визуализации графика правильное разрешение и минимальный временной интервал (в вашем случае это день ->1d
)
2.Чтобы просуммировать все количество запросов, просто выполните функцию суммы
sum(increase(http_requests_total[$interval]))
Чтобы получить точное количество часов за последние 24 часа, я создал следующий запрос:
max_over_time(http_requests_total[6s])- min_over_time(http_requests_total[24h])
Примечание: у меня работает:)
Самый простой способ сделать это в современной версии Grafana — установить в поле «Расчет» раздела «Параметры значения» функцию уменьшения «Разница»:
Ваш запросhttp_requests_total
данные без какой-либо агрегации.
Мне кажется, что все предыдущие ответы неправильно истолковали вопросы, которые заключаются в том, чтобы получить счет от t0 до t1, где значение в t0 должно быть 0.
Для этого можно использовать модификатор @ согласно документации https://prometheus.io/docs/prometheus/latest/querying/basics/#modifier :
http_requests_total - http_requests_total @ start()
В последнее время у меня тоже возникла путаница, и я нашел для нее несколько решений, но не все из них работают идеально.
решение 1:
sum(increase(your_point))[$__interval]
Это вызовет другое значение с тем же оператором, а также вызовет нулевое значение (на самом деле не ноль).
Решение 2:
max_over_time(your_point[$__range])- min_over_time(your_point[$__range])
your_point[$__range] - your_point offset $__range
Оба из них имеют потенциальную ошибку (сброс значения) и могут получить значение только в [когда-то сейчас], не могут получить ответ в любой период времени.
Решение 3:
sum_over_time(your_point)[$__range]
Это решение займет много времени, чтобы изменить ваши показатели (сбросить в определенный период), но оно действительно работает.
Кто-нибудь может дать мне другое решение?
Чтобы получить точное общее количество запросов за определенный период времени, мы можем использовать offset
:
http_requests_total - http_requests_total offset 24h
increase
экстраполирует диапазон, чтобы мы могли видеть в результате число с плавающей запятой.
Используя offset
, значение всегда целое, потому что оно просто вычисляет разницу между началом и концом