Notas para desenvolvedores do OpenTelemetry Node.js
Instana suporta a instrumentação padrão OpenTelemetry JavaScript, tanto automática quanto manual, para Node.js. Para mais informações, consulte os documentos oficiais em OpenTelemetry.
Pré-requisitos
Certifique-se de que os seguintes pré-requisitos sejam atendidos:
O recurso " OpenTelemetry " está ativado no site Instana.
O agente host do Instana está conectado ao backend do Instana.
Os seguintes aplicativos são instalados localmente:
- Node.js
- TypeScript, se você estiver usando TypeScript
Instrumentação
OpenTelemetry é um projeto de código aberto amplamente usado para coletar e gerenciar dados de telemetria de aplicativos. Um dos principais aspectos do OpenTelemetry é a instrumentação, que envolve a adição de código ao seu aplicativo para coletar métricas, registros e rastreamentos.
Para ativar a instrumentação, você pode usar um dos seguintes métodos.
Instrumentação automática
A instrumentação automática é um mecanismo para coletar dados de telemetria sem modificar o código-fonte do aplicativo. A instrumentação automática é um recurso fornecido pelo OpenTelemetry que permite instrumentar automaticamente seu aplicativo sem escrever código personalizado.
Utilize "detectores de recursos" adequados para melhorar a correlação entre entidades de infraestrutura utilizada no Instana. A autoinstrumentação do OpenTelemetry JavaScript deve declarar detectores de recursos para dispor de atributos de recursos suficientes. É necessário que você tenha um ` Instrumentation.js ` externo que possua detectores de recursos capazes de suportar um número suficiente de atributos de recursos. Por exemplo, é @opentelemetry/resource-detector-container necessária a versão 0.3.4 ou posterior para a ligação em um ambiente de contêiner, como um cluster do Kubernetes ou do Red Hat OpenShift. O exemplo a seguir é um Instrumentation.js utilizado na demonstração oficial do OpenTelemetry :
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
const opentelemetry = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
const { alibabaCloudEcsDetector } = require('@opentelemetry/resource-detector-alibaba-cloud');
const { awsEc2Detector, awsEksDetector } = require('@opentelemetry/resource-detector-aws');
const { containerDetector } = require('@opentelemetry/resource-detector-container');
const { gcpDetector } = require('@opentelemetry/resource-detector-gcp');
const { envDetector, hostDetector, osDetector, processDetector } = require('@opentelemetry/resources');
const sdk = new opentelemetry.NodeSDK({
traceExporter: new OTLPTraceExporter(),
instrumentations: [getNodeAutoInstrumentations()],
metricReader: new PeriodicExportingMetricReader({
exporter: new OTLPMetricExporter(),
}),
resourceDetectors: [
containerDetector,
envDetector,
hostDetector,
osDetector,
processDetector,
alibabaCloudEcsDetector,
awsEksDetector,
awsEc2Detector,
gcpDetector,
],
});
sdk.start();
Instrumentação manual
A instrumentação manual envolve a criação de código personalizado para instrumentar partes específicas do seu aplicativo. Isso requer a configuração manual do código-fonte do aplicativo para configurar o OpenTelemetry SDK para receber, processar e exportar os dados de telemetria. Para obter instruções mais detalhadas, consulte o Manual de Instrumentação.
Envie dados de telemetria para Instana
Instana recebe dados do OpenTelemetry por meio de vários métodos que seguem padrões abertos, garantindo uma integração perfeita com a comunidade OpenTelemetry e o produto Instana. A implementação é mantida ativamente por ambas as partes, garantindo compatibilidade e confiabilidade.
Envio de dados de telemetria para um agente d Instana
O agente do Instana pode receber diretamente traços, métricas e logs do OpenTelemetry no formato OTLP. Em seguida, o agente Instana encaminha os dados para o backend Instana. Para obter mais detalhes, consulte Enviar dados para o Agente d Instana.
É necessário especificar o endpoint do agente Instana na configuração de OTLPMetricExporter. Defina o endpoint junto com a chave ` Instana ` no formato ` JSON ` e passe-o como argumento para ` OTLPMetricExporter `, conforme mostrado no exemplo a seguir. Para mais detalhes, consulte Uso com o Node.js.
metricReader: new PeriodicExportingMetricReader({
exporter: new OTLPMetricExporter({
url: '<agent-otlp-endpoint>/v1/metrics', // url is optional and can be omitted - default is https://otlp-orange-saas.instana.io:4318/v1/metrics
headers: { // an optional object containing custom headers to be sent with each request
'x-instana-key': '<Instana key>'
}
}),
}),
Envio de dados de telemetria para o backend d Instana
Os dados de telemetria podem ser enviados no formato OTLP diretamente de aplicativos ou sistemas para o backend do Instana, o que também é conhecido como comunicação sem agente. Para mais detalhes, consulte “Enviar dados para o backend do Instana ”
É necessário especificar o endpoint do backend Instana na configuração de OTLPMetricExporter. Defina o endpoint juntamente com a chave Instana e os detalhes do host Instana no formato JSON e passe-os como argumento para OTLPMetricExporter, conforme mostrado no exemplo a seguir. Para mais detalhes, consulte Uso com o Node.js.
metricReader: new PeriodicExportingMetricReader({
exporter: new OTLPMetricExporter({
url: '<backend-otlp-endpoint>/v1/metrics', // url is optional and can be omitted - default is https://otlp-orange-saas.instana.io:4318/v1/metrics
headers: { // an optional object containing custom headers to be sent with each request
'x-instana-key': '<Instana key>',
'x-instana-host': '<hostname>'
}
}),
}),
Para ativar a instrumentação automática, execute o seguinte comando para apontar para o arquivo instrumentation.js ao executar o aplicativo:
node --require ./instrumentation.js app.js
Para obter mais informações sobre o detector de recursos do Node.JS, consulte o opentelemetry-js-contrib.
Resolução de problemas
NodeJS A instância não consta na lista de aplicativos do OpenTelemetry
- Verifique os registros do agente de host em Instana para verificar se há alguma mensagem relacionada a este processo OpenTelemetry.
- Verifique se o NodeJS foi instrumentado corretamente de forma automática ou manual.
- Verifique se as configurações, como o endpoint e a chave ` Instana `, estão definidas corretamente no código instrumentado.