Концепции и архитектура X-Ray

Мониторинг и устранение неполадок в AWS

John Q. Martin

Principal Consultant

Сложность распределённых систем

 

Монолитное приложение

  • Линейный поток, один процесс
  • Простота отладки

 

Распределённое приложение

  • Один запрос затрагивает несколько сервисов, БД, внешних API
  • При сбое — какой сервис виноват?

Запутанный клубок разноцветных нитей — метафора сложности трассировки запроса в распределённой системе

Мониторинг и устранение неполадок в AWS

Что такое AWS X-Ray?

 

X-Ray — сервис распределённой трассировки:

  • Отслеживает запросы сквозь все сервисы
  • Измеряет задержки и выявляет ошибки на каждом шаге
  • Визуализирует архитектуру приложения в виде карты сервисов

 

Пример пути запроса:

  Диаграмма пути запроса через несколько сервисов в распределённой трассировке

Мониторинг и устранение неполадок в AWS

Пять ключевых возможностей

 

Пять ключевых возможностей X-Ray: трассировка запросов, анализ производительности, обнаружение ошибок, карта сервисов и аналитика

Мониторинг и устранение неполадок в AWS

Как работает трассировка

 

Поток распределённой трассировки: запрос поступает в сервис A, который вызывает сервис B, затем сервис C; каждый сервис передаёт Trace ID в HTTP-заголовке и отправляет сегмент с тем же Trace ID демону X-Ray, который пересылает их в X-Ray, где они собираются в единую трассу

Мониторинг и устранение неполадок в AWS

Trace ID и распространение заголовка

 

Формат Trace ID:

Формат Trace ID в X-Ray: номер версии, временная метка Unix в шестнадцатеричном формате и уникальный идентификатор

 

HTTP-заголовок:

X-Amzn-Trace-Id:
  Root=1-5e8c1234-...;
  Parent=abc123;
  Sampled=1
  • Root — Trace ID, единый для всех сервисов
  • Parent — идентификатор родительского сегмента
  • Sampled — 0 или 1: трассируется или пропускается
Мониторинг и устранение неполадок в AWS

Демон X-Ray

 

Функции демона:

  • Слушает UDP-порт 2000
  • Принимает данные сегментов от приложения
  • Буферизует, группирует и отправляет в X-Ray API
  • Отделяет приложение от сервиса X-Ray

 

Развёртывание по окружениям:

Развёртывание демона X-Ray: автоматически на Lambda, как сервис на EC2, как sidecar-контейнер на ECS

Мониторинг и устранение неполадок в AWS

Выборка

 

Правило по умолчанию:

  • Первый запрос в секунду — всегда трассируется
  • 5% остальных запросов — выборочно

Поля пользовательского правила:

  • fixed_target — запросов/сек для постоянной трассировки
  • rate — доля остальных запросов
  • priority — меньшее число имеет приоритет

 

Пример стратегии:

Rule 1 (priority 1):
  5xx errors -> 100% sampling

Rule 2 (priority 10):
  Normal traffic -> 5% sampling
Мониторинг и устранение неполадок в AWS

Сегменты

 

Что фиксирует сегмент:

  • Имя сервиса
  • Время начала и окончания
  • Trace ID
  • Детали HTTP-запроса и ответа
  • Аккаунт AWS и регион

 

Состояния сегмента:

Пять состояний сегмента X-Ray: in progress, ok, error, fault и throttle

Мониторинг и устранение неполадок в AWS

Подсегменты

 

Сравнение временных шкал: без подсегментов — один блок 800 мс; с подсегментами — те же 800 мс разбиты на DynamoDB 50 мс, PaymentService 400 мс (узкое место) и InventoryService 300 мс

Назначение подсегментов:

  • Детальное измерение времени внутри сегмента
  • Отслеживание вызовов нижележащих сервисов
  • Разбивка 800 мс на составляющие:
    • DynamoDB.PutItem: 50 мс
    • Вызов PaymentService: 400 мс
    • Вызов InventoryService: 300 мс

 

Пространства имён:

Три пространства имён подсегментов: aws — для вызовов AWS, remote — для внешних HTTP, local — для пользовательского кода

Мониторинг и устранение неполадок в AWS

Аннотации

 

Основные характеристики:

  • Индексированные пары «ключ — значение» — поддерживают поиск и фильтрацию
  • Лимит: 50 индексированных на трассу
  • Типы: строка, число, логический

Применение:

  • user_id, order_id, environment
  • version, флаги функций, коды ошибок

 

Синтаксис фильтров:

annotation.user_id = "user-123"
annotation.environment = "production"
AND annotation.version = "1.2.3"
Мониторинг и устранение неполадок в AWS

Метаданные

 

Основные характеристики:

  • Не индексируются — поиск и фильтрация недоступны
  • Без ограничений по размеру
  • Поддерживают любую структуру JSON

Применение:

  • Полные тела запросов и ответов
  • Сообщения об ошибках и трассировки стека
  • Бизнес-контекст (позиции заказа, адреса)

 

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

Сравнительная таблица: аннотации — индексируются и поддерживают поиск; метаданные — детальные, не индексируются

Мониторинг и устранение неполадок в AWS

Полная структура трассы

 

Полная структура трассы: четыре сегмента, внешний платёжный API — самая медленная операция

Мониторинг и устранение неполадок в AWS

Итоги урока

 

  • X-Ray — сервис распределённой трассировки для сквозной видимости всех сервисов
  • Механизм трассировки — распространение Trace ID через HTTP-заголовки, сбор сегментов демоном, настраиваемые правила выборки
  • Компоненты трассы:
    • Сегменты — записи о работе на уровне сервиса
    • Подсегменты — детальное измерение времени вызовов нижележащих операций
    • Аннотации — индексированные пары «ключ — значение» для фильтрации и поиска
    • Метаданные — детальный контекст, не индексируется
Мониторинг и устранение неполадок в AWS

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

Мониторинг и устранение неполадок в AWS

Preparing Video For Download...