Получить доступ

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

MiddleНаблюдаемость и SLO
Ещё спрашивают так:
  • Как искать причину роста задержки в микросервисах?
  • Зачем нужна распределённая трассировка?
Коротко

Метрики показывают, где и когда выросло; трейсы — в каком шаге ушло время; логи по trace_id — почему. Работает, только если корреляция построена заранее.

  • По метрикам: какой сервис, с какого момента, перцентили, насыщение (очереди, пулы)
  • По трейсам медленных запросов: какой спан длинный — свой код, база, внешний вызов, ожидание пула
  • По логам этого trace_id: ошибки, повторы, медленный запрос

А ещё Заранее: сквозной traceparent (W3C), OpenTelemetry, структурированные логи, tail-based семплирование

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

1. Локализовать по метрикам. Смотрим p95/p99 по каждому сервису и эндпоинту: где выросло и с какого времени. Сопоставляем с событиями — выкатка, всплеск трафика, изменение конфигурации. Смотрим насыщение: длину очередей, занятость пулов соединений и потоков, паузы GC — они выдают причину раньше утилизации CPU.

2. Найти шаг по трейсам. Берём трейсы медленных запросов: видно, какой спан занял время — запрос в базу, внешний вызов, ожидание соединения из пула, повторы. Важно сравнить с трейсами нормальных запросов.

3. Объяснить по логам. По trace_id находим структурированные логи всех сервисов этого запроса: ошибки, таймауты, план медленного запроса.

Что должно быть построено заранее:

  • сквозной идентификатор трассы через все сервисы и брокеры — заголовок traceparent (W3C Trace Context), автоматическая инструментация OpenTelemetry;
  • структурированные логи (JSON) с trace_id и span_id;
  • метрики в виде гистограмм с разрезом по версии и экземпляру;
  • tail-based семплирование — решение о сохранении трейса после его завершения: медленные и ошибочные сохраняются всегда. При head-based (решение в начале, например 1%) редкие медленные запросы до вас не доедут;
  • связь метрик с трейсами (exemplars).

Что хотят услышать

  • Последовательность: метрики → трейсы → логи.
  • Насыщение как ранний признак.
  • Что нужно заранее: сквозная корреляция, OpenTelemetry, структурированные логи.
  • Tail-based семплирование — плюс.

Частые ошибки

  • Начинать с чтения логов всех сервисов подряд.
  • Не иметь сквозного идентификатора и пытаться сопоставлять по времени.

Что спросят дальше

  • Почему хвост усиливается при параллельных вызовах?
  • Что бы вы измеряли, чтобы предсказать эту проблему заранее?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем