View a markdown version of this page

Configura la visibilità degli endpoint HTTP - Amazon CloudWatch

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

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

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

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

Opzione 1 (consigliata): trasformazione Collector-side

Utilizzate il processore di trasformazione 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 spanname.

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