#filter #prometheus #dayofweek #promql
#Фильтр #prometheus #день недели #promql
Вопрос:
Я использую подзапросы для получения почасовых агрегированных значений за последнюю неделю, например: количество http-запросов в час за всю последнюю неделю, что вернет 168 значений в векторе диапазона.
delta(http_server_requests_seconds_count[1h])[1w:1h]
Теперь я хочу отфильтровать значение, чтобы возвращать только те, которые относятся к определенному дню недели, скажем, возвращать только значение 24 с понедельника.
Я нашел несколько подсказок о day_of_week, timestamp, bool expr, но я не могу объединить их, чтобы заставить его работать, или, может быть, это невозможно? Что-то вроде:
delta(http_server_requests_seconds_count[1h])[1w:1h] bool day_of_week() == 1
Ответ №1:
Было бы эффективнее настроить время начала / окончания только на день, но вы могли бы сделать:
(increase(http_server_requests_seconds_count[1h]) and on () day_of_week() == 1)[1w:1h]
Комментарии:
1. Отрегулируйте начало / конец, что вы имеете в виду? Возможно, весь мой вариант использования покажет, что это невозможно: мне нужно это отфильтрованное количество запросов, скажем, за последние 5 понедельников, чтобы передать их в функцию stddev, а затем использовать значение для понедельника, чтобы выявить аномалии для каждого последнего количества запросов за понедельник. То же самое для каждого дня недели. Кстати. Увеличивается ли быстрее, чем дельта, когда в любом случае число может только увеличиваться?
2. В настоящее время у меня есть это за всю неделю вместе без фильтрации: Среднее количество запросов за последнюю неделю:
delta(http_server_requests_seconds_count[1w]) / (7*24)
Stddev за последнюю неделю:stddev_over_time(delta(http_server_requests_seconds_count[1h])[1w:1h])
Последнее количество запросов:delta(http_server_requests_seconds_count[1h])
И из приведенного выше, если среднее значение — stddev> последнее число, то, очевидно, в последнее время было слишком мало запросов