Labels и Time Series
Тема дорожной карты · Prometheus
Метки — это пары «ключ–значение», прикреплённые к каждому временному ряду Prometheus и обеспечивающие контекст для дифференциации и фильтрации метрик. Каждая уникальная комбинация имени метрики и набора пар «ключ–значение» меток определяет отдельный временной ряд, хранящийся в TSDB Prometheus — например, http_requests_total{method="GET", status="200", job="api"} и http_requests_total{method="POST", status="500", job="api"} являются двумя разными временными рядами. Метки обеспечивают мощные многомерные запросы в PromQL, позволяя нарезать и агрегировать метрики по любой комбинации измерений меток. Зарезервированные имена меток, начинающиеся с __ (двойного подчёркивания), используются Prometheus внутренне для метаданных обнаружения сервисов и удаляются перед хранением, если только они не отображены явно в имя без зарезервированного префикса через перемаркировку. Ограничение количества значений меток и отказ от меток с высокой кардинальностью критически важны для поддержания производительности Prometheus и предсказуемого использования памяти.
Как это работает
Labels и Time Series: временной ряд уникально идентифицируется metric_name{label1="value1", label2="value2"}. Samples — float64 + timestamp. Четыре типа метрик: Counter (только растёт — http_requests_total), Gauge (растёт/убывает — cpu_usage), Histogram (bucket + sum + count — для распределений latency), Summary (quantiles считаются client-side — менее распространён). Конвенция имён: <namespace>_<subsystem>_<name>_<unit> (например http_request_duration_seconds).
Когда применять
Histogram лучше Summary для latency — histograms агрегируются между репликами; summaries нет. Counter — для того, по чему делаете rate() (счёт событий); Gauge — для текущих значений. Labels выбирайте осторожно — каждая уникальная комбинация = новый временной ряд. Не используйте labels для unbounded-значений (user ID, пути с ID).
Типичные ошибки
Ловушки Labels и Time Series: labels с unbounded-cardinality (user_id, request_id, полные URL — Prometheus взрывается); имена метрик без единиц (http_request_duration — секунды? мс? всегда включайте суффикс единицы); непоследовательные label-имена между метриками + приложениями (join-ы падают).