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 che invece vedano più endpoint raggruppati nella stessa metrica. Per impostazione predefinita, Application Signals tronca la dimensione della Operation metrica al primo segmento del 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 delle 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 dello span del server HTTP per determinare il nome dell'operazione. url.path I pattern con caratteri jolly corrispondono a qualsiasi segmento 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 e .NET. Node.js

Esempio

Considerate 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 tutte queste metriche in GET /api o 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:

Richiesta in entrata Operazione predefinita Con config
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 utilizzate l' OpenTelemetry SDK nativo (senza ADOT), potete sovrascrivere il nome dello span utilizzando il processore di trasformazione nel vostro OpenTelemetry Collector o direttamente nel codice dell'applicazione.

Nota

È necessario configurare il raccoglitore con un esportatore OTLP per conservare il nome OpenTelemetry dello span in modo da analizzarlo per il nome dell'operazione Application CloudWatch Signals. Per ulteriori informazioni, consulta Invio di dati OTLP a. CloudWatch

Opzione 1 (consigliata): trasformazione Collector-side

Usa il processore di trasformazione per impostare i nomi degli span in base ai pattern 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 sovrascrivono quelle generali impostate in precedenza. Nell'esempio seguente, il valore dell'attributo span url.path viene abbinato e il nome dello 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 dello span nel codice dell'applicazione

È possibile impostare manualmente il nome dello span per gli intervalli del server nel codice dell'applicazione utilizzando l'API. OpenTelemetry Imposta il nome {HTTP_METHOD} {route_template} in cui il modello di percorso utilizza segnaposto parametrizzati. Nota che questa è un'opzione di fallback codificata e devi aggiornare manualmente il nome dello span 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'); }