OpenTelemetry Integrazione per le applicazioni dell' Node.js
Il metodo principale per l'integrazione con OpenTelemetry consiste nel configurare l'esportatore predefinito OTLP di qualsiasi applicazione monitorata da OpenTelemetry in modo che invii i propri dati all'agente Instana. Questo è descritto nella pagina " OpenTelemetry ".
L'integrazione con l' OpenTelemetry e può essere ulteriormente personalizzata con componenti aggiuntivi. I componenti di " OpenTelemetry " disponibili per " Node.js " sono descritti come segue:
Esportatore serverless per OpenTelemetry
Il pacchetto @instana/opentelemetry-exporter offre un esportatore OpenTelemetry che converte e invia gli span di OpenTelemetry al backend Instana.
L'esportatore Instana Node.js OpenTelemetry è progettato principalmente per l'utilizzo in ambienti serverless, come AWS Lambda o AWS Fargate. Instana offre già il supporto per OpenTelemetry per SaaS e soluzioni self-hosted tramite l'agente host. Tuttavia, se le tue applicazioni Node.js vengono eseguite in un ambiente serverless, dove l'agente non è presente, l'esportatore serverless OpenTelemetry è la soluzione ideale.
Installazione di Exporter per l' OpenTelemetry
Per installare l'Exporter di OpenTelemetry, eseguire il seguente comando:
npm install --save @instana/opentelemetry-exporter@latest
Attivazione dell'esportatore di file di importazione ( OpenTelemetry )
L'esportatore richiede che all'applicazione vengano fornite due variabili d'ambiente di tipo " Instana " :
INSTANA_AGENT_KEYINSTANA_ENDPOINT_URL
In alternativa, è possibile fornire questi valori come argomenti al costruttore, ma questa alternativa non è consigliata, poiché si tratta di dati sensibili che si potrebbe voler evitare di esporre.
Ad esempio, è possibile configurare il programma di esportazione nel modulo di traccia come segue:
'use strict';
const process = require('process');
require('@opentelemetry/api');
const opentelemetry = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { Resource } = require('@opentelemetry/resources');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
// Require the Instana OpenTelemetry Exporter
const { InstanaExporter } = require('@instana/opentelemetry-exporter');
// Instantiate the Instana Exporter.
// Make sure to provide the agent key and the serverless endpoint URL via the following environment variables:
// * INSTANA_AGENT_KEY
// * INSTANA_ENDPOINT_URL
const instanaTraceExporter = new InstanaExporter();
/*
* If you have not provided the agent key and the serverless endpoint URL via environment variables:
* const instanaTraceExporter = new InstanaExporter({ agentKey: 'agent_key', endpointUrl: 'endpoint_url' });
*/
const nodeAutoInstrumentations = getNodeAutoInstrumentations();
const sdk = new opentelemetry.NodeSDK({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: 'my-service'
}),
// Configure OpenTelemetry to use the Instana Exporter
traceExporter: instanaTraceExporter,
instrumentations: [nodeAutoInstrumentations]
});
sdk.start()
...
Quando l'applicazione monitorata da OpenTelemetry viene eseguita, l'esportatore Instana converte gli span OpenTelemetry in span Instana e li invia all'endpoint di back-end.
La visualizzazione delle tracce dell' OpenTelemetry e sarà presente nell'interfaccia utente di Instana, proprio come i normali intervalli di tracciamento dell' Instana.
OpenTelemetry Propagatore
Il pacchetto di propagazione del contesto @opentelemetry/propagator-instana di OpenTelemetry converte le intestazioni proprietarie di correlazione delle tracce di Instana in un contesto di traccia di OpenTelemetry e viceversa.
Per informazioni generali sui propagatori di contesto dell' OpenTelemetry, consultare la pagina OpenTelemetry Propagators.
Installazione della serra " OpenTelemetry "
Per installare il propagatore « OpenTelemetry », eseguire il seguente comando:
npm install --save @instana/propagator-instana@latest
Attivazione del propagatore " OpenTelemetry "
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
// ...
const provider = new NodeTracerProvider();
provider.register({
propagator: new InstanaPropagator()
});
OpenTelemetry Campionario
Il pacchetto di campionamento di OpenTelemetry @instana/opentelemetry-sampler sovrascrive il comportamento di campionamento predefinito di OpenTelemetry in modo che venga campionata qualsiasi richiesta, a meno che il valore del sampled flag nel contesto della traccia non sia false.
Per informazioni generali sui campionatori " OpenTelemetry ", consultare la pagina " OpenTelemetry Samplers".
Installazione del Sampler di OpenTelemetry
Per installare il Sampler di OpenTelemetry, eseguire il seguente comando:
npm install --save @instana/opentelemetry-sampler@latest
Attivazione del campionatore " OpenTelemetry "
Il campionatore deve essere utilizzato insieme al package `@opentelemetry/propagator-instana.
const api = require('@opentelemetry/api');
const opentelemetry = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
const { Resource } = require('@opentelemetry/resources');
const { InstanaAlwaysOnSampler } = require('@instana/opentelemetry-sampler');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const nodeAutoInstrumentations = getNodeAutoInstrumentations();
api.propagation.setGlobalPropagator(new InstanaPropagator());
const traceOtlpExporter = new OTLPTraceExporter({
url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT
});
const sdk = new opentelemetry.NodeSDK({
traceExporter: traceOtlpExporter,
instrumentations: [nodeAutoInstrumentations],
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: 'my-service'
}),
sampler: new InstanaAlwaysOnSampler()
});
sdk
.start()
.then(() => console.log('Tracing initialized'))
.catch(err => console.log('Error initializing tracing', err));
OpenTelemetry Rilevatore di risorse
Il pacchetto di rilevamento delle risorse di OpenTelemetry, @opentelemetry/resource-detector-instana, arricchisce le informazioni di tracciamento di OpenTelemetry con ulteriori attributi relativi alle risorse.
Per informazioni generali sui rilev atori di risorse OpenTelemetry, consultare la pagina OpenTelemetry.
Installazione del rilevatore di risorse dell' OpenTelemetry
Per installare il rilevatore di risorse di OpenTelemetry, eseguire il seguente comando:
npm install --save @instana/resource-detector-instana
Attivazione del rilevatore di risorse dell' OpenTelemetry
import {
Resource,
processDetector,
envDetector,
} from "@opentelemetry/resources";
import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions";
import { NodeSDK } from "@opentelemetry/sdk-node";
import { instanaAgentDetector } from "@opentelemetry/resource-detector-instana";
const globalResource = new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: "TestService",
});
const sdk = new NodeSDK({
resourceDetectors: [envDetector, processDetector, instanaAgentDetector]
resource: globalResource,
});
sdk.start()
...
Inoltre, possono essere fornite le seguenti variabili di ambiente:
INSTANA_AGENT_HOST: Nome host dell'agente dell' Instana (impostazione predefinita:localhost)INSTANA_AGENT_PORT: Porta dell'agente dell' Instana (impostazione predefinita:42699)INSTANA_RETRY_TIMEOUT_MS: Il rilevatore di risorse effettua tre tentativi di riconnnessione all'agente Instana. Questo è il timeout tra i tentativi (valore predefinito:1000)INSTANA_AGENT_TIMEOUT_MS: Il timeout del client durante la connessione all'agente Instana (impostazione predefinita:3000)