Pular para o conteúdo principal
Certifique-se de instalar o AppSignal collector antes de prosseguir com estas instruções.

Instale os pacotes do OpenTelemetry

Use o npm para adicionar o SDK do OpenTelemetry e o exporter OTLP às dependências da sua aplicação:
npm install @opentelemetry/sdk-node \
  @opentelemetry/api \
  @opentelemetry/sdk-trace-node \
  @opentelemetry/sdk-metrics \
  @opentelemetry/exporter-trace-otlp-proto \
  @opentelemetry/exporter-metrics-otlp-proto \
  @opentelemetry/auto-instrumentations-node \
  @opentelemetry/semantic-conventions \
  @opentelemetry/resources
O pacote @opentelemetry/auto-instrumentations-node instrumentará automaticamente a maioria das aplicações e bibliotecas. Confira o README do pacote para uma lista de bibliotecas e frameworks que ele instrumenta. Você pode encontrar instrumentações adicionais para bibliotecas e frameworks no Registro do OpenTelemetry.

Configure o OpenTelemetry na sua aplicação

Adicione este arquivo opentelemetry.cjs à sua aplicação com o exporter do OpenTelemetry e a configuração do AppSignal. Certifique-se de atualizar os valores abaixo com o nome da sua aplicação no AppSignal, ambiente e push API key, e de substituir o endpoint do exporter pelo endereço do seu AppSignal collector se necessário.
const os = require("os");
const { NodeSDK } = require("@opentelemetry/sdk-node");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const {
  PeriodicExportingMetricReader,
  AggregationTemporality,
} = require("@opentelemetry/sdk-metrics");
const { resourceFromAttributes } = require("@opentelemetry/resources");
const { ATTR_SERVICE_NAME } = require("@opentelemetry/semantic-conventions");
const {
  OTLPTraceExporter,
} = require("@opentelemetry/exporter-trace-otlp-proto");
const {
  OTLPMetricExporter,
} = require("@opentelemetry/exporter-metrics-otlp-proto");
const {
  getNodeAutoInstrumentations,
} = require("@opentelemetry/auto-instrumentations-node");

// Substitua estes valores pelo nome da sua aplicação no AppSignal, ambiente
// e push API key. Estes são usados pela configuração de atributos de recurso abaixo.
const name = "My app";
const pushApiKey = "0000-0000-0000-0000";

const environment = process.env.NODE_ENV || "production";

// Defina o nome do serviço que está sendo monitorado. Uma escolha comum é o
// nome do framework usado. Isso é usado para agrupar traces e métricas no AppSignal.
const serviceName = "My service name";

// Substitua `http://localhost:8099` pelo endereço do seu AppSignal collector
// caso ele esteja rodando em outro host.
const endpoint = "http://localhost:8099";

const revision = childProcess.execSync("git rev-parse --short HEAD").toString();

const resource = new resourceFromAttributes({
  "appsignal.config.name": name,
  "appsignal.config.environment": environment,
  "appsignal.config.push_api_key": "0000-0000-0000-0000",
  "appsignal.config.revision": revision,
  "appsignal.config.language_integration": "node.js",
  "appsignal.config.app_path": process.cwd(),
  "host.name": os.hostname(),
  [ATTR_SERVICE_NAME]: "My service name",
});

const sdk = new NodeSDK({
  resource,
  traceExporter: new OTLPTraceExporter({
    url: `${endpoint}/v1/traces`,
  }),
  metricReader: new PeriodicExportingMetricReader({
    exportIntervalMillis: 10000,
    exporter: new OTLPMetricExporter({
      url: `${endpoint}/v1/metrics`,
    }),
  }),
  instrumentations: [getNodeAutoInstrumentations()],
});

sdk.start();

Inicie sua aplicação com o OpenTelemetry

Para rodar sua aplicação com o OpenTelemetry, você precisa usar a flag --require para carregar o arquivo opentelemetry.cjs antes de iniciar sua aplicação:
node --require ./opentelemetry.cjs index.js
Atualize seu arquivo package.json para adicionar --require ao comando que inicia seu app.
{
  // outra configuração...
  "scripts": {
    "server": "node --require ./opentelemetry.cjs index.js"
  }
}
Você também pode usar a flag --require com ferramentas como ts-node e nodemon. Ao usar uma CLI wrapper, como nest start ou fastify start, para iniciar sua aplicação, use a variável de ambiente NODE_OPTIONS para passar a flag ao runtime do Node.js:
NODE_OPTIONS='--require ./appsignal.cjs' nest start

Teste o app!

Agora que todos os componentes estão conectados, inicie seu app com os argumentos de linha de comando necessários e teste se você vê os dados chegando no AppSignal. Verifique especificamente as páginas “Errors > Issue list” e “Performance > Traces”. Se, depois de seguir nossas instruções de instalação, você ainda não vir dados no AppSignal, avise-nos e te ajudaremos a finalizar a instalação do OpenTelemetry!