Concepte și arhitectură X-Ray

Monitorizare și depanare în AWS

John Q. Martin

Principal Consultant

Provocarea sistemelor distribuite

 

Aplicație monolitică

  • Flux liniar, conținut într-un singur proces
  • Ușor de depanat

 

Aplicație distribuită

  • O cerere atinge mai multe servicii, BD-uri, API-uri externe
  • Când apare o eroare, care serviciu a cauzat-o?

Un ghem mare de fire colorate încâlcite, ilustrând cât de greu este să urmărești o cerere printr-un sistem distribuit

Monitorizare și depanare în AWS

Ce este AWS X-Ray?

 

X-Ray este un serviciu de trasare distribuită care:

  • Urmărește cererile între servicii, de la cap la coadă
  • Măsoară latența și detectează erorile la fiecare pas
  • Vizualizează arhitectura aplicației ca hartă a serviciilor

 

Exemplu de traseu al unei cereri:

  Diagramă a traseului unei cereri care traversează mai multe servicii într-o trasare distribuită

Monitorizare și depanare în AWS

Cinci capabilități principale

 

Cinci capabilități principale X-Ray: trasarea cererilor, analiza performanței, detectarea erorilor, harta serviciilor și insights

Monitorizare și depanare în AWS

Cum funcționează trasarea

 

Flux de trasare distribuită: o cerere intră în Serviciul A, care apelează Serviciul B și Serviciul C, fiecare transmițând Trace ID-ul în antetul HTTP; fiecare serviciu emite un segment cu același Trace ID către daemonul X-Ray, care le trimite mai departe către X-Ray, unde sunt asamblate într-o trasare completă

Monitorizare și depanare în AWS

Trace ID și propagarea antetului

 

Formatul Trace ID:

Formatul Trace ID din X-Ray: număr de versiune, timestamp Unix în hex și identificator unic

 

Antet HTTP:

X-Amzn-Trace-Id:
  Root=1-5e8c1234-...;
  Parent=abc123;
  Sampled=1
  • Root, Trace ID, același pentru toate serviciile
  • Parent, ID-ul segmentului din amonte
  • Sampled, 0 sau 1, trasat sau omis
Monitorizare și depanare în AWS

Daemonul X-Ray

 

Ce face:

  • Ascultă pe portul UDP 2000
  • Primește date de segment din aplicație
  • Bufferează, grupează și trimite către API-ul X-Ray
  • Decuplează aplicația de serviciul X-Ray

 

Implementare pe medii:

Implementarea daemonului X-Ray pe medii: automat pe Lambda, ca serviciu pe EC2 și ca sidecar pe ECS

Monitorizare și depanare în AWS

Eșantionare

 

Regula implicită:

  • Prima cerere pe secundă – întotdeauna trasată
  • 5% din cererile suplimentare – eșantionate

Câmpurile regulii personalizate:

  • fixed_target – cereri/secundă trasate mereu
  • rate – procentul cererilor suplimentare
  • priority – numărul mai mic are prioritate

 

Exemplu de strategie:

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

Rule 2 (priority 10):
  Normal traffic -> 5% sampling
Monitorizare și depanare în AWS

Segmente

 

Ce înregistrează un segment:

  • Numele serviciului
  • Ora de început și de sfârșit
  • Trace ID
  • Detalii despre cererea și răspunsul HTTP
  • Contul și regiunea AWS

 

Stările segmentului:

Cinci stări ale segmentului X-Ray: in progress, ok, error, fault și throttle

Monitorizare și depanare în AWS

Subsegmente

 

Comparație cronologică: fără subsegmente – o singură bară de 800ms; cu subsegmente – aceiași 800ms împărțiți în DynamoDB 50ms, PaymentService 400ms marcat ca blocaj și InventoryService 300ms

Ce fac subsegmentele:

  • Oferă timing granular în interiorul unui segment
  • Urmăresc apelurile din aval
  • Descompun cei 800ms totali în:
    • DynamoDB.PutItem: 50ms
    • Apel PaymentService: 400ms
    • Apel InventoryService: 300ms

 

Spații de nume:

Trei spații de nume pentru subsegmente: aws pentru apeluri AWS, remote pentru HTTP extern și local pentru cod personalizat

Monitorizare și depanare în AWS

Adnotări

 

Informații cheie:

  • Perechi cheie-valoare indexate – căutabile și filtrabile
  • Limită: 50 indexate per trasare
  • Tipuri: string, number, boolean

Utilizare pentru:

  • user_id, order_id, environment
  • version, feature flags, coduri de eroare

 

Sintaxa de filtrare:

annotation.user_id = "user-123"
annotation.environment = "production"
AND annotation.version = "1.2.3"
Monitorizare și depanare în AWS

Metadate

 

Informații cheie:

  • Neindexate – nu pot fi căutate sau filtrate
  • Fără limită de dimensiune
  • Suportă orice structură JSON

Utilizare pentru:

  • Corpurile complete ale cererilor și răspunsurilor
  • Mesaje de eroare și stack trace-uri
  • Context de business (articole din comandă, adrese)

 

Adnotări vs. Metadate:

Tabel comparativ: adnotări – indexate și căutabile; metadate – detaliate și neindexate

Monitorizare și depanare în AWS

Structura completă a unei trasări

 

Structura completă a unei trasări cu patru segmente și API-ul extern de plăți ca operațiunea cea mai lentă

Monitorizare și depanare în AWS

Rezumatul lecției

 

  • X-Ray – serviciu de trasare distribuită pentru vizibilitate end-to-end între servicii
  • Mecanism de trasare – propagarea Trace ID prin anteturi HTTP, segmente colectate de daemon, reguli de eșantionare configurabile
  • Componentele unei trasări:
    • Segmente – înregistrări ale activității la nivel de serviciu
    • Subsegmente – timing granular al operațiunilor din aval
    • Adnotări – perechi cheie-valoare indexate, pentru filtrare și căutare
    • Metadate – context detaliat, neindexat
Monitorizare și depanare în AWS

Hai să exersăm!

Monitorizare și depanare în AWS

Preparing Video For Download...