вектор диапазона фильтрации prometheus по day_of_week

#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> последнее число, то, очевидно, в последнее время было слишком мало запросов