Команда добавила в метрику задержки метку с идентификатором пользователя, чтобы «удобнее расследовать инциденты». Что произойдёт?
- Что такое кардинальность метрик?
- Почему нельзя добавлять user_id в метки Prometheus?
Каждая уникальная комбинация меток — отдельный временной ряд. Метка с user_id превращает одну метрику в миллионы рядов: растут память, диск и время запросов, система мониторинга падает.
- В метки — значения из малого фиксированного множества: метод, код ответа, шаблон маршрута
/orders/{id} - Уникальное (id пользователя и заказа, полный URL) — в логи и трейсы
- Число рядов = произведение числа значений всех меток
А ещё Расследовать конкретного пользователя — по логам и трейсам с его id
Подробно
Как хранит Prometheus (и большинство систем метрик): ряд определяется именем метрики и набором меток. http_request_duration{method, route, status} при 5 методах, 50 маршрутах и 10 кодах — до 2 500 рядов (гистограмма умножает ещё на число бакетов). Добавили user_id с миллионом значений — до 2,5 миллиардов рядов. Каждый ряд держит индекс и данные в памяти; запросы перебирают ряды. Итог — исчерпание памяти, медленные запросы, падение мониторинга в самый нужный момент.
Правило: метки — для измерений, по которым агрегируют, с ограниченным множеством значений. Типичная ловушка — полный путь вместо шаблона маршрута: /orders/123, /orders/124… — тот же эффект.
Где высокая кардинальность к месту: логи и трейсы. Они хранят отдельные события, и поиск по id — их основной сценарий. Связка: метрика показывает, что выросла задержка на маршруте; пример трейса (exemplar) или поиск в логах по маршруту и времени даёт конкретные запросы и пользователей.
Защита: лимиты на число рядов и меток в конфигурации, алерты на рост кардинальности, ревью метрик.
Что хотят услышать
- Связь меток с числом временных рядов и расчёт.
- Последствия для системы мониторинга.
- Что класть в метки, а что в логи и трейсы.
- Ловушка с полным URL.
Частые ошибки
- Метки с id, email, полным путём.
- «У нас мало пользователей» — их станет больше.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Ничего страшного — метки хранятся сжато и почти не занимают места
- ✓Взрыв кардинальности: каждый пользователь даёт отдельный ряд, мониторинг ляжет
- ✗Метрика станет точнее, а задержка её сбора вырастет на 5–10%
- ✗Метрика перестанет собираться, но остальные не пострадают
Что спросят дальше
- Как тогда расследовать проблему конкретного пользователя?
- Чем head-based семплирование трейсов отличается от tail-based?
Разбор темы
- Наблюдаемость: метрики, логи, трассировка и SLO
Чем наблюдаемость отличается от мониторинга, три сигнала и что каждый умеет, RED и USE, почему среднее врёт, взрыв кардинальности, SLI/SLO/error budget и алерты на симптомы.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.