aws-xray-sdk-hapi

AWS X-Ray plugin for Hapi.JS

Usage no npm install needed!

<script type="module">
  import awsXraySdkHapi from 'https://cdn.skypack.dev/aws-xray-sdk-hapi';
</script>

README

hapi-xray

A HapiJS plugin to log requests and subsegments through AWSXray.

Setup

The plugin relies on the AWS credentials being set before being registered, or it will pull them from ~/.aws/credentials as per the SDK default.

For more details on using X-Ray, see the docs

Usage

Simply register as a normal Hapi plugin


const AWSXRay = require('aws-xray-sdk');

await server.register({
  plugin: require('hapi-xray'),
  options: {
    captureAWS: true,
    plugins: [AWSXRay.plugins.ECSPlugin]
  }
});

In automatic mode, you can access the X-Ray segment at any time via the AWSXRay SDK:

const AWSXRay = require('aws-xray-sdk-core');

const segment = AWSXRay.getSegment();
segment.addAnnotation('hitController', 'true');

In manual mode, you can access the current X-Ray segment from the request object:

server.route({
  method: 'GET',
  path: '/items',
  handler: async (request, h) => {
    const segment = request.segment;
    segment.addAnnotation('hitController', 'true');
    
    return {};
  }
});

Options

  • segmentName Segment name to use in place of default segment name generator
  • automaticMode Specifies that X-Ray automatic mode is in use (default true)
  • plugins An array of AWS plugins to use (i.e. [AWSXRay.plugins.EC2Plugin])
  • captureAWS Enables AWS X-Ray to capture AWS calls. This requires having aws-sdk installed as a peer dependency
  • captureHTTP Enables AWS X-Ray to capture all http calls
  • capturePromises Enables AWS X-Ray to capture all promises
  • logger Bind AWS X-Ray to compatible logging interface ({ trace, debug, info })

Sample App

A naive hapi server with X-Ray enabled is available in the "sample" directory. The sample can be started from the sdk_contrib/hapi directory with: npm run sample

Once running, a "hello world" GET endpoint will be available at http://localhost:3010/

The sample will run but throw errors connecting to X-Ray if a local X-Ray daemon is not running.

For more information on running the XRay daemon locally: https://docs.aws.amazon.com/xray/latest/devguide/xray-daemon-local.html

Thanks

Based on the hard work @AWS X-Ray Express Middleware

Contributors