Skip to content

Latest commit

 

History

History
 
 

zipkin-instrumentation-express

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

zipkin-instrumentation-express

npm

Express middleware and instrumentation that adds Zipkin tracing to the application.

Express Middleware

const express = require('express');
const {Tracer, ExplicitContext, ConsoleRecorder} = require('zipkin');
const zipkinMiddleware = require('zipkin-instrumentation-express').expressMiddleware;

const ctxImpl = new ExplicitContext();
const recorder = new ConsoleRecorder();
const localServiceName = 'service-a'; // name of this application
const tracer = new Tracer({ctxImpl, recorder, localServiceName});

const app = express();

// Add the Zipkin middleware
app.use(zipkinMiddleware({tracer}));

Express HTTP Proxy

This library will wrap express-http-proxy to add headers and record traces.

const {ConsoleRecorder, Tracer, ExplicitContext} = require('zipkin');
const {wrapExpressHttpProxy} = require('zipkin-instrumentation-express');
const proxy = require('express-http-proxy');

const ctxImpl = new ExplicitContext();
const recorder = new ConsoleRecorder();
const tracer = new Tracer({ctxImpl, localServiceName: 'weather-app', recorder});
const remoteServiceName = 'weather-api';

const zipkinProxy = wrapExpressHttpProxy(proxy, {tracer, remoteServiceName});

app.use('/api/weather', zipkinProxy('http://api.weather.com', {
  decorateRequest: (proxyReq, originalReq) => proxyReq.method = 'POST' // You can use express-http-proxy options as usual
}));

This can also be combined with Zipkin Express Middleware. Note the use of zipkin-context-cls.

const {ConsoleRecorder, Tracer} = require('zipkin');
const {expressMiddleware, wrapExpressHttpProxy} = require('zipkin-instrumentation-express')
const CLSContext = require('zipkin-context-cls');
const proxy = require('express-http-proxy');

const ctxImpl = new CLSContext();
const recorder = new ConsoleRecorder();
const tracer = new Tracer({ctxImpl, localServiceName: 'weather-app', recorder});
const remoteServiceName = 'weather-api';

const zipkinProxy = wrapExpressHttpProxy(proxy, {tracer, remoteServiceName});

app.use('/api/weather', expressMiddleware({tracer}), zipkinProxy('http://api.weather.com'));