Após instrumentar uma aplicação com o OpenTelemetry e enviar os dados de rastreamento para o Managed Service for OpenTelemetry, o serviço inicia o monitoramento da aplicação. Você pode visualizar dados de monitoramento, como topologias da aplicação, traces, transações anômalas, transações lentas e análises de SQL. Este tópico descreve como usar o OpenTelemetry para instrumentar automática ou manualmente uma aplicação Node.js baseada em Express e relatar dados.
Pré-requisitos
A versão do Node.js deve ser 14 ou superior. Caso contrário, recomendamos usar o Jaeger para enviar os dados de rastreamento da aplicação Node.js. Para mais informações, consulte Relatar dados de aplicação Node.js.
Contexto
O OpenTelemetry oferece diversos plug-ins de instrumentação automática que criam spans automaticamente para frameworks comuns. A tabela a seguir lista os frameworks compatíveis. Para mais detalhes, consulte a documentação do OpenTelemetry.
Código de exemplo
Baixe o código de exemplo em opentelemetry-nodejs-demo.
Método 1: Instrumentação automática (recomendado)
-
Baixe as dependências necessárias para executar o projeto.
cd auto-instrumentation npm init -y npm install express npm install axios -
Instale as dependências necessárias para a instrumentação automática do OpenTelemetry.
npm install --save @opentelemetry/api npm install --save @opentelemetry/auto-instrumentations-node -
Escreva o código da aplicação.
O código abaixo apresenta um exemplo simples implementado com Express:
"use strict"; const axios = require("axios").default; const express = require("express"); const app = express(); app.get("/", async (req, res) => { const result = await axios.get("http://localhost:7001/hello"); return res.status(201).send(result.data); }); app.get("/hello", async (req, res) => { console.log("hello world!") res.json({ code: 200, msg: "success" }); }); app.use(express.json()); app.listen(7001, () => { console.log("Listening on http://localhost:7001"); }); -
Use variáveis de ambiente para definir os parâmetros do OpenTelemetry e execute a aplicação.
Substitua
${httpEndpoint}pelo endpoint HTTP obtido nos Pré-requisitos. Substitua${serviceName}pelo nome da aplicação.export OTEL_TRACES_EXPORTER="otlp" export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${httpEndpoint}" export OTEL_NODE_RESOURCE_DETECTORS="env,host,os" export OTEL_SERVICE_NAME="${serviceName}" export NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register" node main.jsNotaPara obter informações sobre as variáveis de ambiente do OpenTelemetry, consulte Configuração de instrumentação automática.
-
Acesse a aplicação.
Acesse a aplicação executando o comando a seguir ou usando um navegador. Isso gera traces e envia os dados de rastreamento para o Managed Service for OpenTelemetry.
curl localhost:7001/hello
Método 2: Instrumentação manual
-
Adicione as seguintes dependências do OpenTelemetry ao arquivo package.json.
"dependencies": { "@opentelemetry/api": "^1.0.4", "@opentelemetry/exporter-trace-otlp-grpc": "^0.27.0", "@opentelemetry/instrumentation": "^0.27.0", "@opentelemetry/instrumentation-express": "^0.27.0", "@opentelemetry/instrumentation-http": "^0.27.0", "@opentelemetry/resources": "^1.0.1", "@opentelemetry/sdk-trace-base": "^1.0.1", "@opentelemetry/sdk-trace-node": "^1.0.1" } -
Crie um provider.
const { Resource } = require("@opentelemetry/resources"); const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node"); const { SemanticResourceAttributes, } = require("@opentelemetry/semantic-conventions"); const provider = new NodeTracerProvider({ resource: new Resource({ [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(), [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express", // You can replace opentelemetry-express with the actual service name. }), }); -
Registre os frameworks HTTP e Express usando o provider. Aplicações nesses frameworks são monitoradas e interceptadas automaticamente.
NotaPara saber como monitorar aplicações Node.js em outros frameworks, consulte a documentação do OpenTelemetry.
const { registerInstrumentations } = require("@opentelemetry/instrumentation"); const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http"); const { ExpressInstrumentation, } = require("@opentelemetry/instrumentation-express"); registerInstrumentations({ tracerProvider: provider, instrumentations: [new HttpInstrumentation(), ExpressInstrumentation], }); -
Configure um exporter para exportar dados para o Managed Service for OpenTelemetry.
Substitua
<ENDPOINT>e<AUTHENTICATION>no código a seguir pelo endpoint e token obtidos nos Pré-requisitos.const metadata = new grpc.Metadata(); metadata.set("Authentication", "<AUTHENTICATION>"); const exporter = new OTLPTraceExporter({ url: "<ENDPOINT>", metadata }); provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); provider.register(); -
Opcional. Adicione um evento e atributos personalizados.
NotaPara obter informações sobre como usar a API do OpenTelemetry, consulte a documentação do OpenTelemetry.
const api = require("@opentelemetry/api"); const currentSpan = api.trace.getSpan(api.context.active()); currentSpan.addEvent("timestamp", { value: Date.now() }); currentSpan.setAttribute("tagKey-01", "tagValue-01");
Visualize dados de rastreamento no console do ARMS
Faça login no console do ARMS. No painel de navegação à esquerda, escolha . Na página Applications, clique em nome da aplicação. Na página exibida, visualize os dados de rastreamento.
Se o ícone
aparecer na coluna Language, a aplicação está conectada ao Application Monitoring. Se um hífen (-) for exibido, a aplicação está conectada ao Managed Service for OpenTelemetry.
Na página Applications do console do Managed Service for OpenTelemetry, clique em nome da aplicação. Na página exibida, visualize os dados de rastreamento.
