/opentracing-auto

Out of the box distributed tracing for Node.js applications with OpenTracing.

Primary LanguageJavaScriptMIT LicenseMIT

opentracing-auto

Build Status

Out of the box distributed tracing for Node.js applications with OpenTracing. Support multiple Tracers.

WARNING: experimental library, do not use in production yet

Technologies

Requirements

  • Node.js, >= v8

Getting started

npm install @risingstack/opentracing-auto
// must be in the first two lines of your application
const Instrument = require('@risingstack/opentracing-auto')
const { Trace } = require('opentracing') // or any OpenTracing compatible tracer like jaeger-client
const tracer1 = new Tracer()
const tracer2 = new Tracer()

const instrument = new Instrument({
  tracers: [tracer1, tracer2]
})

// rest of your code
const express = require('express')
// ...

API

new Instrument({ tracers: [tracer1, tracer2] })

Instrument modules.

  • tracers: Array of OpenTracing compatible tracers
    • required
  • httpTimings: Adds HTTP timings (DNS lookup, Connect, TLS, Time to first byte, Content transfer)
    • default: false

instrument.unpatch()

Unpatch instrumentations

Instrumentations

Example

The example require a running MongoDB and Jaeger.

To start Jaeger and visit it's dashboard:

docker run -d -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp -p5778:5778 -p16686:16686 -p14268:14268 jaegertracing/all-in-one:latest && open http://localhost:16686
npm run example
curl http://localhost:3000
open http://localhost:16686

Jaeger Node.js tracing

HTTP timings

You can enable it with the httpTimings: true

HTTP timings

Debug

Start your application with the DEBUG=opentracing-auto* environment variable.

Feature ideas

  • More database instrumentation: Redis etc.
  • More messaging layer instrumentation: HTTP/2, GRPC, RabbitMQ, Kafka etc.