zipkin-instrumentation-express
TypeScript icon, indicating that this package has built-in type declarations

0.22.0 • Public • Published

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'));

Dependencies (1)

Dev Dependencies (3)

Package Sidebar

Install

npm i zipkin-instrumentation-express

Weekly Downloads

5,759

Version

0.22.0

License

Apache-2.0

Unpacked Size

36.2 kB

Total Files

15

Last publish

Collaborators

  • openzipkin