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

Observação: Evite usar tanto o SDK do OpenTelemetry quanto o Tracer do Instana Node.js na mesma aplicação Node.js. O uso dos dois pode resultar nos seguintes problemas:
  • 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:

Observação: É necessário enviar pelo menos uma métrica para resolver a correlação de infraestrutura entre hosts, processos e serviços.

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.

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.

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 `.

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

Observação: Um detector de recursos do tipo “ Instana ” OpenTelemetry sempre requer que um agente do tipo “ Instana ” esteja implantado e em execução no mesmo host.

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)