

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à.

# Configura la visibilità degli endpoint HTTP
<a name="Application-Signals-EndpointVisibility"></a>

Questa pagina fornisce indicazioni per i clienti di Application Signals che si aspettano di vedere le operazioni del servizio HTTP separate da nomi di endpoint specifici, ma vedono invece più endpoint raggruppati nella stessa metrica. Per impostazione predefinita, Application Signals tronca la dimensione `Operation` metrica nel primo segmento di percorso URL per i servizi HTTP (ad esempio, diventa) per preservare le metriche a bassa cardinalità. `/api/v1/users` `GET /api` Di conseguenza, gli utenti potrebbero scoprire che i servizi con più endpoint che condividono lo stesso prefisso hanno una visibilità limitata sullo stato operativo dei singoli endpoint. È possibile seguire i passaggi seguenti per configurare gli endpoint operativi del servizio in base alla granularità desiderata.

**Importante**  
La modifica della visibilità degli endpoint è una modifica fondamentale in quanto influisce sulle dimensioni metriche di Application Signals per le operazioni di servizio. Ricordati di aggiornare di conseguenza le soglie, gli allarmi e i dashboard SLO. and/or 

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

Per i clienti che utilizzano AWS Distro for OpenTelemetry (ADOT), imposta la variabile di `OTEL_AWS_HTTP_OPERATION_PATHS` ambiente con un elenco separato da virgole di modelli di percorso URL per il servizio HTTP:

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

Questa variabile utilizza il prefisso corrispondente più lungo rispetto all'attributo span del server HTTP per determinare il nome dell'operazione. `url.path` I pattern wildcard corrispondono a qualsiasi singolo segmento di URL e possono essere indicati con, o. `{placeholder}` `:placeholder` `*` Dopo aver impostato la variabile, riavviate l'applicazione per rendere effettivi i nuovi raggruppamenti di endpoint.

Questa variabile è supportata in ADOT per Java, Python Node.js e.NET.

**Esempio**

Consideriamo un servizio API che riceve il seguente traffico:

```
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
```

Per impostazione predefinita, Application Signals raggruppa tutti questi dati in `GET /api` metriche di `POST /api` servizio, rendendo impossibile distinguere le prestazioni tra gli endpoint.

Per risolvere questo problema, imposta la variabile di ambiente con i modelli di percorso desiderati:

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

Con questa configurazione, Application Signals mostra operazioni distinte. Più richieste possono essere risolte nello stesso modello configurato:


**Esempi di risultati di configurazione della visibilità degli endpoint**  

| Richiesta in entrata | Operazione predefinita | Con configurazione | 
| --- | --- | --- | 
| 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 | 

## Soluzione nativa OpenTelemetry
<a name="Application-Signals-EndpointVisibility-NativeOTel"></a>

Se utilizzi l' OpenTelemetry SDK nativo (senza ADOT), puoi sovrascrivere lo span name utilizzando il processore di trasformazione in OpenTelemetry Collector o direttamente nel codice dell'applicazione.

**Nota**  
È necessario configurare il raccoglitore con un esportatore OTLP per preservare lo OpenTelemetry span name in modo che CloudWatch possa analizzarlo per il nome dell'operazione Application Signals. [Per ulteriori informazioni, vedete Invio di dati OTLP a. CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPSimplesetup.html)

**Opzione 1 (consigliata): trasformazione Collector-side **

Utilizzate il [processore di trasformazione](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor) per impostare i nomi degli span in base ai modelli di URL. Il processore di trasformazione utilizza OTTL (OpenTelemetry Transformation Language) e può modificare direttamente il campo span`name`.

Ordina le regole dalla più superficiale alla più profonda: le istruzioni vengono eseguite in sequenza, quindi le corrispondenze più specifiche più avanti nell'elenco hanno la precedenza su quelle generali impostate in precedenza. Nell'esempio seguente, il valore dell'attributo span `url.path` viene abbinato e il nome span risultante viene impostato sul metodo di richiesta seguito dal pattern URL desiderato.

```
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]
```

**Opzione 2: impostazione del nome span nel codice dell'applicazione**

È possibile impostare manualmente lo span name per gli span del server nel codice dell'applicazione utilizzando l'API. OpenTelemetry Imposta il nome `{HTTP_METHOD} {route_template}` in cui il modello di percorso utilizza segnaposti parametrizzati. Tieni presente che questa è un'opzione di fallback codificata e devi aggiornare manualmente lo span name in ogni gestore di richieste HTTP per applicare questa modifica.

**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');
}
```