Запросить самые последние значения для активных и устаревших временных рядов Prometheus по запросу диапазона - PullRequest
1 голос
/ 16 июня 2020

Я записываю и отслеживаю SLO (продолжительность запроса на стороне сервера) модулей Kubernetes через Prometheus, используя HistogramVe c на HTTP-сервере Golang. Продолжительность каждого запроса рассчитывается по времени и сохраняется, как описано в Практике Prometheus , и разделяется по коду состояния, методу и пути HTTP.

Я провожу эксперименты по автомасштабированию, поэтому поды создаются и завершаются. После каждого эксперимента я извлекаю показатели для всех модулей (включая уже удаленные) и строю кумулятивное распределение, например: CDF Чтобы сделать эти графики более «точными», я выбрал многие, меньшие сегменты гистограммы и агрегировать и анализировать данные локально без использования встроенных квантилей гистограммы . Таким образом, идеальный запрос будет возвращать только самое последнее значение для всех временных рядов, существовавших в указанном диапазоне времени (зеленый + красный кружки). Timeseries В настоящее время я использую a запрос диапазона в сценарии, генерирующем все графики, например:

http://localhost:9090/api/v1/query_range?query=http_request_duration_milliseconds_bucket{path="/service/login"}&start=1591803898&end=1591804801&step=5s

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

Итак, в основном я ищу способ обойти основы Prometheus относительно устаревания и остановить «исчезновение» устаревших временных рядов:

Если образец не найден (по умолчанию) за 5 минут до отметки времени выборки, значение для этого временного ряда в этот момент времени не возвращается. Это фактически означает, что временные ряды «исчезают» с графиков в тех случаях, когда их последняя собранная выборка старше 5 минут, или после того, как они помечаются как устаревшие.

Я почти уверен, что есть способ сделать это (например, возможность просто включить устаревшие временные ряды), но мне пока не удалось собрать это вместе.

1 Ответ

0 голосов
/ 17 июня 2020

Нашел другой способ сделать это после ввода в этот поток , а также увеличил lookbackDelta QuerySpe c параметр .

Теперь запросы выполняются например

http://localhost:9090/api/v1/query?query=max_over_time(http_request_duration_milliseconds_bucket{path="/service/login",le="101"}[2h])

вернуть желаемый результат:

enter image description here

...