Я записываю и отслеживаю SLO (продолжительность запроса на стороне сервера) модулей Kubernetes через Prometheus, используя HistogramVe c на HTTP-сервере Golang. Продолжительность каждого запроса рассчитывается по времени и сохраняется, как описано в Практике Prometheus , и разделяется по коду состояния, методу и пути HTTP.
Я провожу эксперименты по автомасштабированию, поэтому поды создаются и завершаются. После каждого эксперимента я извлекаю показатели для всех модулей (включая уже удаленные) и строю кумулятивное распределение, например: Чтобы сделать эти графики более «точными», я выбрал многие, меньшие сегменты гистограммы и агрегировать и анализировать данные локально без использования встроенных квантилей гистограммы . Таким образом, идеальный запрос будет возвращать только самое последнее значение для всех временных рядов, существовавших в указанном диапазоне времени (зеленый + красный кружки). В настоящее время я использую 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 минут, или после того, как они помечаются как устаревшие.
Я почти уверен, что есть способ сделать это (например, возможность просто включить устаревшие временные ряды), но мне пока не удалось собрать это вместе.