npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bw-monitoring

v1.3.1

Published

Add metric/checks endpoints to expressjs apps

Downloads

469

Readme

bw-monitoring

NPM version Build Status Dependency Status

bw-monitoring is Express middleware that exposes a collection of standardised endpoints for monitoring infrastructure (e.g. Prometheus) to consume.

npm install --save bw-monitoring

bw-monitoring exports a function getMiddleware which returns an express middleware to pass to expressApp.use. This adds standard routes /healthz, /metricz, /checkz.

var monitoring = require('bw-monitoring');
expressApp.use(monitoring.getMiddleware());

/checkz

By default /checkz returns a 404 status code. It can be configured to perform arbitrary checks of application dependencies using bwMonitoring.addCheck().

monitoring.addCheck

var postgresCheck = {
  name: 'postgres',
  check: (ok, warning, critical, unknown) => {
    pgConnection.query.raw('SELECT version();', [])
      .then(ok)
      .catch(critical);
  }
}
monitoring.addCheck(postgresCheck);

With this check added the endpoint will return 200 with a body showing the result of any checks in prometheus compatible data format. E.g...

postgres 0

/livez

The /livez endpoint is the same as /checkz, and checks are added the same way (via bwMonitoring.addCheck(). However if any check fails it will return a 500 status code. The content of the body will also be only the failed check

/healthz

By default /healthz returns a 200 status code. This can be used as a sensible default in a Kubernetes readinessProbe, and all it does is check that the express server is serving correctly. It checks no upstream dependencies for health, although it can be configured to do this using addReadinessCheck.

monitoring.addReadinessCheck

To add specific checks to a readinessProbe (e.g. can connect to postgres) use the addReadinessCheck method. addReadinessCheck takes the exact same style of check as addCheck, meaning we can re-use the postgres check from above if desirable. E.g...

monitoring.addReadinessCheck(postgresCheck);

NB: Do not configure explicit readiness checks unless you have a tier infront of your application that can serve appropriate error pages (e.g nginx). If all you have is dumb TCP/HTTP load-balancing, then keep forwarding requests to the application so it can deal with errors itself when an upstream dependency is failing.

/metricz

By default /metricz returns a 404 status code.

monitoring.addMetrics

It can be configured with a function to query for Prometheus style metrics and will expose them in a compatible data format.

var prometheus = require('prom-client');
var c = new Counter('my_counter');
setTimeout(c.inc, 200);
monitoring.addMetrics(() => prometheus.register.metrics());