Analisi di traccia per Amazon OpenSearch Service - Amazon OpenSearch Service

Analisi di traccia per Amazon OpenSearch Service

È possibile utilizzare Trace Analytics, che fa parte del plug-in OpenSearch Observability, per analizzare i dati di traccia provenienti da applicazioni distribuite. Trace Analytics richiede OpenSearch o Elasticsearch 7.9 o versioni successive.

In un'applicazione distribuita, una singola operazione, ad esempio un utente che fa clic su un pulsante, può attivare una serie estesa di eventi. Ad esempio, il front-end dell'applicazione potrebbe chiamare un servizio di back-end, che a sua volta chiama un altro servizio, che esegue una query su un database, che elabora la query e restituisce un risultato. Quindi il primo servizio di back-end invia una conferma al front-end, che aggiorna l'interfaccia utente.

È possibile utilizzare Analisi di traccia per visualizzare questo flusso di eventi e identificare i problemi legati alle prestazioni.

Prerequisiti

Analisi di traccia richiede l'aggiunta di una strumentazione all'applicazione e la generazione dei dati di traccia tramite una libreria supportata da OpenTelemetry come Jaeger o Zipkin. Questo passaggio si verifica interamente all'esterno di OpenSearch Service. La Documentazione di AWS Distro for OpenTelemetry contiene applicazioni di esempio per numerosi linguaggi di programmazione che consentono di iniziare a lavorare, tra cui Java, Python, Go e JavaScript.

Dopo aver aggiunto la strumentazione all'applicazione, OpenTelemetry Collector riceve i dati dall'applicazione e li formatta in dati OpenTelemetry. Visualizzare l'elenco dei ricevitori su GitHub. AWS Distro for OpenTelemetry include un ricevitore per AWS X-Ray.

Infine, Data Prepper, un componente OpenSearch indipendente, formatta quei dati di OpenTelemetry per l'utilizzo con OpenSearch. Data Prepper viene eseguito su un computer esterno al cluster del servizio OpenSearch, come Logstash.

Per un file di Docker Compose che illustra il flusso di dati end-to-end, consultare la documentazione di OpenSearch.

Configurazione di esempio di OpenTelemetry Collector

Per utilizzare OpenTelemetry Collector con Data Prepper, provare la seguente configurazione di esempio:

receivers: jaeger: protocols: grpc: otlp: protocols: grpc: zipkin: exporters: otlp/data-prepper: endpoint: data-prepper-host:21890 insecure: true service: pipelines: traces: receivers: [jaeger, otlp, zipkin] exporters: [otlp/data-prepper]

Configurazione di esempio di Data Prepper

Per inviare i dati di traccia a un dominio OpenSearch Service, provare i seguenti file di configurazione di esempio.

data-prepper-config.yaml

ssl: true keyStoreFilePath: "/usr/share/data-prepper/keystore.jks" # required if ssl is true keyStorePassword: "password" # optional, defaults to empty string privateKeyPassword: "other_password" # optional, defaults to empty string serverPort: 4900 # port for administrative endpoints, default is 4900

pipelines.yaml

entry-pipeline: # Workers is the number of application threads. # Try setting this value to the number of CPU cores on the machine. # We recommend the same number of workers for all pipelines. workers: 4 delay: "100" # milliseconds source: otel_trace_source: ssl: true sslKeyCertChainFile: "config/demo-data-prepper.crt" sslKeyFile: "config/demo-data-prepper.key" buffer: bounded_blocking: # Buffer size is the number of export requests to hold in memory. # We recommend the same value for all pipelines. # Batch size is the maximum number of requests each worker thread processes within the delay. # Keep buffer size >= number of workers * batch size. buffer_size: 1024 batch_size: 256 sink: - pipeline: name: "raw-pipeline" - pipeline: name: "service-map-pipeline" raw-pipeline: workers: 4 # We recommend the default delay for the raw pipeline. delay: "3000" source: pipeline: name: "entry-pipeline" prepper: - otel_trace_raw_prepper: buffer: bounded_blocking: buffer_size: 1024 batch_size: 256 sink: - opensearch: hosts: ["https://domain-endpoint"] # # Basic authentication # username: "ta-user" # password: "ta-password" # IAM signing aws_sigv4: true aws_region: "us-east-1" trace_analytics_raw: true service-map-pipeline: workers: 4 delay: "100" source: pipeline: name: "entry-pipeline" prepper: - service_map_stateful: buffer: bounded_blocking: buffer_size: 1024 batch_size: 256 sink: - opensearch: hosts: ["https://domain-endpoint"] # # Basic authentication # username: "ta-user" # password: "ta-password" # IAM signing aws_sigv4: true aws_region: "us-east-1" trace_analytics_service_map: true
  • Per la firma IAM, eseguire aws configure utilizzando la AWS CLI per impostare le credenziali.

  • Se si utilizza il controllo granulare degli accessicon il database utente interno, utilizzare invece le linee di autenticazione di base.

Se il dominio utilizza il controllo granulare degli accessi, è necessario mappare l'utente o il ruolo Data Prepper al ruolo all_access.

Se il dominio non utilizza il controllo granulare degli accessi, l'utente o il ruolo Data Prepper deve disporre delle autorizzazioni di scrittura per diversi indici e modelli, nonché delle autorizzazioni per accedere a una policy Index State Management (ISM) e recuperare le impostazioni del cluster. La policy seguente mostra le autorizzazioni richieste:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/data-prepper-sink-user" }, "Action": "es:ESHttp*", "Resource": [ "arn:aws:es:us-east-1:123456789012:domain/domain-name/otel-v1*", "arn:aws:es:us-east-1:123456789012:domain/domain-name/_template/otel-v1*", "arn:aws:es:us-east-1:123456789012:domain/domain-name/_plugins/_ism/policies/raw-span-policy", "arn:aws:es:us-east-1:123456789012:domain/domain-name/_alias/otel-v1*" ] }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/data-prepper-sink-user" }, "Action": "es:ESHttpGet", "Resource": "arn:aws:us-east-1:123456789012:domain/domain-name/_cluster/settings" } ] }

Data Prepper utilizza la porta 21890 per ricevere i dati e deve essere in grado di connettersi sia a OpenTelemetry Collector che al cluster OpenSearch. Per ottimizzare le prestazioni, regolare il conteggio dei worker e le impostazioni del buffer nel file di configurazione, insieme alla dimensione dell'heap Java Virtual Machine (JVM) per la macchina.

La documentazione completa per Data Prepper è disponibile nella documentazione di OpenSearch. Per comodità, forniamo anche un modello AWS CloudFormation che installa Data Prepper su un'istanza Amazon EC2.

Esplorazione dei dati di traccia

La vista Pannello di controllo raggruppa le tracce in base al metodo HTTP e al percorso in modo da poter visualizzare la latenza media, il tasso di errore e le tendenze associati a una particolare operazione. Per una vista più mirata, provare a filtrare in base al nome del gruppo di traccia.

Per eseguire il drill-down delle tracce che costituiscono un gruppo di traccia, scegliere il numero di tracce nella colonna di destra. Quindi scegliere una singola traccia per un riepilogo dettagliato.

La vista Servizi riporta tutti i servizi dell'applicazione, oltre a una mappa interattiva che mostra come i vari servizi si connettono tra loro. A differenza del pannello di controllo (che consente di identificare i problemi in base all'operazione), la mappa del servizio consente di identificare i problemi in base al servizio. Provare a ordinare in base al tasso di errore o alla latenza per avere un'idea delle potenziali aree problematiche dell'applicazione.