> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Instalação do OpenTelemetry no Node.js

Certifique-se de [instalar o AppSignal collector](/opentelemetry/installation) 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:

<CodeGroup>
  ```shell Shell theme={null}
  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
  ```
</CodeGroup>

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](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node). Você pode [encontrar instrumentações adicionais para bibliotecas e frameworks no Registro do OpenTelemetry](https://opentelemetry.io/ecosystem/registry/?s=\&component=instrumentation\&language=js\&flag=all).

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

<CodeGroup>
  ```javascript JavaScript theme={null}
  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();
  ```
</CodeGroup>

## 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:

<CodeGroup>
  ```bash Bash theme={null}
  node --require ./opentelemetry.cjs index.js
  ```
</CodeGroup>

Atualize seu arquivo `package.json` para adicionar `--require` ao comando que inicia seu app.

<CodeGroup>
  ```json JSON theme={null}
  {
    // outra configuração...
    "scripts": {
      "server": "node --require ./opentelemetry.cjs index.js"
    }
  }
  ```
</CodeGroup>

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:

<CodeGroup>
  ```sh Shell theme={null}
  NODE_OPTIONS='--require ./appsignal.cjs' nest start
  ```
</CodeGroup>

## 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"](https://appsignal.com/redirect-to/app?to=exceptions) e ["Performance > Traces"](https://appsignal.com/redirect-to/app?to=performance/traces).

Se, depois de seguir nossas instruções de instalação, você ainda não vir dados no AppSignal, [avise-nos](mailto:support@appsignal.com?subject=OpenTelemetry%20issue) e te ajudaremos a finalizar a instalação do OpenTelemetry!
