После добавления label пропала история метрики: идентичность серии Prometheus

К метрике запросов добавили label region. После выкладки в Grafana появились новые линии с короткой историей, а старые закончились. Значения счётчика тоже будто начали жизнь заново. Здесь важно разделить два события: изменение значения существующего счётчика и появление совершенно другой временной серии.

В Prometheus серию определяют имя метрики и полный набор labels. http_requests_total{job="api",instance="a"} и та же метрика с дополнительным region="west" имеют разные идентичности. Исторические samples старой серии не получают новый label задним числом.

Найдём обе формы данных

http_requests_total{job="api"}
http_requests_total{job="api",region="west"}
http_requests_total{job="api",region=""}

Первое выражение показывает все подходящие формы. Второе выбирает новую региональную серию. Третье соответствует пустому или отсутствующему region: это полезно для поиска старой формы, если пустое значение не используется намеренно в новой схеме. Сравнивайте labels в табличном представлении, а не только одинаковые legend на графике.

Старые данные обычно остаются до истечения retention, но точный селектор новой формы их уже не выбирает. Диапазон времени тоже важен: instant-запрос после исчезновения старой серии не обязан возвращать её последнее историческое значение. Для истории задайте период до и после выкладки.

Почему rate не соединяет историю автоматически

Коррекция сброса счётчика работает внутри одной серии. Она не ищет похожий instance с другим набором labels. У новой серии сначала должно накопиться достаточно samples для окна скорости. Короткий провал после изменения labels поэтому возможен даже при непрерывном трафике.

sum by (job) (rate(http_requests_total{job="api"}[5m]))

Такой запрос не фиксирует region и объединяет скорости подходящих серий. Он может сохранить общий график на переходе, но смысл зависит от способа выкладки. Если старая и новая формы одновременно публикуют одни и те же запросы, сумма удвоит трафик. Если новая заменяет старую, переходные окна содержат участки разных серий с собственной экстраполяцией.

Поэтому сначала выясните, какие именно samples существовали одновременно. Удобно сравнить число серий по instance и region с временем обновления каждой реплики. Универсального выражения, которое угадает дубли и автоматически склеит любую смену схемы, нет.

Спроектируем label с устойчивым смыслом

Region полезен, если нужно регулярно сравнивать фиксированный набор регионов. Версия сборки, request_id или пользовательский идентификатор могут быстро увеличивать число комбинаций. Даже один новый label создаёт отдельные серии для каждого существующего набора остальных labels и каждого своего значения. Временные измерения лучше хранить там, где они действительно нужны для поиска отдельных событий.

Если атрибут описывает процесс и меняется при каждой выкладке, иногда удобнее отдельная info-метрика со значением 1. Тогда основной счётчик сохраняет устойчивую схему, а справочные сведения присоединяются отдельно с проверкой уникальности. Такой выбор не устраняет все сложности: ключ связи должен однозначно определять экземпляр.

Проведём миграцию потребителей

До изменения составьте список панелей, recording rules и алертов, которые используют метрику. Проверьте точные селекторы, группировки и шаблоны legend. У алерта новый label может создать новую идентичность и начать pending заново. Если label попадает в маршрутизацию, изменится также путь уведомления.

На тестовом интервале сохраните исходный общий запрос и новый региональный. Сравните сумму регионов с общей интенсивностью на участке, где существует только новая форма. Расхождение покажет пропущенный регион, двойной счёт или изменившееся определение события. Затем проверьте границу выкладки отдельно.

Историю можно оставить в прежнем виде и ясно обозначить момент изменения схемы. Важнее сохранить объяснимый смысл графика, чем получить визуально непрерывную линию через объединение несовместимых данных. Следующее изменение labels стоит рассматривать как изменение контракта метрики: оно затрагивает и хранение, и запросы, и реакцию на сбои.

Ещё по теме

Продолжить изучение

Хотите построить мониторинг, который помогает находить причины сбоев? Метрики, дашборды и оповещения входят в программу «Prometheus и Grafana: мониторинг и observability».

Продолжить на практике

  • Prometheus и Grafana: мониторинг и observability ↗

    Замечайте сбои до жалоб пользователей. Соберите мониторинг приложения: метрики Prometheus, запросы PromQL, дашборды Grafana и алерты, по которым понятно, что делать. Итог — наблюдаемый сервис и разбор учебного инцидента.