X-Ray-concepten en -architectuur

Monitoring en troubleshooting van AWS

John Q. Martin

Principal Consultant

De uitdaging van gedistribueerde systemen

 

Monolithische applicatie

  • Lineaire flow, in één proces
  • Makkelijk te debuggen

 

Gedistribueerde applicatie

  • Eén request raakt meerdere services, DB's, externe API's
  • Gaat het mis: welke service veroorzaakte het?

Een grote, verwarde kluwen van gekleurde draden die laat zien hoe lastig het is één request te tracen in een gedistribueerd systeem

Monitoring en troubleshooting van AWS

Wat is AWS X-Ray?

 

X-Ray is een distributed tracing-service die:

  • Requests end-to-end over services volgt
  • Latentie meet en fouten per stap detecteert
  • De architectuur visualiseert als servicemap

 

Voorbeeld van een requestpad:

  Diagram van een requestpad dat door meerdere services in een distributed trace loopt

Monitoring en troubleshooting van AWS

Vijf kernmogelijkheden

 

Vijf kernmogelijkheden van X-Ray: request tracing, prestatie-analyse, foutdetectie, servicemap en inzichten

Monitoring en troubleshooting van AWS

Hoe tracing werkt

 

Distributed tracing-flow: een request komt binnen bij Service A, die Service B en dan Service C aanroept; de Trace ID gaat mee in de HTTP-header; elke service stuurt een segment met dezelfde Trace ID naar de X-Ray-daemon, die alles doorstuurt naar X-Ray waar het één complete trace wordt

Monitoring en troubleshooting van AWS

Trace ID en header-propagatie

 

Trace ID-formaat:

X-Ray Trace ID-formaat met versienummer, Unix-timestamp in hex en unieke identifier

 

HTTP-header:

X-Amzn-Trace-Id:
  Root=1-5e8c1234-...;
  Parent=abc123;
  Sampled=1
  • Root, Trace ID, gelijk in alle services
  • Parent, upstream segment-ID
  • Sampled, 0 of 1, getraceerd of overgeslagen
Monitoring en troubleshooting van AWS

De X-Ray-daemon

 

Wat het doet:

  • Luistert op UDP-poort 2000
  • Ontvangt segmentdata van je applicatie
  • Bufferen, batchen en doorsturen naar de X-Ray API
  • Ontkoppelt je app van de X-Ray-service

 

Implementatie per omgeving:

X-Ray-daemonimplementatie per omgeving: automatisch op Lambda, als service op EC2 en als sidecar op ECS

Monitoring en troubleshooting van AWS

Sampling

 

Standaardregel:

  • Eerste request per seconde: altijd getraceerd
  • 5% van overige requests: gesampled

Aangepaste regelvelden:

  • fixed_target - requests/sec die je altijd traceert
  • rate - percentage van overige requests
  • priority - lager nummer gaat voor

 

Voorbeeldstrategie:

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

Rule 2 (priority 10):
  Normaal verkeer -> 5% sampling
Monitoring en troubleshooting van AWS

Segmenten

 

Wat een segment vastlegt:

  • Servicenaam
  • Start- en eindtijd
  • Trace ID
  • HTTP-request- en responsedetails
  • AWS-account en -regio

 

Segmentstatussen:

Vijf X-Ray-segmentstatussen: in progress, ok, error, fault en throttle

Monitoring en troubleshooting van AWS

Subsegmenten

 

Tijdlijnvergelijking: zonder subsegmenten één totale balk van 800 ms; met subsegmenten dezelfde 800 ms uitgesplitst in DynamoDB 50 ms, PaymentService 400 ms gemarkeerd als bottleneck, en InventoryService 300 ms

Wat subsegmenten doen:

  • Fijne timing binnen een segment
  • Downstream-calls bijhouden
  • Maakt van 800 ms totaal:
    • DynamoDB.PutItem: 50 ms
    • PaymentService-call: 400 ms
    • InventoryService-call: 300 ms

 

Namespaces:

Drie subsegment-namespaces: aws voor AWS-calls, remote voor externe HTTP en local voor eigen code

Monitoring en troubleshooting van AWS

Annotaties

 

Kernfeiten:

  • Geïndexeerde key-valueparen - doorzoekbaar en te filteren
  • Limiet: 50 geïndexeerd per trace
  • Types: string, number, boolean

Gebruik voor:

  • user_id, order_id, environment
  • version, feature flags, foutcodes

 

Filtersyntaxis:

annotation.user_id = "user-123"
annotation.environment = "production"
AND annotation.version = "1.2.3"
Monitoring en troubleshooting van AWS

Metadata

 

Kernfeiten:

  • Niet geïndexeerd - niet doorzoekbaar of te filteren
  • Geen groottelimiet
  • Ondersteunt elke JSON-structuur

Gebruik voor:

  • Volledige request- en responsebodies
  • Foutmeldingen en stacktraces
  • Businesscontext (bestelregels, adressen)

 

Annotaties vs. metadata:

Vergelijkingstabel: annotaties geïndexeerd en doorzoekbaar versus metadata gedetailleerd en niet geïndexeerd

Monitoring en troubleshooting van AWS

Complete tracestructuur

 

Complete tracestructuur met vier segmenten en de externe betalings-API als de langzaamste bewerking

Monitoring en troubleshooting van AWS

Lesoverzicht

 

  • X-Ray - distributed tracing-service voor end-to-end zicht over services
  • Tracingmechanisme - Trace ID-propagatie via HTTP-headers, segmenten verzameld door de daemon, configureerbare samplingregels
  • Trace-componenten:
    • Segmenten - service-level werkrecords
    • Subsegmenten - gedetailleerde timing van downstream-operaties
    • Annotaties - geïndexeerde key-valueparen voor filteren en zoeken
    • Metadata - gedetailleerde context, niet geïndexeerd
Monitoring en troubleshooting van AWS

Laten we oefenen!

Monitoring en troubleshooting van AWS

Preparing Video For Download...