OpenTelemetry monitoramento de aplicativos Instana e Node.js
É possível monitorar aplicativos do Node.js com o OpenTelemetry e o Instana, utilizando rastreamento baseado em agente ou sem servidor.
Restrições
- Chamadas perdidas no Instana
- Dados de telemetria duplicados
- Falhas na instrumentação
Node.js opções de monitoramento com o SDK do OpenTelemetry
Ao usar o SDK do OpenTelemetry, você pode escolher entre as seguintes opções de rastreamento:
- Rastreamento baseado em agente : os rastreamentos e as métricas são enviados aos pontos de extremidade do agente do Instana por meio do SDK OpenTelemetry
- Rastreamento sem servidor:
- Rastreamento sem servidor com o SDK do OpenTelemetry no formato OTLP : os rastreamentos e as métricas são enviados aos endpoints Instana e OTLP por meio do SDK do OpenTelemetry ( preferencial )
- Rastreamento sem servidor com o SDK do OpenTelemetry no formato Instana : os rastreamentos e as métricas são enviados para Instana no formato Instana por meio do SDK do OpenTelemetry
Rastreamento baseado em agentes com o SDK do OpenTelemetry
É possível habilitar o rastreamento baseado em agente para aplicativos do tipo “ Node.js ” usando o SDK do OpenTelemetry.
Requisitos
Instalando os pacotes
Para instalar os pacotes, execute o seguinte comando:
npm i @opentelemetry/exporter-metrics-otlp-http @opentelemetry/exporter-trace-otlp-http @opentelemetry/propagator-instana @opentelemetry/resource-detector-instana @opentelemetry/resources @opentelemetry/sdk-metrics --save
Ativação dos pacotes
Para ver um exemplo completo em funcionamento, consulte o exemplo “ HTTP ” baseado em agentes.
...
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
const { instanaAgentDetector } = require('@opentelemetry/resource-detector-instana');
const { processDetector, envDetector } = require('@opentelemetry/resources');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const instanaAgentHost = 'http://127.0.0.1:4318';
const instanaReader = new PeriodicExportingMetricReader({
exportIntervalMillis: 1000 * 10,
exporter: new OTLPMetricExporter({
url: `${otlpEndpoint}/v1/metrics`
})
});
const sdk = new opentelemetry.NodeSDK({
resourceDetectors: [envDetector, processDetector, instanaAgentDetector],
traceExporter: new OTLPTraceExporter({
url: `${otlpEndpoint}/v1/traces`
}),
propagator: new InstanaPropagator(),
metricReader: instanaReader,
instrumentations: ...
});
Rastreamento sem servidor com o SDK do OpenTelemetry no formato OTLP
É possível configurar o rastreamento sem servidor para aplicativos do Node.js usando o SDK do OpenTelemetry no formato OTLP para enviar rastreamentos e métricas para Instana.
Requisitos
- Configure o OpenTelemetry SDK for Node.js
- Escolha um endpoint serverless que aceite OTLP e configure-o.
INSTANA_ENDPOINT_URLpara o URL do ponto final. - Obtenha a chave do agente e defina-a
INSTANA_AGENT_KEYcomo a chave do agente.
Instalando os pacotes
Para instalar os pacotes a seguir, execute este comando:
npm i @opentelemetry/exporter-metrics-otlp-grpc @opentelemetry/exporter-trace-otlp-grpc @opentelemetry/propagator-instana @opentelemetry/sdk-metrics --save
Ativação dos pacotes
Para ver um exemplo completo em funcionamento, consulte o exemplo de formato “ OpenTelemetry ” sem servidor em OTLP.
...
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const otlpEndpoint = process.env.INSTANA_ENDPOINT_URL;
const metadata = new grpc.Metadata();
metadata.set('x-instana-key', process.env.INSTANA_AGENT_KEY);
const instanaReader = new PeriodicExportingMetricReader({
exportIntervalMillis: 1000 * 10,
exporter: new OTLPMetricExporter({
url: otlpEndpoint,
metadata
})
});
const sdk = new opentelemetry.NodeSDK({
traceExporter: new OTLPTraceExporter({
url: otlpEndpoint,
metadata
}),
propagator: new InstanaPropagator(),
metricReader: instanaReader,
instrumentations: [...]
});
...
Rastreamento sem servidor com o SDK do OpenTelemetry no formato Instana
Quando o aplicativo monitorado pelo OpenTelemetry é executado, o exportador Instana converte os spans OpenTelemetry em spans Instana e os envia para o endpoint de back-end.
Os rastreamentos do ` OpenTelemetry ` aparecem na interface do usuário do ` Instana ` da mesma forma que os intervalos de rastreamento comuns do ` Instana `.
Requisitos
- Instale o OpenTelemetry SDK for Node.js
- Escolha um ponto final de aceitação OTLP e configure-o.
INSTANA_ENDPOINT_URLpara o URL do ponto final. - Obtenha a chave do agente e defina-a
INSTANA_AGENT_KEYcomo a chave do agente.
Instalação
Instale os seguintes pacotes executando este comando:
npm i @instana/opentelemetry-exporter@ @opentelemetry/propagator-instana --save
Ativando
Para ver um exemplo completo em funcionamento, consulte o exemplo de formato “ OpenTelemetry ” sem servidor em Instana.
...
const { InstanaExporter } = require('@instana/opentelemetry-exporter');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
/*
* 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 instanaTraceExporter = new InstanaExporter();
const sdk = new opentelemetry.NodeSDK({
...
traceExporter: instanaTraceExporter,
propagator: new InstanaPropagator(),
instrumentations: [...]
});
OpenTelemetry visão geral dos plugins
Utilize os plug-ins Instana e OpenTelemetry para o Node.js a fim de gerenciar a propagação de rastreamentos, a amostragem e a detecção de recursos, visando melhorar a correlação e o contexto em seus dados de telemetria.
OpenTelemetry propagador
O pacote de propagador de contexto @opentelemetry/propagator-instana do OpenTelemetry converte os cabeçalhos proprietários de correlação de rastreamento do Instana em um contexto de rastreamento do OpenTelemetry e vice-versa.
Consulte “ OpenTelemetry propagators” para obter informações gerais sobre os propagadores de contexto do “ OpenTelemetry ”.
Instalando o propagador “ OpenTelemetry ”
Para instalar o propagador do OpenTelemetry, execute o seguinte comando:
npm install --save @opentelemetry/propagator-instana@
Ativação do propagador “ OpenTelemetry ”
Para ativar o Propagador do OpenTelemetry, execute o seguinte comando:
...
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
// ...
new opentelemetry.NodeSDK({
...
propagator: new InstanaPropagator(),
...
});
Amostra do OpenTelemetry
O pacote de amostragem do OpenTelemetry @instana/opentelemetry-sampler substitui o comportamento padrão de amostragem do OpenTelemetry, de modo que qualquer solicitação seja amostrada, a menos que o valor do sampled sinalizador no contexto do rastreamento seja false.
Instalando o sampler “ OpenTelemetry ”
Para instalar o sampler do OpenTelemetry, execute o seguinte comando:
npm install --save @instana/opentelemetry-sampler@
Ativando o sampler “ OpenTelemetry ”
@opentelemetry/propagator-instanaO sampler deve ser usado em conjunto com o pacote.
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const { InstanaAlwaysOnSampler } = require('@instana/opentelemetry-sampler');
const sdk = new opentelemetry.NodeSDK({
...
propagator: new InstanaPropagator(),
sampler: new InstanaAlwaysOnSampler()
...
});
...
OpenTelemetry detector de recursos
O pacote de detector de recursos do OpenTelemetry, @opentelemetry/resource-detector-instana, enriquece as informações de rastreamento do OpenTelemetry com atributos adicionais de recursos.
Instalando o detector de recursos “ OpenTelemetry ”
Para instalar o detector de recursos “ OpenTelemetry ”, execute o seguinte comando:
npm install --save @opentelemetry/resource-detector-instana
Ativação do detector de recursos “ 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,
});
...
Além disso, você pode definir as seguintes variáveis de ambiente:
INSTANA_RETRY_TIMEOUT_MS: O detector de recursos realiza três tentativas para se conectar ao agente Instana. Esse valor corresponde ao tempo de espera entre as tentativas. (padrão:1000)INSTANA_AGENT_TIMEOUT_MS: O tempo limite do cliente ao se conectar ao agente Instana. (padrão:3000)