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

Моніторинг і усунення несправностей в AWS

John Q. Martin

Principal Consultant

Виклик розподілених систем

 

Монолітний застосунок

  • Лінійний потік, усе в одному процесі
  • Легко зневаджувати

 

Розподілений застосунок

  • Один запит охоплює кілька сервісів, БД, зовнішніх API
  • Якщо збій — який сервіс винний?

Великий клубок різнокольорових ниток, що передає, як складно відстежити один запит у розподіленій системі

Моніторинг і усунення несправностей в AWS

Що таке AWS X-Ray?

 

X-Ray — сервіс розподіленого трасування, який:

  • Відстежує запити між сервісами від кінця до кінця
  • Вимірює затримки та виявляє помилки на кожному кроці
  • Візуалізує архітектуру як карту сервісів

 

Приклад шляху запиту:

  Схема шляху запиту через кілька сервісів у розподіленому трасуванні

Моніторинг і усунення несправностей в AWS

П'ять ключових можливостей

 

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

Моніторинг і усунення несправностей в AWS

Як працює трасування

 

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

Моніторинг і усунення несправностей в AWS

Trace ID і поширення заголовка

 

Формат Trace ID:

Формат X-Ray Trace ID з номером версії, 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

Вибірка (Sampling)

 

Типове правило:

  • Перший запит за секунду — завжди трасується
  • 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 індексованих на трас
  • Типи: string, number, boolean

Використовуйте для:

  • user_id, order_id, environment
  • version, прапорці функцій, коди помилок

 

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

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

Метадані

 

Важливе:

  • Не індексується — пошук і фільтр недоступні
  • Без обмеження розміру
  • Підтримує будь-яку структуру JSON

Використовуйте для:

  • Повні тіла запитів і відповідей
  • Повідомлення про помилки та стек-трейси
  • Бізнес-контекст (позиції замовлення, адреси)

 

Анотації vs. Metadata:

Порівняння: анотації індексуються й доступні для пошуку, метадані — деталізовані, але не індексуються

Моніторинг і усунення несправностей в AWS

Повна структура трасу

 

Повна структура трасу з чотирма сегментами та зовнішнім платіжним API як найповільнішою операцією

Моніторинг і усунення несправностей в AWS

Підсумок уроку

 

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

Давайте потренуємось!

Моніторинг і усунення несправностей в AWS

Preparing Video For Download...