Робота з AWS X-Ray

Практичний посібник

Введення в AWS X-Ray

X-Ray — це сервіс, який збирає дані про запити, які обробляє ваш додаток, і має інструменти для аналізу цих даних, щоб отримати практичні інсайти для виявлення можливостей для налагодження і оптимізації. Для кожного сліду (шляху запиту через ваш додаток) ви можете побачити детальну інформацію про запит, відповідь та, що найважливіше, виклики, які ваш додаток робить до будь-якого зовнішнього ресурсу AWS, мікросервісів, баз даних і веб-API, наприклад, ваша функція Lambda, що викликає S3 bucket. Це допомагає розробникам аналізувати та налагоджувати розподілені додатки, такі як мікросервіси, відстежуючи запити, коли вони проходять через різні сервіси та ресурси архітектури.

Варіанти використання:

  • Налагодження та виявлення помилок: Відстежуйте, як запит проходить через кілька сервісів, виявляйте вузькі місця продуктивності, помилки та збої у вашому додатку.
  • Оптимізація продуктивності: Отримуйте інсайти про затримки між вашими сервісами.
  • Розподілене трасування: Включіть трасування запитів від фронтенду до бекенду, щоб мати центральний погляд на статус додатку.

Ключові концепції:

Перед тим, як зануритися в інструкцію, необхідно зрозуміти кілька основних понять X-Ray. Інструментування вашого додатку включає відправку даних трасування для вхідних і вихідних запитів і інших подій у вашому додатку разом з метаданими для кожного запиту.

Замість того, щоб надсилати дані трасування безпосередньо в X-Ray, кожен клієнтський SDK надсилає JSON документи сегментів на демон-процес, відправляючи їх через демон X-Ray. Демон зберігає сегменти в черзі та завантажує їх в X-Ray партіями. Це дозволяє зменшити кількість викликів API для кожного сліду в X-Ray. Демон доступний для Linux, Windows та macOS, а також вбудований у AWS Elastic Beanstalk і AWS Lambda.

  • Вибірка: X-Ray SDK застосовує алгоритм вибірки, щоб визначити, які запити мають бути трасовані.
  • Анотації: Ключ-значення пари, які додаються для фільтрації слідів на основі конкретних атрибутів.
  • Метадані: На відміну від анотацій, метадані зазвичай не використовуються для фільтрації, а для додаткового контексту під час аналізу.
  • Сегменти: Найвищий рівень сліду, записує інформацію трасування про запит, який обробляє ваш додаток, наприклад, ім’я, ID, час початку, trace ID.
  • Підсегменти: Це зазвичай виклик до іншого сервісу, запит до бази даних або інша операція в межах одного сервісу, наприклад, сервіс AWS, зовнішній HTTP API, SQL база даних.

Пояснення

У цьому посібнику я маю простий додаток для задач, який працює на Lambda і знаходиться перед API Gateway. Коли користувач вводить URL виклику в браузері, функція Lambda отримує інформацію про задачі з DynamoDB, а коли користувач додає нову задачу, вона зберігається в DynamoDB. Ми побачимо, як X-Ray надає нам загальний огляд цього простого додатка.

pic

Архітектура додатку ToDo

Виявлення проблем за допомогою X-Ray

Перейдіть до консолі CloudWatch і під X-Ray traces натисніть на «Traces»

pic

Консоль CloudWatch

Ви зможете побачити сліди, зроблені вашим додатком, натисніть на один з запитів.

pic

Тут ви побачите деталі одного сліду, що показує інформацію, захоплену в одному сліді, від клієнта до будь-якого підключеного до нього додатка. У цьому випадку, Lambda і DynamoDB.

pic

Перегляд сліду

Коли ми прокручуємо вниз, ми можемо побачити Сегменти та Підсегменти разом з кодом відповіді, статусом і тривалістю.
Це дає нам додаткові інсайти щодо помилок і затримок для моніторингу продуктивності.

pic

Деталі сліду

Тепер давайте перейдемо до коду Lambda та відредагуємо його так, щоб він вказував на неіснуючий DynamoDB, щоб змоделювати збій в додатку. Я редагуватиму 12 рядок, щоб він вказував на неіснуючу таблицю DynamoDB і натисну на "Deploy".

pic

Моделювання випадку збою

Коли я запускаю вебсайт, ми бачимо, що список задач не завантажується. Це тому, що код тепер читає з неіснуючої таблиці DynamoDB.

pic

Тепер давайте перейдемо до X-Ray, щоб побачити, що саме пішло не так.

pic

pic

У X-Ray ми можемо побачити кілька помилок зі статусом 500, і коли ми переходимо до підсегмента DynamoDB, ми бачимо детальну помилку "ResourceNotFoundException". Ось як ми можемо усунути неполадки та швидко визначити збій у додатках, які взаємодіють з іншими сервісами, що знаходяться нижче по ланцюгу, в одному погляді.

Додавання анотацій і метаданих

Тепер ми додамо анотації та метадані в X-Ray, щоб фільтрувати сліди та отримати додаткову інформацію про кожен запит. Нижче наведені фрагменти коду для модифікації вашого додатка з анотаціями та метаданими.

# Додати анотації для запиту   
 with xray_recorder.in_subsegment('Lambda_Annotation') as subsegment:  
 subsegment.put_annotation('http_method', http_method)  
 subsegment.put_annotation('path', path)
with xray_recorder.in_subsegment('DynamoDB_GetTodos') as subsegment:  
 try:  
 response = table.scan()  
 todos = response.get('Items', [])  
 subsegment.put_metadata('todos', todos) # Додаємо метадані для отриманих задач  

with xray_recorder.in_subsegment('DynamoDB_PutTodo') as subsegment:  
 try:  
 table.put_item(Item={  
 'id': todo_id,  
 'title': title,  
 'status': status,  
 })  
 subsegment.put_metadata('todo_item', {'id': todo_id, 'title': title, 'status': status}) # Додаємо метадані для нової задачі

З доданими фрагментами коду в наш додаток, давайте оновимо вебсайт і переглянемо слід X-Ray.

pic

pic

Анотації та метадані

Примітка: вище наведений сегмент, записаний для сервісу Lambda, AWS::Lambda, покриває всі етапи підготовки середовища виконання Lambda, такі як створення середовища виконання для Lambda з ресурсами, які ви налаштували, а також завантаження коду вашої функції та всіх шарів. Сегмент AWS::Lambda::Function відповідає за роботу, яку виконує функція.

Якщо сегмент AWS::Lambda показує помилку, це означає, що у сервісі Lambda сталася проблема. Якщо сегмент AWS::Lambda::Function показує помилку, ваша функція має проблему, і вам потрібно буде налагоджувати код або конфігурацію функції.

Вищезгадане показує, як анотації та метадані додаються до виклику сліду. У той час як метадані надають додатковий контекст і інформацію про кожен виклик, наприклад, які дані витягуються з DynamoDB. Як тільки ваш додаток зростає, він може генерувати тисячі слідів кожну годину.
Анотації дозволяють нам використовувати вираз фільтра, який обмежує результати на основі заданих користувацьких атрибутів або ключів.

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

annotation[path] = "/todos" AND annotation[http_method] = "GET"

pic

Тепер ми можемо відфільтрувати сліди за GET запитом і шляхом /todos.

Спробуємо те ж саме для POST запиту, фрагмент запиту наведений нижче.

annotation[path] = "/todos" AND annotation[http_method] = "POST"

pic

Ми не бачимо жодного сліду, оскільки ми ще не зробили POST запит. Для цього давайте повернемося до веб-додатку і додамо нову задачу.

pic

Тепер, коли ми додали нову задачу, давайте повернемося до консолі X-Ray і знову запустимо фільтр запиту.

pic

pic

Ми бачимо відфільтрований результат сліду та метадані, які ми додали раніше.

Підсумок

У цьому посібнику ми продемонстрували, як AWS X-Ray може надати інсайти щодо продуктивності та поведінки розподілених додатків за допомогою нашого додатку todo, що використовує AWS Lambda, API Gateway і DynamoDB. Додавши анотації та метадані до слідів функції Lambda, ми змогли відслідковувати ключові атрибути, такі як HTTP методи, шляхи і операції з DynamoDB. Це дозволяє швидко усувати неполадки та оптимізувати розподілені додатки, що покладаються на кілька сервісів AWS. Крім того, ми дізналися, як AWS X-Ray покращує усунення неполадок і моніторинг для безсерверної архітектури, побудованої на мікросервісах.

Перекладено з: Working with AWS X-Ray

Leave a Reply

Your email address will not be published. Required fields are marked *