Todos os produtos
Search
Central de documentação

Managed Service for OpenTelemetry:Envie dados de rastreamento de uma aplicação Node.js com OpenTelemetry

Última atualização: Jul 05, 2026

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

Importante

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.

Para obter o endpoint do Managed Service for OpenTelemetry, execute as etapas a seguir:

  1. Faça login no console do Managed Service for OpenTelemetry.

  2. No painel de navegação à esquerda, clique em Cluster Configurations. Na página exibida, clique em aba Access point information.

  3. Na barra de navegação superior, selecione uma região. Na seção Cluster Information, ative a opção Show Token.

  4. Defina o parâmetro Client como OpenTelemetry.

    Obtenha o endpoint do Managed Service for OpenTelemetry na coluna Related Information da tabela na parte inferior.OT接入点信息

    Nota

    Se sua aplicação estiver implantada em um ambiente de produção da Alibaba Cloud, use o endpoint da Virtual Private Cloud (VPC). Caso contrário, use o endpoint público.

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.

Visualizar frameworks Node.js compatíveis

Framework

Referências

amqplib

@opentelemetry/instrumentation-amqplib

aws-lambda

@opentelemetry/instrumentation-aws-lambda

aws-sdk

@opentelemetry/instrumentation-aws-sdk

bunyan

@opentelemetry/instrumentation-bunyan

cassandra-driver

@opentelemetry/instrumentation-cassandra-driver

connect

@opentelemetry/instrumentation-connect

cucumber

@opentelemetry/instrumentation-cucumber

dataloader

@opentelemetry/instrumentation-dataloader

dns

@opentelemetry/instrumentation-dns

express

@opentelemetry/instrumentation-express

fastify

@opentelemetry/instrumentation-fastify

generic-pool

@opentelemetry/instrumentation-generic-pool

graphql

@opentelemetry/instrumentation-graphql

grpc

@opentelemetry/instrumentation-grpc

hapi

@opentelemetry/instrumentation-hapi

http

@opentelemetry/instrumentation-http

ioredis

@opentelemetry/instrumentation-ioredis

knex

@opentelemetry/instrumentation-knex

koa

@opentelemetry/instrumentation-koa

lru-memoizer

@opentelemetry/instrumentation-lru-memoizer

memcached

@opentelemetry/instrumentation-memcached

mongodb

@opentelemetry/instrumentation-mongodb

mongoose

@opentelemetry/instrumentation-mongoose

mysql

@opentelemetry/instrumentation-mysql

mysql2

@opentelemetry/instrumentation-mysql2

nestjs-core

@opentelemetry/instrumentation-nestjs-core

net

@opentelemetry/instrumentation-net

pg

@opentelemetry/instrumentation-pg

pino

@opentelemetry/instrumentation-pino

redis

@opentelemetry/instrumentation-redis

restify

@opentelemetry/instrumentation-restify

socket.io

@opentelemetry/instrumentation-socket.io

winston

@opentelemetry/instrumentation-winston

Código de exemplo

Baixe o código de exemplo em opentelemetry-nodejs-demo.

Método 1: Instrumentação automática (recomendado)

  1. Baixe as dependências necessárias para executar o projeto.

    cd auto-instrumentation
    
    npm init -y
    npm install express
    npm install axios
  2. 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
  3. 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");
    });
  4. 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.js
    Nota

    Para obter informações sobre as variáveis de ambiente do OpenTelemetry, consulte Configuração de instrumentação automática.

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

  1. 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"
      }
  2. 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. 
      }),
    });
  3. Registre os frameworks HTTP e Express usando o provider. Aplicações nesses frameworks são monitoradas e interceptadas automaticamente.

    Nota

    Para 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],
    });
  4. 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();
  5. Opcional. Adicione um evento e atributos personalizados.

    Nota

    Para 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 Application Monitoring > Applications. Na página Applications, clique em nome da aplicação. Na página exibida, visualize os dados de rastreamento.

Nota

Se o ícone image 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.

Código de exemplo completo de uma aplicação Node.js baseada em Express

"use strict";

const { Resource } = require("@opentelemetry/resources");
const {
  OTLPTraceExporter,
} = require("@opentelemetry/exporter-trace-otlp-grpc");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { SimpleSpanProcessor } = require("@opentelemetry/sdk-trace-base");
const {
  ExpressInstrumentation,
} = require("@opentelemetry/instrumentation-express");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const {
  SemanticResourceAttributes,
} = require("@opentelemetry/semantic-conventions");
const grpc = require("@grpc/grpc-js");

const provider = new NodeTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(),
    [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express",
  }),
});

registerInstrumentations({
  tracerProvider: provider,
  instrumentations: [new HttpInstrumentation(), ExpressInstrumentation],
});

const metadata = new grpc.Metadata();
metadata.set("Authentication", "<AUTHENTICATION>");

const exporter = new OTLPTraceExporter({ url: "<ENDPOINT>", metadata });
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();

// Application code
const api = require("@opentelemetry/api");
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/api");
  return res.status(201).send(result.data);
});

app.get("/api", async (req, res) => {
  const currentSpan = api.trace.getSpan(api.context.active());
  currentSpan.addEvent("timestamp", { value: Date.now() });
  currentSpan.setAttribute("tagKey-01", "tagValue-01");
  res.json({ code: 200, msg: "success" });
});

app.use(express.json());

app.listen(7001, () => {
  console.log("Listening on http://localhost:7001");
});