Skip to content

Instantly share code, notes, and snippets.

@SDemonUA
Last active September 8, 2022 12:07
Show Gist options
  • Save SDemonUA/6de19caa69b7525e1d6f3962f1b896f1 to your computer and use it in GitHub Desktop.
Save SDemonUA/6de19caa69b7525e1d6f3962f1b896f1 to your computer and use it in GitHub Desktop.
Collect nodejs app traces into jaeger

Configure

  • add tracer.js into app folder
  • install npm packages required in tracer.js
  • start app with node -r tracer.js app.js or require reacer.js and call await tracer.start() before app init
  • start jaeger service and connect it ot app network if required
docker run --rm --name jaeger --network app-network \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest
'use strict'
const opentelemetry = require('@opentelemetry/sdk-node');
const {getNodeAutoInstrumentations} = require('@opentelemetry/auto-instrumentations-node');
const {OTLPTraceExporter} = require('@opentelemetry/exporter-trace-otlp-grpc');
const {Resource} = require('@opentelemetry/resources');
const {SemanticResourceAttributes} = require('@opentelemetry/semantic-conventions');
const {ZipkinExporter} = require("@opentelemetry/exporter-zipkin");
const {BatchSpanProcessor} = require("@opentelemetry/sdk-trace-base");
const {ConsoleSpanExporter} = require('@opentelemetry/sdk-trace-base');
const sdk = new opentelemetry.NodeSDK({
traceExporter: new OTLPTraceExporter({
url: 'http://jaeger:4317'
}),
serviceName: 'appName',
instrumentations: [getNodeAutoInstrumentations()],
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: 'appName'
}),
});
// initialize the SDK and register with the OpenTelemetry API
// this enables the API to record telemetry
sdk.start()
.then(() => console.log('Tracing initialized'))
.catch((error) => console.log('Error initializing tracing', error));
// gracefully shut down the SDK on process exit
process.on('SIGTERM', () => {
sdk.shutdown()
.then(() => console.log('Tracing terminated'))
.catch((error) => console.log('Error terminating tracing', error))
.finally(() => process.exit(0));
});
module.exports = sdk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment