

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat subsegmen kustom dengan X-Ray SDK for Java
<a name="xray-sdk-java-subsegments"></a>

**catatan**  
X-Ray SDK/Daemon Pemberitahuan Pemeliharaan — Pada 25 Februari 2026, AWS X-Ray SDKs/Daemon akan memasuki mode pemeliharaan, di mana AWS akan membatasi rilis X-Ray SDK dan Daemon hanya untuk mengatasi masalah keamanan. Untuk informasi selengkapnya tentang garis waktu dukungan, lihat[Garis waktu Dukungan X-Ray SDK dan Daemon](xray-sdk-daemon-timeline.md). Kami merekomendasikan untuk bermigrasi ke OpenTelemetry. Untuk informasi selengkapnya tentang migrasi ke OpenTelemetry, lihat [Migrasi dari X-Ray instrumentasi ke instrumentasi](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Subsegmen memperluas [segmen](xray-concepts.md#xray-concepts-segments) pelacakan dengan detail tentang pekerjaan yang dilakukan untuk melayani permintaan. Setiap kali Anda melakukan panggilan dengan klien yang diinstrumentasi, X-Ray SDK mencatat informasi yang dihasilkan di subsegmen. Anda dapat membuat subsegment tambahan untuk mengelompokkan subsegment lain, untuk mengukur performa bagian kode, atau untuk mencatat anotasi dan metadata.

Untuk mengelola subsegment, gunakan metode `beginSubsegment` dan `endSubsegment`.

**Example GameModel.java - subsegmen kustom**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
...
  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();
    }
  }
```

Dalam contoh ini, kode dalam subsegmen memuat sesi game dari DynamoDB dengan metode pada model sesi, dan menggunakan AWS SDK untuk Java pemetaan DynamoDB untuk menyimpan game. Membungkus kode ini di subsegmen membuat panggilan DynamoDB anak subsegmen `Save Game` dalam tampilan penelusuran di konsol tersebut.

![Timeline yang menampilkan Scorekeep dan DynamoDB operasi dengan durasi dan pemeriksaan status.](http://docs.aws.amazon.com/id_id/xray/latest/devguide/images/scorekeep-PUTrules-timeline-subsegments.png)


Jika kode di subsegmen Anda melempar pengecualian yang diperiksa, bungkus dalam blok `try` dan panggilan `AWSXRay.endSubsegment()` dalam blok `finally` untuk memastikan bahwa subsegmen selalu tertutup. Jika subsegmen tidak ditutup, segmen induk tidak dapat diselesaikan dan tidak akan dikirim ke X-Ray.

Untuk kode yang tidak membuang pengecualian yang diperiksa, Anda dapat melewati kode untuk `AWSXRay.CreateSubsegment` sebagai fungsi Lambda.

**Example Subsegmen fungsi Lambda**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);

AWSXRay.createSubsegment("getMovies", (subsegment) -> {
    // function code
});
```

Saat Anda membuat subsegmen dalam segmen atau subsegmen lain, X-Ray SDK for Java akan menghasilkan ID untuknya dan mencatat waktu mulai dan waktu akhir.

**Example Subsegmen dengan metadata**  

```
"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"
    }
  },
```

Untuk pemrograman asinkron dan multi-utas, Anda harus meneruskan subsegmen secara manual ke `endSubsegment()` metode untuk memastikannya ditutup dengan benar karena X-Ray konteksnya dapat dimodifikasi selama eksekusi asinkron. Jika subsegmen asinkron ditutup setelah segmen induknya ditutup, metode ini akan secara otomatis mengalirkan seluruh segmen ke daemon. X-Ray 

**Example Subsegmen Asinkron**  

```
@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();
}
```