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à.
Migrare a Node.js OpenTelemetry
Questa sezione spiega come migrare le applicazioni Node.js da X-Ray SDK a. OpenTelemetry Descrive gli approcci di strumentazione sia automatici che manuali e fornisce esempi specifici per casi d'uso comuni.
L'SDK X-Ray Node.js consente di strumentare manualmente le applicazioni Node.js per il tracciamento. Questa sezione fornisce esempi di codice per la migrazione da OpenTelemetry X-Ray alla strumentazione.
Soluzioni di strumentazione automatica a codice zero
Per tracciare le richieste con X-Ray SDK per Node.js, è necessario modificare il codice dell'applicazione. Con OpenTelemetry, puoi utilizzare soluzioni di strumentazione automatica a codice zero per tracciare le richieste.
Strumentazione automatica a codice zero con strumentazione automatica basata. OpenTelemetry
Soluzioni di strumentazione manuale
- Tracing setup with X-Ray SDK
-
Quando si utilizzava X-Ray SDK per Node.js, era necessario configurare il aws-xray-sdk
pacchetto X-Ray SDK con plug-in di servizio o regole di campionamento locali prima di utilizzare l'SDK per strumentare il codice.
var AWSXRay = require('aws-xray-sdk');
AWSXRay.config([AWSXRay.plugins.EC2Plugin,AWSXRay.plugins.ElasticBeanstalkPlugin]);
AWSXRay.middleware.setSamplingRules(<path to file>);
- Tracing setup with OpenTelemetry SDK
AWS Il campionamento remoto a raggi X non è attualmente disponibile per la configurazione per JS. OpenTelemetry Tuttavia, il supporto per il campionamento remoto a raggi X è attualmente disponibile tramite ADOT Auto-Instrumentation for Node.js.
Per l'esempio di codice riportato di seguito, sono necessarie le seguenti dipendenze:
npm install --save \
@opentelemetry/api \
@opentelemetry/sdk-node \
@opentelemetry/exporter-trace-otlp-proto \
@opentelemetry/propagator-aws-xray \
@opentelemetry/resource-detector-aws
È necessario impostare e configurare l' OpenTelemetry SDK prima di eseguire il codice dell'applicazione. Questa operazione può essere eseguita utilizzando il flag —-require. Create un file chiamato instrumentation.js, che conterrà la configurazione e la configurazione della OpenTelemetry strumentazione.
Si consiglia di configurare i seguenti componenti:
-
OTLPTraceEsportatore: necessario per esportare le tracce nell'Agent/ Collector CloudWatch OpenTelemetry
-
AWSXRayPropagatore: necessario per propagare il Trace Context ai AWS servizi integrati con X-Ray
-
Rilevatori di risorse (ad esempio, Amazon EC2 Resource Detector): per rilevare i metadati dell'host che esegue l'applicazione
/*instrumentation.js*/
// Require dependencies
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto');
const { AWSXRayPropagator } = require("@opentelemetry/propagator-aws-xray");
const { detectResources } = require('@opentelemetry/resources');
const { awsEc2Detector } = require('@opentelemetry/resource-detector-aws');
const resource = detectResources({
detectors: [awsEc2Detector],
});
const _traceExporter = new OTLPTraceExporter({
url: 'http://localhost:4318/v1/traces'
});
const sdk = new NodeSDK({
resource: resource,
textMapPropagator: new AWSXRayPropagator(),
traceExporter: _traceExporter
});
sdk.start();
Quindi, puoi eseguire l'applicazione con la tua configurazione, ad esempio: OpenTelemetry
node --require ./instrumentation.js app.js
Puoi utilizzare la strumentazione della libreria OpenTelemetry SDK per creare automaticamente intervalli per librerie come l'SDK. AWS Abilitandoli si creeranno automaticamente degli intervalli per moduli come l'SDK per la v3. AWS JavaScript OpenTelemetry offre la possibilità di abilitare tutte le strumentazioni della libreria o specificare quali strumentazioni della libreria abilitare.
Per abilitare tutte le strumentazioni, installa il pacchetto: @opentelemetry/auto-instrumentations-node
npm install @opentelemetry/auto-instrumentations-node
Successivamente, aggiorna la configurazione per abilitare tutte le strumentazioni della libreria come mostrato di seguito.
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
...
const sdk = new NodeSDK({
resource: resource,
instrumentations: [getNodeAutoInstrumentations()],
textMapPropagator: new AWSXRayPropagator(),
traceExporter: _traceExporter
});
- Tracing setup with ADOT auto-instrumentation for Node.js
-
È possibile utilizzare la strumentazione automatica ADOT per Node.js OpenTelemetry per configurare automaticamente le applicazioni Node.js. Utilizzando ADOT Auto-Instrumentation, non è necessario apportare modifiche manuali al codice per tracciare le richieste in arrivo o tracciare librerie come i client SDK o HTTP. AWS Per ulteriori informazioni, consulta Tracciamento e metriche con la distribuzione per Auto-Instrumentation. AWS OpenTelemetry JavaScript
La strumentazione automatica ADOT per Node.js supporta:
-
Campionamento remoto a raggi X tramite variabile di ambiente — export OTEL_TRACES_SAMPLER=xray
-
Propagazione contestuale delle tracce X-Ray (abilitata per impostazione predefinita)
-
Rilevamento delle risorse (il rilevamento delle risorse per gli ambienti Amazon EC2, Amazon ECS e Amazon EKS è abilitato per impostazione predefinita)
-
Strumentazioni di libreria automatiche per tutte le OpenTelemetry strumentazioni supportate, che possono essere disabled/enabled utilizzate selettivamente tramite variabili di ambiente OTEL_NODE_ENABLED_INSTRUMENTATIONS
OTEL_NODE_DISABLED_INSTRUMENTATIONS
-
Creazione manuale di Spans
Tracciamento delle richieste in arrivo
- With X-Ray SDK
-
Express.js
Grazie all'SDK X-Ray per tracciare le richieste HTTP in entrata ricevute dalle applicazioni Express.js, i due middleware AWSXRay.express.openSegment(<name>)
e i due middleware AWSXRay.express.closeSegment()
dovevano avvolgere tutte le rotte definite per poterle tracciare.
app.use(xrayExpress.openSegment('defaultName'));
...
app.use(xrayExpress.closeSegment());
Restifica
Per tracciare le richieste HTTP in entrata ricevute dalle Restify
applicazioni, è stato utilizzato il middleware dell'X-Ray SDK eseguendo enable dal modulo sul aws-xray-sdk-restify
server Restify:
var AWSXRay = require('aws-xray-sdk');
var AWSXRayRestify = require('aws-xray-sdk-restify');
var restify = require('restify');
var server = restify.createServer();
AWSXRayRestify.enable(server, 'MyApp'));
- With OpenTelemetry SDK
-
Express.js
Il supporto di tracciamento per le richieste in entrata di Express.js
è fornito dalla strumentazione OpenTelemetry HTTP e dalla strumentazione express. OpenTelemetry Installa le seguenti dipendenze con: npm
npm install --save @opentelemetry/instrumentation-http @opentelemetry/instrumentation-express
Aggiorna la configurazione OpenTelemetry SDK per abilitare la strumentazione per il modulo express:
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
const { ExpressInstrumentation } = require('@opentelemetry/instrumentation-express');
...
const sdk = new NodeSDK({
...
instrumentations: [
...
// Express instrumentation requires HTTP instrumentation
new HttpInstrumentation(),
new ExpressInstrumentation(),
],
});
Restifica
Per le applicazioni Restify, avrai bisogno della strumentazione OpenTelemetry Restify. Installa la seguente dipendenza:
npm install --save @opentelemetry/instrumentation-restify
Aggiorna la configurazione OpenTelemetry SDK per abilitare la strumentazione per il modulo restify:
const { RestifyInstrumentation } = require('@opentelemetry/instrumentation-restify');
...
const sdk = new NodeSDK({
...
instrumentations: [
...
new RestifyInstrumentation(),
],
});
AWS Strumentazione SDK V3 JavaScript
- With X-Ray SDK
-
Per strumentare AWS le richieste in uscita dall' AWS SDK, avete utilizzato client strumentati come nell'esempio seguente:
import { S3, PutObjectCommand } from '@aws-sdk/client-s3';
const s3 = AWSXRay.captureAWSv3Client(new S3({}));
await s3.send(new PutObjectCommand({
Bucket: bucketName,
Key: keyName,
Body: 'Hello!',
}));
- With OpenTelemetry SDK
Il supporto di tracciamento per le chiamate AWS SDK downstream a DynamoDB, Amazon S3 e altri è fornito dalla strumentazione SDK. OpenTelemetry AWS npm
Installa la seguente dipendenza con:
npm install --save @opentelemetry/instrumentation-aws-sdk
Aggiorna la configurazione OpenTelemetry SDK con la strumentazione AWS SDK.
import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';
...
const sdk = new NodeSDK({
...
instrumentations: [
...
new AwsInstrumentation()
],
});
Analisi delle chiamate HTTP in uscita
- With X-Ray SDK
-
Per strumentare le richieste HTTP in uscita con X-Ray, era necessario strumentare i client. Ad esempio, vedi sotto.
Client HTTP individuali
var AWSXRay = require('aws-xray-sdk');
var http = AWSXRay.captureHTTPs(require('http'));
Tutti i client HTTP (globali)
var AWSXRay = require('aws-xray-sdk');
AWSXRay.captureHTTPsGlobal(require('http'));
var http = require('http');
- With OpenTelemetry SDK
-
Il supporto di tracciamento per i client HTTP Node.js è fornito da OpenTelemetry HTTP Instrumentation. Installa la seguente dipendenza con: npm
npm install --save @opentelemetry/instrumentation-http
Aggiorna la configurazione OpenTelemetry SDK come segue:
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
...
const sdk = new NodeSDK({
...
instrumentations: [
...
new HttpInstrumentation(),
],
});
Supporto strumentale per altre librerie
Puoi trovare l'elenco completo delle strumentazioni di libreria supportate nella sezione Strumentazioni supportate OpenTelemetry JavaScript .
In alternativa, puoi cercare OpenTelemetry nel registro per scoprire se OpenTelemetry supporta la strumentazione per la tua libreria alla voce Registry.
Creazione manuale di dati di traccia
- With X-Ray SDK
-
Utilizzando X-Ray, il codice del aws-xray-sdk
pacchetto era necessario per creare manualmente i segmenti e i relativi sottosegmenti secondari per tracciare l'applicazione.
var AWSXRay = require('aws-xray-sdk');
AWSXRay.enableManualMode();
var segment = new AWSXRay.Segment('myApplication');
captureFunc('1', function(subsegment1) {
captureFunc('2', function(subsegment2) {
}, subsegment1);
}, segment);
segment.close();
segment.flush();
- With OpenTelemetry SDK
-
È possibile creare e utilizzare intervalli personalizzati per monitorare le prestazioni delle attività interne che non vengono acquisite dalle librerie di strumentazione. Nota che solo gli intervalli di tipo Server vengono convertiti in segmenti X-Ray, tutti gli altri intervalli vengono convertiti in sottosegmenti X-Ray. Per ulteriori informazioni, consulta Segmenti.
Avrai bisogno di un'istanza Tracer dopo aver configurato l'SDK in Tracing Setup per creare Spans OpenTelemetry . È possibile creare tutte le istanze Tracer necessarie, ma è normale avere una sola istanza Tracer per un'intera applicazione.
const { trace, SpanKind } = require('@opentelemetry/api');
// Get a tracer instance
const tracer = trace.getTracer('your-tracer-name');
...
// This span will appear as a segment in X-Ray
tracer.startActiveSpan('server', { kind: SpanKind.SERVER }, span => {
// Do work here
// This span will appear as a subsegment in X-Ray
tracer.startActiveSpan('operation2', { kind: SpanKind.INTERNAL }, innerSpan => {
// Do more work here
innerSpan.end();
});
span.end();
});
Aggiungere annotazioni e metadati alle tracce con SDK OpenTelemetry
Puoi anche aggiungere coppie chiave-valore personalizzate come attributi nei tuoi span. Nota che per impostazione predefinita, tutti questi attributi span verranno convertiti in metadati nei dati grezzi di X-Ray. Per garantire che un attributo venga convertito in un'annotazione e non in metadati, aggiungete la chiave dell'attributo all'elenco dell'attributo. aws.xray.annotations
Per ulteriori informazioni, vedere Abilitare le annotazioni X-Ray personalizzate.
tracer.startActiveSpan('server', { kind: SpanKind.SERVER }, span => {
span.setAttribute('metadataKey', 'metadataValue');
span.setAttribute('annotationKey', 'annotationValue');
// The following ensures that "annotationKey: annotationValue" is an annotation in X-Ray raw data.
span.setAttribute('aws.xray.annotations', ['annotationKey']);
// Do work here
span.end();
});
Strumentazione Lambda
- With X-Ray SDK
-
Dopo aver abilitato Active Tracing per la funzione Lambda, era necessario l'SDK X-Ray senza alcuna configurazione aggiuntiva. Lambda crea un segmento che rappresenta l'invocazione del gestore Lambda e hai creato sottosegmenti o librerie di strumenti utilizzando X-Ray SDK senza alcuna configurazione aggiuntiva.
- With OpenTelemetry SDK
-
Puoi strumentare automaticamente la tua Lambda con livelli Lambda AWS venduti. Esistono due soluzioni:
-
(Consigliato) Strato lambda di CloudWatch Application Signals
Questo livello Lambda dispone di CloudWatch Application Signals abilitati per impostazione predefinita, il che consente il monitoraggio delle prestazioni e dello stato dell'applicazione Lambda raccogliendo sia metriche che tracce. Se vuoi solo tracciare, devi impostare la variabile di ambiente Lambda. OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
Per ulteriori informazioni, consulta Abilita le tue applicazioni su Lambda.
-
AWS layer Lambda gestito per ADOT JS. Per ulteriori informazioni, consulta AWS Distro for OpenTelemetry Lambda Support JavaScript For.
Creazione manuale di Span con strumentazione Lambda
Sebbene ADOT JavaScript Lambda Layer fornisca la strumentazione automatica per la funzione Lambda, potresti riscontrare la necessità di eseguire la strumentazione manuale nella tua Lambda, ad esempio, per fornire dati personalizzati o per il codice dello strumento all'interno della funzione Lambda stessa che non è coperto dalla strumentazione della libreria.
Per eseguire la strumentazione manuale insieme alla strumentazione automatica, è necessario aggiungerla come dipendenza. @opentelemetry/api
Si consiglia che la versione di questa dipendenza sia la stessa della stessa dipendenza utilizzata da ADOT SDK. JavaScript Puoi utilizzare l' OpenTelemetry API per creare manualmente intervalli nella tua funzione Lambda.
Per aggiungere la @opentelemetry/api
dipendenza usando NPM:
npm install @opentelemetry/api