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 🙏

© 2026 – Pkg Stats / Ryan Hefner

nodejs-prometheus-metrics

v0.0.5

Published

Prom-client wrapper for nodejs services

Downloads

13

Readme

Metrics Controller for NodeJS based APIs

This is a simplified wrapper in hopes of standardizing the metrics reported for our NodeJS based services to Prometheus

Kuberentes Config

Annotate the Service Defintion

Assuming the api/service base path is at: /api

apiVersion: v1
kind: Service
metadata:
  name: example-api
  labels:
    app: example
    environment: dev
    tier: api
  annotations:
    prometheus.io/path: "/api/metrics"
    prometheus.io/scrape: "true"

NOTE: If your api does not have a base path and the metrics will be available at /metrics then you can eliminate the prometheus.io/path annotation

This is the best documentation (at time of writing): Prometheus Config Docs

swagger.yaml Config

  /metrics:
    x-swagger-router-controller: metrics
    get:
      description: Returns api metrics for Prometheus
      operationId: getMetrics
      produces:
       - text/plain
      responses:
        "200":
          description: success
          schema:
            type: string

API Setup

Default Metrics

Default metrics will be collected unless you set the autoStart option to false. Default metrics come from prom-client library

Per Request Metrics

Inorder to collect per-request metrics, you must add the middleware to your app / server. The RPM class exposes this via the requestMiddleware method.

Example Setup

app.js

const restify = require('restify');
const Metrics = require('nodejs-prometheus-metrics');
const app = restify.createServer();

const metrics = new Metrics({
  prefix: 'my_cool_api_',
  requestObjPath: 'swagger.apiPath'
});

app.use(metrics.requestMiddleware);

metricsController.js

const Metrics = require('nodejs-prometheus-metrics');
const metrics = new Metrics();

function requestController(req, res, next) {
	metrics.getMetrics();
	return next();
}

module.exports = requestController

Options

| Name (type) | Default | Description | | --- | --- | --- | | autoStart (bool) | true | Start Collection default metrics. If you set this value to false you must call start to collect default metricss | | requestObjPath (string / function) | 'path' | Path in the request object that should be used for determining the path of the request. ex. With swagger it obfuscates the path request therefore swagger.apiPath can be used | | metricsEndpoint (string) | '/metrics' | if your api uses a different path for metrics. ex. /api/metrics | | promTimeout (int) | 5000 | Time in MS between metric collections |