NodeJS
npm
yarn
npm install @opentelemetry/api \
@opentelemetry/sdk-trace-base \
@opentelemetry/sdk-trace-node \
@opentelemetry/resources \
@opentelemetry/semantic-conventions \
@opentelemetry/exporter-trace-otlp-proto \
@opentelemetry/instrumentation
yarn add @opentelemetry/api \
@opentelemetry/sdk-trace-base \
@opentelemetry/sdk-trace-node \
@opentelemetry/resources \
@opentelemetry/semantic-conventions \
@opentelemetry/exporter-trace-otlp-proto \
@opentelemetry/instrumentation
Install all instrumentation libraries with the @opentelemetry/auto-instrumentations-node package along with other common instrumentations:
npm
yarn
npm install @opentelemetry/auto-instrumentations-node \
opentelemetry-instrumentation-elasticsearch \
opentelemetry-instrumentation-express \
opentelemetry-instrumentation-kafkajs \
opentelemetry-instrumentation-neo4j \
opentelemetry-instrumentation-sequelize \
opentelemetry-instrumentation-typeorm
yarn add @opentelemetry/auto-instrumentations-node \
opentelemetry-instrumentation-elasticsearch \
opentelemetry-instrumentation-express \
opentelemetry-instrumentation-kafkajs \
opentelemetry-instrumentation-neo4j \
opentelemetry-instrumentation-sequelize \
opentelemetry-instrumentation-typeorm
Add this code to your application in a file named
opentelemetry.ts
This code contains parts you need to fill in yourself in step 4
Type Script
Java Script
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { registerInstrumentations } from '@opentelemetry/instrumentation';
// instrumentation libraries
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { ExpressInstrumentation } from 'opentelemetry-instrumentation-express';
import { ElasticsearchInstrumentation } from 'opentelemetry-instrumentation-elasticsearch';
import { KafkaJsInstrumentation } from 'opentelemetry-instrumentation-kafkajs';
import { Neo4jInstrumentation } from 'opentelemetry-instrumentation-neo4j';
import { SequelizeInstrumentation } from 'opentelemetry-instrumentation-sequelize';
import { TypeormInstrumentation } from 'opentelemetry-instrumentation-typeorm';
const aspectoToken = '--YOUR ASPECTO TOKEN--';
const serviceName = '--YOUR SERVICE NAME--';
const provider = new NodeTracerProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: serviceName
}),
});
provider.register();
provider.addSpanProcessor(
new BatchSpanProcessor(
new OTLPTraceExporter({
url: 'https://otelcol.aspecto.io/v1/traces',
headers: {
// Aspecto API-Key is required
Authorization: aspectoToken
}
})
)
);
registerInstrumentations({
instrumentations: [
getNodeAutoInstrumentations({
// some instrumentation is noisy and commonly not useful
'@opentelemetry/instrumentation-fs': {
enabled: false
},
'@opentelemetry/instrumentation-net': {
enabled: false
},
'@opentelemetry/instrumentation-dns': {
enabled: false
},
'@opentelemetry/instrumentation-express': {
enabled: false
},
}),
new ExpressInstrumentation(),
new ElasticsearchInstrumentation(),
new KafkaJsInstrumentation(),
new Neo4jInstrumentation(),
new SequelizeInstrumentation(),
new TypeormInstrumentation(),
],
});
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { Resource } = require('@opentelemetry/resources');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
// instrumentation libraries
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { ExpressInstrumentation } = require('opentelemetry-instrumentation-express');
const { ElasticsearchInstrumentation } = require('opentelemetry-instrumentation-elasticsearch');
const { KafkaJsInstrumentation } = require('opentelemetry-instrumentation-kafkajs');
const { Neo4jInstrumentation } = require('opentelemetry-instrumentation-neo4j');
const { SequelizeInstrumentation } = require('opentelemetry-instrumentation-sequelize');
const { TypeormInstrumentation } = require('opentelemetry-instrumentation-typeorm');
const aspectoToken = '--YOUR ASPECTO TOKEN--';
const serviceName = '--YOUR SERVICE NAME--';
const provider = new NodeTracerProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: serviceName
}),
});
provider.register();
provider.addSpanProcessor(
new BatchSpanProcessor(
new OTLPTraceExporter({
url: 'https://otelcol.aspecto.io/v1/traces',
headers: {
// Aspecto API-Key is required
Authorization: aspectoToken
}
})
)
);
registerInstrumentations({
instrumentations: [
getNodeAutoInstrumentations({
// some instrumentation is noisy and commonly not useful
'@opentelemetry/instrumentation-fs': {
enabled: false
},
'@opentelemetry/instrumentation-net': {
enabled: false
},
'@opentelemetry/instrumentation-dns': {
enabled: false
},
'@opentelemetry/instrumentation-express': {
enabled: false
},
}),
new ExpressInstrumentation(),
new ElasticsearchInstrumentation(),
new KafkaJsInstrumentation(),
new Neo4jInstrumentation(),
new SequelizeInstrumentation(),
new TypeormInstrumentation(),
],
});
Fill in the following in the code above in order to export traces to Aspecto:
2)
serviceName
- The name of your web application. You will be able to filter and search for it in Aspecto trace viewer and use it for sampling rules and alerts.Invoke the code above in your main
index.ts
file by import
ing / require
ing it as early as possible.Type Script
Java Script
import './opentelemetry'; // you may need to change the import depending on where you saved `opentelemetry.ts`
require('./opentelemetry'); // you may need to change the import depending on where you saved `opentelemetry.js`
Last modified 3mo ago