# Usando bibliotecas de instrumentação

> Como instrumentar bibliotecas das quais uma aplicação depende

---

LLMS index: [llms.txt](/llms.txt)

---


Ao desenvolver uma aplicação, é possível utilizar bibliotecas e _frameworks_ de
terceiros para acelerar seu trabalho. Caso você instrumente sua aplicação
utilizando OpenTelemetry, talvez queira evitar gastar tempo adicional para
adicionar manualmente rastros, logs e métricas às bibliotecas e _frameworks_ de
terceiros que utiliza.

Muitas bibliotecas e _frameworks_ já oferecem suporte ao OpenTelemetry ou são
compatíveis por meio da
[instrumentação](/docs/concepts/instrumentation/libraries/), permitindo gerar
dados de telemetria que podem ser exportados para um _backend_ de
observabilidade.

Caso você esteja instrumentando uma aplicação ou serviço que utilize bibliotecas
ou _frameworks_ de terceiros, siga estas instruções para aprender como usar
bibliotecas instrumentadas nativamente e bibliotecas de instrumentação para as
dependências do seu projeto.

## Usar bibliotecas com instrumentação nativa {#use-natively-instrumented-libraries}

Se uma biblioteca oferece suporte ao OpenTelemetry por padrão, é possível obter
rastros, métricas e logs emitidos por essa biblioteca ao adicionar e configurar
o SDK do OpenTelemetry na sua aplicação.

A biblioteca pode exigir alguma configuração adicional para sua instrumentação.
Consulte a documentação dessa biblioteca para saber mais.
{{__hugo_ctx/}}


- [Instrumentation for Next.js](https://nextjs.org/docs/app/building-your-application/optimizing/open-telemetry)
- [Instrumentation for SvelteKit](https://svelte.dev/docs/kit/observability)






<div class="alert alert-info" role="alert">



Caso saiba de alguma biblioteca JavaScript que possua integração com o
OpenTelemetry de forma nativa, [avise-nos][let us know].

</div>




[let us know]:
  https://github.com/open-telemetry/opentelemetry.io/issues/new/choose
{{__hugo_ctx/}}



## Usando bibliotecas de instrumentação {#use-instrumentation-libraries}

Se uma biblioteca não vem com OpenTelemetry de forma nativa, é possível utilizar
[bibliotecas de instrumentação](/docs/specs/otel/glossary/#instrumentation-library)
para gerar dados de telemetria para uma biblioteca ou _framework_.

Por exemplo,
[a biblioteca de instrumentação para Express](https://www.npmjs.com/package/@opentelemetry/instrumentation-express)
irá criar automaticamente [trechos](/docs/concepts/signals/traces/#spans)
baseados nas requisições HTTP de entrada.

### Configuração {#setup}

Cada biblioteca de instrumentação é um pacote NPM. Por exemplo, veja como
instalar as bibliotecas
[instrumentation-express](https://www.npmjs.com/package/@opentelemetry/instrumentation-express)
e
[instrumentation-http](https://www.npmjs.com/package/@opentelemetry/instrumentation-http)
para instrumentar tráfego HTTP de entrada e saída:

```sh
npm install --save @opentelemetry/instrumentation-http @opentelemetry/instrumentation-express
```

O OpenTelemetry JavaScript também define metapacotes (_metapackages_)
[auto-instrumentation-node](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node)
e
[auto-instrumentation-web](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-web),
que agrupam todas as bibliotecas de instrumentação baseadas em Node.js ou web em
um único pacote. É uma maneira conveniente de adicionar telemetria gerada
automaticamente para todas as suas bibliotecas com esforço mínimo:





 <ul class="nav nav-tabs" id="tabs-1" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
          data-td-tp-persist="node.js" aria-controls="tabs-01-00" aria-selected="true">
        Node.js
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
          data-td-tp-persist="browser" aria-controls="tabs-01-01" aria-selected="false">
        Browser
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-1-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">npm install --save @opentelemetry/auto-instrumentations-node
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">npm install --save @opentelemetry/auto-instrumentations-web
</span></span></code></pre></div>
    </div>
</div>


Note que usar esses metapacotes aumenta o tamanho do seu grafo de dependências.
Utilize bibliotecas de instrumentação individuais caso você saiba exatamente
quais precisa.

### Registro {#registration}

Após instalar as bibliotecas de instrumentação necessárias, registre-as no SDK
do OpenTelemetry para Node.js. Se você seguiu os
[Primeiros Passos](/docs/languages/js/getting-started/nodejs/), você já utiliza
os metapacotes. Se você seguiu as instruções
[para inicializar o SDK com instrumentação manual](/docs/languages/js/instrumentation/#initialize-tracing),
atualize seu `instrumentation.ts` (ou `instrumentation.js`) da seguinte forma:







<ul class="nav nav-tabs" id="tabs-2" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
          data-td-tp-persist="typescript" aria-controls="tabs-02-00" aria-selected="true">
        TypeScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-02-01" aria-selected="false">
        JavaScript
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-2-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.ts*/</span>
</span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">getNodeAutoInstrumentations</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@opentelemetry/auto-instrumentations-node&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">sdk</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NodeSDK</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Registra todos os pacotes de instrumentação
</span></span></span><span class="line"><span class="cl">  <span class="nx">instrumentations</span><span class="o">:</span> <span class="p">[</span><span class="nx">getNodeAutoInstrumentations</span><span class="p">()]</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">sdk</span><span class="p">.</span><span class="nx">start</span><span class="p">()</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.js*/</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span> <span class="nx">getNodeAutoInstrumentations</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;@opentelemetry/auto-instrumentations-node&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">sdk</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NodeSDK</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Registra todos os pacotes de instrumentação
</span></span></span><span class="line"><span class="cl">  <span class="nx">instrumentations</span><span class="o">:</span> <span class="p">[</span><span class="nx">getNodeAutoInstrumentations</span><span class="p">()]</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div>
    </div>
</div>


Para desabilitar bibliotecas de instrumentação individuais, aplique a seguinte
alteração:







<ul class="nav nav-tabs" id="tabs-3" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-03-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-00" role="tab"
          data-td-tp-persist="typescript" aria-controls="tabs-03-00" aria-selected="true">
        TypeScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-03-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-03-01" aria-selected="false">
        JavaScript
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-3-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-03-00" role="tabpanel" aria-labelled-by="tabs-03-00-tab" tabindex="3">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.ts*/</span>
</span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">getNodeAutoInstrumentations</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@opentelemetry/auto-instrumentations-node&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">sdk</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NodeSDK</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Registra todos os pacotes de instrumentação
</span></span></span><span class="line"><span class="cl">  <span class="nx">instrumentations</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="nx">getNodeAutoInstrumentations</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">      <span class="s1">&#39;@opentelemetry/instrumentation-fs&#39;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">enabled</span>: <span class="kt">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">}),</span>
</span></span><span class="line"><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">sdk</span><span class="p">.</span><span class="nx">start</span><span class="p">()</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-03-01" role="tabpanel" aria-labelled-by="tabs-03-01-tab" tabindex="3">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.js*/</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span> <span class="nx">getNodeAutoInstrumentations</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;@opentelemetry/auto-instrumentations-node&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">sdk</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NodeSDK</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Registra todos os pacotes de instrumentação
</span></span></span><span class="line"><span class="cl">  <span class="nx">instrumentations</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="nx">getNodeAutoInstrumentations</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">      <span class="s1">&#39;@opentelemetry/instrumentation-fs&#39;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">enabled</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">}),</span>
</span></span><span class="line"><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div>
    </div>
</div>


Para carregar apenas bibliotecas de instrumentação individuais, substitua
`[getNodeAutoInstrumentations()]` pela lista daquelas que você precisa:



 

<ul class="nav nav-tabs" id="tabs-4" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-04-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-00" role="tab"
          data-td-tp-persist="typescript" aria-controls="tabs-04-00" aria-selected="true">
        TypeScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-04-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-04-01" aria-selected="false">
        JavaScript
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-4-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-04-00" role="tabpanel" aria-labelled-by="tabs-04-00-tab" tabindex="4">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.ts*/</span>
</span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">HttpInstrumentation</span> <span class="p">}</span> <span class="kr">from</span> <span class="s2">&#34;@opentelemetry/instrumentation-http&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">ExpressInstrumentation</span> <span class="p">}</span> <span class="kr">from</span> <span class="s2">&#34;@opentelemetry/instrumentation-express&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">sdk</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NodeSDK</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="nx">instrumentations</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// A instrumentação Express espera que a camada HTTP esteja instrumentada
</span></span></span><span class="line"><span class="cl">    <span class="k">new</span> <span class="nx">HttpInstrumentation</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">    <span class="k">new</span> <span class="nx">ExpressInstrumentation</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">  <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">sdk</span><span class="p">.</span><span class="nx">start</span><span class="p">()</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-04-01" role="tabpanel" aria-labelled-by="tabs-04-01-tab" tabindex="4">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.js*/</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span> <span class="nx">HttpInstrumentation</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;@opentelemetry/instrumentation-http&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span> <span class="nx">ExpressInstrumentation</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;@opentelemetry/instrumentation-express&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">sdk</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NodeSDK</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="nx">instrumentations</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// A instrumentação Express espera que a camada HTTP esteja instrumentada
</span></span></span><span class="line"><span class="cl">    <span class="k">new</span> <span class="nx">HttpInstrumentation</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">    <span class="k">new</span> <span class="nx">ExpressInstrumentation</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">  <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div>
    </div>
</div>


### Configuração {#configuration}

Algumas bibliotecas de instrumentação oferecem opções de configuração
adicionais.

Por exemplo,
[a instrumentação Express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express#express-instrumentation-options)
oferece formas de ignorar _middlewares_ especificados ou enriquecer trechos
criados automaticamente com um _hook_ de requisição:







<ul class="nav nav-tabs" id="tabs-5" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-05-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-00" role="tab"
          data-td-tp-persist="typescript" aria-controls="tabs-05-00" aria-selected="true">
        TypeScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-05-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-05-01" aria-selected="false">
        JavaScript
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-5-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-05-00" role="tabpanel" aria-labelled-by="tabs-05-00-tab" tabindex="5">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">Span</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@opentelemetry/api&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ATTR_HTTP_REQUEST_METHOD</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ATTR_URL_FULL</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@opentelemetry/semantic-conventions&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ExpressInstrumentation</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ExpressLayerType</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ExpressRequestInfo</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@opentelemetry/instrumentation-express&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">expressInstrumentation</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ExpressInstrumentation</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="nx">requestHook</span>: <span class="kt">function</span> <span class="p">(</span><span class="nx">span</span>: <span class="kt">Span</span><span class="p">,</span> <span class="nx">info</span>: <span class="kt">ExpressRequestInfo</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">info</span><span class="p">.</span><span class="nx">layerType</span> <span class="o">===</span> <span class="nx">ExpressLayerType</span><span class="p">.</span><span class="nx">REQUEST_HANDLER</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">span</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="nx">ATTR_HTTP_REQUEST_METHOD</span><span class="p">,</span> <span class="nx">info</span><span class="p">.</span><span class="nx">request</span><span class="p">.</span><span class="nx">method</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="nx">span</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="nx">ATTR_URL_FULL</span><span class="p">,</span> <span class="nx">info</span><span class="p">.</span><span class="nx">request</span><span class="p">.</span><span class="nx">baseUrl</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-05-01" role="tabpanel" aria-labelled-by="tabs-05-01-tab" tabindex="5">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="cm">/*instrumentation.js*/</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ATTR_HTTP_REQUEST_METHOD</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ATTR_URL_FULL</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;@opentelemetry/semantic-conventions&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ExpressInstrumentation</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ExpressLayerType</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;@opentelemetry/instrumentation-express&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">expressInstrumentation</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ExpressInstrumentation</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="nx">requestHook</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">span</span><span class="p">,</span> <span class="nx">info</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">info</span><span class="p">.</span><span class="nx">layerType</span> <span class="o">===</span> <span class="nx">ExpressLayerType</span><span class="p">.</span><span class="nx">REQUEST_HANDLER</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">span</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="nx">ATTR_HTTP_REQUEST_METHOD</span><span class="p">,</span> <span class="nx">info</span><span class="p">.</span><span class="nx">request</span><span class="p">.</span><span class="nx">method</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="nx">span</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="nx">ATTR_URL_FULL</span><span class="p">,</span> <span class="nx">info</span><span class="p">.</span><span class="nx">request</span><span class="p">.</span><span class="nx">baseUrl</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div>
    </div>
</div>


Consulte a documentação de cada biblioteca de instrumentação para opções
avançadas.

### Bibliotecas de instrumentação disponíveis {#available-instrumentation-libraries}

É possível encontrar a lista de instrumentações disponíveis no
[registro](/ecosystem/registry/?language=js&component=instrumentation).

## Instrumentar uma biblioteca nativamente {#instrument-a-library-natively}

Caso queira adicionar instrumentação nativa à sua biblioteca, consulte a
seguinte documentação:

- A página de conceito [Bibliotecas](/docs/concepts/instrumentation/libraries/)
  fornece informações úteis sobre quando instrumentar e o que instrumentar.
- A página de [instrumentação manual](/docs/languages/js/instrumentation/)
  fornece exemplos de código necessários para criar rastros, métricas e logs
  para sua biblioteca.
- O
  [Guia de Implementação de Instrumentação](https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/GUIDELINES.md)
  para Node.js e navegador contém boas práticas específicas de JavaScript para
  criar instrumentação de bibliotecas.

## Criar uma biblioteca de instrumentação {#create-an-instrumentation-library}

Embora ter observabilidade pronta para uso em uma aplicação seja a forma
preferida, isso nem sempre é possível ou desejado. Nesses casos, você pode criar
uma biblioteca de instrumentação, que irá injetar chamadas de instrumentação
utilizando mecanismos como empacotamento de _interfaces_, assinatura de funções
de retorno (_callbacks_) específicos da biblioteca ou tradução de telemetria
existente para o modelo do OpenTelemetry.

Para criar uma biblioteca desse tipo, siga o
[Guia de Implementação de Instrumentação](https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/GUIDELINES.md)
para Node.js e navegador.
