Generazione di sottosegmenti personalizzati con l'SDK X-Ray per Java - AWS X-Ray

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Generazione di sottosegmenti personalizzati con l'SDK X-Ray per Java

I sottosegmenti estendono una tracciasegmentocon dettagli sul lavoro svolto per soddisfare una richiesta. Ogni volta che si effettua una chiamata con un client strumentato, l'SDK X-Ray registra le informazioni generate in un sottosegmento. È possibile creare sottosegmenti aggiuntivi per raggruppare altri segmenti secondari, per misurare le prestazioni di una sezione di codice o per registrare annotazioni e metadati.

Per gestire i sottosegmenti, utilizza i metodi beginSubsegment e endSubsegment.

Esempio GameModel.java - Sottosegmento personalizzato
import com.amazonaws.xray.AWSXRay; ... public void saveGame(Game game) throws SessionNotFoundException { // wrap in subsegment Subsegment subsegment = AWSXRay.beginSubsegment("Save Game"); try { // check session String sessionId = game.getSession(); if (sessionModel.loadSession(sessionId) == null ) { throw new SessionNotFoundException(sessionId); } mapper.save(game); } catch (Exception e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(); } }

In questo esempio, il codice all'interno del sottosegmento carica la sessione di gioco da DynamoDB con un metodo sul modello della sessione e utilizza l'AWS SDK for Javadi DynamoDB mapper per salvare il gioco. Il wrapping di questo codice in un sottosegmento rende le chiamate a figlie diSave GameSottosegmento nella visualizzazione del tracciamento nella console.

Timeline showing Scorekeep and DynamoDB operations with durations and status checks.

Se il codice nel tuo sottosegmento genera eccezioni gestite, eseguine il wrapping in un blocco try e chiama AWSXRay.endSubsegment() in un blocco finally per assicurare che il sottosegmento sia sempre chiuso. Se un sottosegmento non è chiuso, il segmento padre non può essere completato e non sarà inviato a X-Ray X.

Nel caso di codice che non genera eccezioni controllate, puoi inoltrare il codice aAWSXRay.CreateSubsegmentfunzione Lambda.

Esempio Funzione Lambda del sottosegmento
import com.amazonaws.xray.AWSXRay; AWSXRay.createSubsegment("getMovies", (subsegment) -> { // function code });

Quando crei un sottosegmento all'interno di un segmento o di un altro sottosegmento, l'SDK X-Ray per Java genera per esso un ID e memorizza l'ora di inizio e fine.

Esempio Sottosegmento con metadati
"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },

Per la programmazione asincrona e multi-thread, è necessario passare manualmente il sottosegmento alendSubsegment()metodo per garantire che sia chiuso correttamente perché il contesto X-Ray può essere modificato durante l'esecuzione asincrona. Se un sottosegmento asincrono viene chiuso dopo la chiusura del segmento padre, questo metodo trasmette automaticamente l'intero segmento al demone a X-Ray X.

Esempio Sottosegmento asincrono
@GetMapping("/api") public ResponseEntity<?> api() { CompletableFuture.runAsync(() -> { Subsegment subsegment = AWSXRay.beginSubsegment("Async Work"); try { Thread.sleep(3000); } catch (InterruptedException e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(subsegment); } }); return ResponseEntity.ok().build(); }