// devops interview / observability

Вопросы на собеседовании: Наблюдаемость и диагностика

Метрики, логи и трассировки: как замечать пользовательские проблемы, ставить SLO и быстро находить причину сбоя. Здесь — топ-12 по частоте на реальных собесах: у первых вопросов открыт полный разбор, у остальных — устный эталон. Весь банк темы (12 вопросов) с разборами — в приложении.

Открыть тему в приложении каждый день бесплатно: 3 эталона и 3 проверки арбитром

junior: база, с которой начинают

Чем метрики, логи и трейсы дополняют друг друга? С какого сигнала начнёшь, если пользователи жалуются на медленный API?

как ответить Метрики быстро показывают масштаб и время проблемы, логи объясняют конкретные события, а трейсы раскладывают один запрос по сервисам и зависимостям. Я начну с метрик задержки и ошибок, сузю интервал и сегмент, затем открою медленный трейс и связанные с ним структурированные логи. Один сигнал редко даёт и симптом, и причину.

разбор

У сигналов разные сильные стороны:

  • метрики дёшево агрегируются и подходят для алертов, трендов и сравнения сегментов;
  • логи сохраняют дискретные события и контекст ошибки, но поиск по огромному потоку дорог;
  • распределённый трейс показывает критический путь запроса, длительность спанов и границу, на которой возникла задержка.

Практический порядок — от общего к частному. Сначала подтверждаем пользовательский симптом по rate ошибок и распределению latency, отмечаем регион, маршрут и версию. Затем берём trace ID медленного запроса, находим самый долгий или ошибочный span и только после этого читаем логи нужного сервиса в том же временном окне.

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

чтобы прозвучать сильнее Добавь, что путь расследования должен сохранять контекст между сигналами: из алерта — в дашборд, из exemplar или trace ID — в трейс, из span — в логи конкретного сервиса.

devops-observability-001 · junior · high

Какие типы метрик Prometheus выберешь для общего числа запросов, текущей длины очереди и времени ответа? Почему нельзя строить график нагрузки прямо по значению счётчика?

как ответить Общее число запросов — counter, длина очереди — gauge, а время ответа — histogram. Сырой counter почти всегда растёт и сбрасывается при рестарте, поэтому нагрузку показываю через rate() или increase() на диапазоне. Histogram хранит распределение по бакетам, сумму и число наблюдений, поэтому из него можно считать доли и квантили.

разбор

Выбор следует из поведения величины:

  • counter только увеличивается, кроме сброса при перезапуске процесса; это число запросов, ошибок или обработанных байтов;
  • gauge может расти и уменьшаться, поэтому подходит для очереди, активных соединений и занятой памяти;
  • histogram относит каждое наблюдение к накопительным бакетам и также экспортирует _sum и _count; границы бакетов задают полезную точность;
  • summary тоже измеряет распределение, но вычисленные на клиенте квантили обычно нельзя корректно агрегировать между репликами.

График сырого requests_total отвечает на вопрос «сколько было с запуска», а не «какова текущая нагрузка». rate(requests_total[...]) оценивает скорость роста и умеет учитывать сброс счётчика внутри выбранного диапазона. Для очень редких событий иногда понятнее increase, но окно запроса всё равно должно соответствовать масштабу графика или правила алерта.

Среднее время ответа скрывает хвост распределения: небольшая доля очень медленных запросов может почти не изменить среднее. Поэтому latency обычно инструментируют histogram, а не одним gauge.

чтобы прозвучать сильнее Объясни разницу между classic и native histograms без привязки к версии и свяжи границы бакетов с порогами пользовательского SLO.

devops-observability-002 · junior · high

Каким должен быть лог приложения, чтобы по нему реально расследовать сбой в проде? Что в лог писать нельзя?

как ответить Пишу структурированное событие со временем, уровнем, сервисом, окружением, названием операции, результатом и идентификаторами запроса или трейса. Поля должны быть стабильными и пригодными для фильтрации, а сообщение — объяснять событие, а не дублировать весь payload. Секреты, токены, пароли и лишние персональные данные в логи не попадают.

полный разбор и проверка ответа арбитром — в приложении devops-observability-004 · junior · high

Стоит ли будить дежурного из-за CPU выше порога? Как отличить хороший алерт от шумного?

как ответить Высокий CPU сам по себе чаще причина для дашборда или тикета, а не для немедленного page: будить нужно при срочном пользовательском воздействии и наличии действия. Хороший алерт устойчив к короткому шуму, содержит масштаб и контекст, ведёт к runbook и попадает правильному владельцу. Если на сигнал нельзя разумно отреагировать сейчас, его не стоит отправлять в pager.

полный разбор и проверка ответа арбитром — в приложении devops-observability-005 · junior · high

Как Prometheus получает метрики с приложения и как отличить падение сервиса от поломанного сбора метрик?

как ответить Prometheus по расписанию опрашивает обнаруженные targets по HTTP и сохраняет временные ряды из их exposition endpoint. Для известной цели метрика up показывает успех последнего scrape, а исчезнувшую из discovery цель приходится отдельно обнаруживать через проверку отсутствия ожидаемых рядов. Состояние scrape ещё не доказывает доступность сервиса для пользователя, поэтому его сверяю с внешней проверкой и сервисными метриками.

полный разбор и проверка ответа арбитром — в приложении devops-observability-003 · junior · medium

middle: где отделяют уверенных

Разработчик добавил в Prometheus-метрику labels user_id, request_id и полный URL. Что сломается и как сохранить нужную диагностическую ценность?

как ответить Каждая уникальная комбинация labels создаёт отдельный временной ряд, поэтому неограниченные ID и URL резко увеличат cardinality, память, размер хранилища и стоимость запросов. В метриках оставлю только ограниченные измерения вроде метода, шаблона маршрута, статуса и региона. Конкретный запрос перенесу в логи или трейсы и свяжу сигналы через trace ID или exemplar.

полный разбор и проверка ответа арбитром — в приложении devops-observability-006 · middle · high

Средняя задержка API нормальная, но пользователи жалуются на редкие зависания. Как посчитать p95 или долю запросов быстрее порога по Prometheus histogram и не ошибиться при агрегации реплик?

как ответить Использую histogram с бакетами вокруг значимых порогов. Для classic histogram сначала считаю rate по _bucket, суммирую реплики с сохранением label le, а затем применяю histogram_quantile. Долю запросов не дольше T считаю как sum(rate(..._bucket{le="T"}[...])) / sum(rate(..._count[...])), только если граница T была явно настроена; соседние бакеты дают лишь нижнюю или верхнюю оценку. Усреднять готовые квантили разных реплик нельзя.

полный разбор и проверка ответа арбитром — в приложении devops-observability-007 · middle · medium

Как применить RED к API, а USE — к его узлам и зависимостям? Почему одного графика загрузки CPU недостаточно?

как ответить Для потока запросов RED — это rate, errors и duration: сколько работы приходит, какая доля неуспешна и сколько она занимает. Для ресурса USE — utilization, saturation и errors: насколько он занят, есть ли очередь или ожидание и происходят ли ошибки. CPU может быть невысоким при насыщенном диске, пуле соединений или внешней зависимости, поэтому он не описывает сервис целиком.

полный разбор и проверка ответа арбитром — в приложении devops-observability-008 · middle · medium

Трасса HTTP-запроса обрывается после публикации сообщения в очередь. Что нужно передать между сервисами и как выбрать sampling, чтобы не потерять самые полезные запросы?

как ответить Продюсер должен внедрить trace context в метаданные сообщения, а consumer — извлечь его и создать связанный span; передавать локальный объект контекста между процессами нельзя. Head sampling дешёвый и принимает решение в начале, но не знает исход запроса; tail sampling видит готовую трассу и может сохранить ошибки и медленные запросы, зато требует буферизации. Политика должна сохранять целые трассы и учитывать низкочастотные критичные операции.

полный разбор и проверка ответа арбитром — в приложении devops-observability-009 · middle · medium

После релиза p99 вырос только в одном регионе, а общий error rate почти не изменился. Как проведёшь расследование и какой дашборд поможет не гадать?

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

полный разбор и проверка ответа арбитром — в приложении devops-observability-010 · middle · low

senior: глубина и продакшн

Как определить SLI и SLO для API, если технический health-check всегда зелёный, а часть пользователей не может оформить заказ? Что такое error budget?

как ответить SLI должен измерять успешный пользовательский результат на границе сервиса, например долю валидных попыток оформления, завершившихся корректно и вовремя. SLO задаёт целевую долю хороших событий за явное окно, а error budget — допустимая доля плохих событий, равная единице минус цель. Зелёный health-check проверяет процесс, но не заменяет SLI бизнес-пути.

полный разбор и проверка ответа арбитром — в приложении devops-observability-011 · senior · medium

Спроектируй алерты по SLO для быстрого массового сбоя и медленной деградации. Что должно быть в runbook, чтобы дежурный не начинал расследование с нуля?

как ответить Алерчу не на сам факт единичной ошибки, а на burn rate — насколько быстрее допустимого расходуется error budget. Быстрый расход проверяю коротким и подтверждающим длинным окном для page, медленный — более длинными окнами и менее срочным каналом. Runbook объясняет влияние, даёт точные проверки и безопасные способы смягчения, владельца и условия эскалации.

полный разбор и проверка ответа арбитром — в приложении devops-observability-012 · senior · low

Соседние темы того же собеса