Получить общее количество запросов за период времени

Мне нужно показать в 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]))

Эта переменная представляет диапазон для текущей панели инструментов. Рассчитывается до - от

http://docs.grafana.org/features/datasources/prometheus/

Согласно документации увеличения (), это не оператор агрегации. Таким образом, он даст неправильный ответ. (Смотрите примечание.)

Вы должны использовать функцию 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

  1. Вы должны установить правильный быстрый диапазон на 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, значение всегда целое, потому что оно просто вычисляет разницу между началом и концом

Другие вопросы по тегам