Распределённая трассировка с AWS X-Ray и структурированное логирование

Развёртывание приложений на AWS

Dunieski Otano

Amazon Web Services Solutions Architect

Медленный запрос, который никто не мог найти

  • Один запрос выполняется четыре секунды
  • Логи каждого сервиса выглядят нормально по отдельности
  • Никто не видит весь путь целиком

Лупа отслеживает один медленный запрос на карте распределённых сервисов с выделенным красным узлом-узким местом

Развёртывание приложений на AWS

Что решает распределённая трассировка

Слева — изолированные логи отдельных сервисов, выделены красным; справа — единая временная шкала трассировки X-Ray, объединяющая тот же запрос через API Gateway, Lambda, DynamoDB и внешний API, выделена зелёным

  • Один запрос затрагивает множество сервисов
  • Логи не показывают сквозной путь
  • Трасса связывает весь запрос воедино
  • Видно, где именно ушло время
Развёртывание приложений на AWS

Сегменты, подсегменты и карта сервисов

  • Сегмент: работа, выполненная одним сервисом
  • Подсегмент: единица внутри сегмента, например вызов БД
  • Карта сервисов: визуальный граф всех сегментов
  • Задержка и ошибки отображаются на каждом узле

Структура трассировки X-Ray: сегмент на каждый сервис с подсегментами для вызовов БД, объединёнными в граф карты сервисов с задержкой и частотой ошибок на каждом узле

Развёртывание приложений на AWS

Аннотации и метаданные


Аннотации

  • Индексированные пары ключ-значение — поддерживают фильтрацию
  • Используйте для полей поиска, например уровень клиента

Метаданные

  • Дополнительные данные, не индексируются
  • Добавляются для контекста, но поиск по ним недоступен
Развёртывание приложений на AWS

Корреляция логов с ID трасс

  • У каждой трассы есть уникальный ID трассы
  • Включайте ID трассы в структурированные логи
  • Переходите от медленной трассы к нужным строкам лога
  • Логи и трассы объединяются в одно расследование

Строка структурированного лога с выделенным полем xray_trace_id; стрелка ведёт от представления трассы X-Ray к совпадающим строкам лога в CloudWatch Logs для совместного анализа

Развёртывание приложений на AWS

Поиск узкого места по карте сервисов

Карта сервисов X-Ray с выделенным узлом высокой задержки; детализация временной шкалы трассы показывает наиболее длинный сегмент как узкое место

  • Начните с карты сервисов, а не с логов
  • Найдите узел с наибольшей задержкой
  • Откройте его временну́ю шкалу трассы
  • Самый длинный сегмент — главный подозреваемый
Развёртывание приложений на AWS

Трассировка всего пути запроса

  • API Gateway, Lambda и нисходящие вызовы — все трассируются
  • Каждый добавляет свой сегмент к общей трассе
  • Один ID трассы связывает логи и сегменты воедино
  • Полная видимость каждого запроса от начала до конца

Сквозная распределённая трасса от API Gateway через Lambda к DynamoDB и внешнему API; ID трассы виден в заголовке каждого сегмента и связывает все логи и сегменты воедино

Развёртывание приложений на AWS

Давайте потренируемся!

Развёртывание приложений на AWS

Preparing Video For Download...