opentelemetry-js/packages/opentelemetry-node
Gerhard Stöbich d5517812b3
chore: update typescript to 4.3 and enable noImplicitOverride (#2241)
Co-authored-by: Daniel Dyla <dyladan@users.noreply.github.com>
2021-06-01 15:40:04 -04:00
..
src chore: update typescript to 4.3 and enable noImplicitOverride (#2241) 2021-06-01 15:40:04 -04:00
test chore: remove references to Noop classes from API (#2230) 2021-05-27 08:14:06 -04:00
.eslintignore fix(lint): move tslint to eslint (#892) 2020-05-20 20:42:17 -07:00
.eslintrc.js fix(lint): move tslint to eslint (#892) 2020-05-20 20:42:17 -07:00
.gitignore Refactor: Consistent package naming and structure (#413) 2019-10-08 22:01:47 +02:00
.npmignore Refactor: Consistent package naming and structure (#413) 2019-10-08 22:01:47 +02:00
LICENSE Refactor: Consistent package naming and structure (#413) 2019-10-08 22:01:47 +02:00
README.md fix docs typo (#2180) 2021-05-03 08:21:56 -04:00
package.json chore: update typescript to 4.3 and enable noImplicitOverride (#2241) 2021-06-01 15:40:04 -04:00
tsconfig.json refactor(semantic-conventions): use semantic-conventions for resource… (#2173) 2021-05-08 09:45:55 +02:00

README.md

OpenTelemetry Node SDK

NPM Published Version dependencies devDependencies Apache License

This module provides automated instrumentation and tracing for Node.js applications.

For manual instrumentation see the @opentelemetry/tracing package.

How auto instrumentation works

This package exposes a NodeTracerProvider. For loading instrumentations please use registerInstrumentations function from opentelemetry-instrumentation

OpenTelemetry comes with a growing number of instrumentation plugins for well known modules (see supported modules) and an API to create custom instrumentation (see the instrumentation developer guide).

Please note: This module does not bundle any plugins. They need to be installed separately.

This is done by wrapping all tracing-relevant functions.

This instrumentation code will automatically

  • extract a trace-context identifier from inbound requests to allow distributed tracing (if applicable)
  • make sure that this current trace-context is propagated while the transaction traverses an application (see @opentelemetry/context-base for an in-depth explanation)
  • add this trace-context identifier to outbound requests to allow continuing the distributed trace on the next hop (if applicable)
  • create and end spans

Creating custom spans on top of auto-instrumentation

Additionally to automated instrumentation, NodeTracerProvider exposes the same API as @opentelemetry/tracing, allowing creating custom spans if needed.

Installation

npm install --save @opentelemetry/api
npm install --save @opentelemetry/node

# Install instrumentation plugins
npm install --save @opentelemetry/instrumentation-http
# and for example one additional
npm install --save instrumentation-graphql

Usage

The following code will configure the NodeTracerProvider to instrument http (and any other installed supported modules) using @opentelemetry/plugin-http.

const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { NodeTracerProvider } = require('@opentelemetry/node');

// Create and configure NodeTracerProvider
const provider = new NodeTracerProvider();

// Initialize the provider
provider.register();

// register and load instrumentation and old plugins - old plugins will be loaded automatically as previously
// but instrumentations needs to be added
registerInstrumentations({
});

// Your application code - http will automatically be instrumented if
// @opentelemetry/plugin-http is present
const http = require('http');

Instrumentation configuration

In the following example:

  • the express instrumentation is enabled
  • the http instrumentation has a custom config for a requestHook
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
const { ExpressInstrumentation } = require('@opentelemetry/instrumentation-express');

const provider = new NodeTracerProvider();
provider.register();

// register and load instrumentation and old plugins - old plugins will be loaded automatically as previously
// but instrumentations needs to be added
registerInstrumentations({
  instrumentations: [
    new ExpressInstrumentation(),
    new HttpInstrumentation({
        requestHook: (span, request) => {
          span.setAttribute("custom request hook attribute", "request");
        },
    }),
  ],
});


Examples

See how to automatically instrument http and gRPC / grpc-js using node-sdk.

License

Apache 2.0 - See LICENSE for more information.