

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

# Konfigurasikan visibilitas titik akhir HTTP
<a name="Application-Signals-EndpointVisibility"></a>

Halaman ini memberikan panduan untuk pelanggan Sinyal Aplikasi yang berharap untuk melihat operasi layanan HTTP mereka dipisahkan oleh nama titik akhir tertentu, tetapi sebaliknya melihat beberapa titik akhir dikelompokkan ke dalam metrik yang sama. Secara default, Application Signals memotong dimensi `Operation` metrik ke segmen jalur URL pertama untuk layanan HTTP (misalnya, `/api/v1/users` menjadi`GET /api`) untuk mempertahankan metrik kardinalitas rendah. Akibatnya, pengguna mungkin menemukan bahwa layanan dengan beberapa titik akhir yang berbagi awalan yang sama memiliki visibilitas terbatas ke kesehatan operasional titik akhir individu. Anda dapat mengikuti langkah-langkah di bawah ini untuk mengonfigurasi titik akhir operasi layanan ke perincian yang Anda inginkan.

**penting**  
Memodifikasi visibilitas titik akhir adalah perubahan besar karena memengaruhi dimensi metrik Sinyal Aplikasi untuk operasi layanan. Ingatlah untuk memperbarui ambang batas SLO, alarm, dasbor yang sesuai. and/or 

## AWS Distro untuk solusi OpenTelemetry (ADOT)
<a name="Application-Signals-EndpointVisibility-ADOT"></a>

Untuk pelanggan yang menggunakan AWS Distro for OpenTelemetry (ADOT), atur variabel `OTEL_AWS_HTTP_OPERATION_PATHS` lingkungan dengan daftar templat jalur URL yang dipisahkan koma untuk layanan HTTP:

```
export OTEL_AWS_HTTP_OPERATION_PATHS="/path/to/endpoint, /another/{placeholder}/endpoint"
```

Variabel ini menggunakan awalan pencocokan terpanjang terhadap `url.path` atribut rentang server HTTP untuk menentukan nama operasi. Pola wildcard cocok dengan segmen URL tunggal dan dapat dilambangkan dengan`{placeholder}`,, `:placeholder` atau. `*` Setelah menyetel variabel, restart aplikasi Anda agar pengelompokan endpoint baru diterapkan.

Variabel ini didukung dalam ADOT untuk Java, Python Node.js, dan .NET.

**Contoh**

Pertimbangkan layanan API yang menerima lalu lintas berikut:

```
GET  /api/users
GET  /api/users/42
GET  /api/users/42/orders
POST /api/users/99/orders
POST /api/users/42/orders
GET  /api/users/42/orders/7/items
GET  /api/products
```

Secara default, Sinyal Aplikasi mengelompokkan semua ini ke dalam `GET /api` atau metrik `POST /api` layanan, sehingga tidak mungkin untuk membedakan kinerja antara titik akhir.

Untuk memperbaikinya, atur variabel lingkungan dengan templat jalur yang diinginkan:

```
export OTEL_AWS_HTTP_OPERATION_PATHS="/api/users/{userId}/orders/{orderId}/items, /api/users/{userId}/orders, /api/users/{userId}, /api/users, /api/products"
```

Dengan konfigurasi ini, Sinyal Aplikasi menunjukkan operasi yang berbeda. Beberapa permintaan dapat diselesaikan ke templat yang dikonfigurasi yang sama:


**Contoh hasil konfigurasi visibilitas titik akhir**  

| Permintaan masuk | Operasi default | Dengan konfigurasi | 
| --- | --- | --- | 
| GET /api/users | GET /api | GET /api/users | 
| GET /api/users/42 | GET /api | GET /api/users/{userId} | 
| GET /api/users/42/orders | GET /api | GET /api/users/{userId}/orders | 
| POST /api/users/99/orders | POST /api | POST /api/users/{userId}/orders | 
| POST /api/users/42/orders | POST /api | POST /api/users/{userId}/orders | 
| GET /api/users/42/orders/7/items | GET /api | GET /api/users/{userId}/orders/{orderId}/items | 
| GET /api/products | GET /api | GET /api/products | 

## OpenTelemetry Solusi asli
<a name="Application-Signals-EndpointVisibility-NativeOTel"></a>

Jika Anda menggunakan OpenTelemetry SDK asli (tanpa ADOT), Anda dapat mengganti nama rentang menggunakan prosesor transformasi di OpenTelemetry Collector Anda atau langsung dalam kode aplikasi.

**catatan**  
Anda harus mengkonfigurasi kolektor Anda dengan eksportir OTLP untuk mempertahankan nama OpenTelemetry rentang sehingga CloudWatch dapat menguraikannya untuk nama operasi Sinyal Aplikasi. Untuk informasi selengkapnya, lihat [Mengirim data OTLP](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPSimplesetup.html) ke. CloudWatch

**Opsi 1 (disarankan): Collector-side transformasi**

Gunakan [prosesor transformasi](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor) untuk mengatur nama rentang berdasarkan pola URL. Prosesor transformasi menggunakan OTTL (OpenTelemetry Transformation Language) dan dapat memodifikasi `name` bidang span secara langsung.

Aturan urutan dari yang paling dangkal ke yang paling dalam — pernyataan berjalan secara berurutan, sehingga kecocokan yang lebih spesifik nanti dalam daftar akan menggantikan yang umum yang ditetapkan sebelumnya. Dalam contoh berikut, nilai atribut span `url.path` dicocokkan dan nama rentang yang dihasilkan diatur ke metode permintaan diikuti oleh pola URL yang diinginkan.

```
processors:
  transform/operation_names:
    trace_statements:
      - context: span
        conditions:
          - IsMatch(attributes["url.path"], "^/api/contests(/|$)")
        statements:
          - set(name, Concat([attributes["http.request.method"], "/api/contests"], " "))

      - context: span
        conditions:
          - IsMatch(attributes["url.path"], "^/api/contests/[^/]+$")
        statements:
          - set(name, Concat([attributes["http.request.method"], "/api/contests/{id}"], " "))

      - context: span
        conditions:
          - IsMatch(attributes["url.path"], "^/api/contests/[^/]+/leaderboard(/|$)")
        statements:
          - set(name, Concat([attributes["http.request.method"], "/api/contests/{id}/leaderboard"], " "))

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [resourcedetection, transform/operation_names, batch]
      exporters: [otlphttp/xray]
```

**Opsi 2: Mengatur nama rentang dalam kode aplikasi**

Anda dapat secara manual mengatur nama rentang untuk rentang server dalam kode aplikasi Anda menggunakan OpenTelemetry API. Tetapkan nama ke `{HTTP_METHOD} {route_template}` tempat template rute menggunakan placeholder berparameter. Perhatikan bahwa ini adalah opsi fallback hardcode, dan Anda harus memperbarui nama rentang secara manual di setiap penangan permintaan HTTP untuk menerapkan perubahan ini.

**Java**

```
import io.opentelemetry.api.trace.Span;

// Inside your request handler
Span.current().updateName("GET /api/contests/{id}/leaderboard");
```

**Python**

```
from opentelemetry import trace

# Inside your request handler
span = trace.get_current_span()
span.update_name("GET /api/contests/{id}/leaderboard")
```

**Go**

```
import "go.opentelemetry.io/otel/trace"

// Inside your request handler
span := trace.SpanFromContext(ctx)
span.SetName("GET /api/contests/{id}/leaderboard")
```

**Node.js**

```
import { trace } from '@opentelemetry/api';

// Inside your request handler
const span = trace.getActiveSpan();
if (span) {
  span.updateName('GET /api/contests/{id}/leaderboard');
}
```