1.0.1 • Published 2 years ago

@open-services-group/probot-metrics v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Probot metrics endpoint

This extension enables you to expose Prometheus metrics from Probot with ease. It's a simple wrapper on top of prom-client.

Installation

npm install --save @open-services-group/probot-metrics

Overview

  • useCounter(options): registers a Counter metric, consumes options for Counter.
  • useGauge(options): registers a Gauge metric, consumes options for Gauge.
  • useHistogram(options): registers a Histogram metric, consumes options for Histogram.
  • useSummary(options): registers a Summary metric, consumes options for Summary.
  • exposeMetrics(route) to expose HTTP route from Probot on <route> (defaults to /metrics). Use as a Probot HTTP route:

Usage

If you want to leverage this extension, it is required that your Probot instance has a server exposed (This extension currently supports Prometheus PULL mode only, serverless deployments don't work like that.)

const metrics = require('@open-services-group/probot-metrics');

module.exports = (app, { getRouter }) => {
    const router = getRouter();
    metrics.exposeMetrics(router, '/metrics');
}

By default this extension tracks default Node.js metrics and exposes them (with probot_ prefix). In addition to that you can define your own custom metrics.

Define custom metrics

You can use useCounter, useGauge, useHistogram and useSummary to define custom metrics.

const metrics = require('@open-services-group/probot-metrics');

module.exports = app => {
    // Exposing the route is required in all cases
    //...

    const numberOfActionsTotal = metrics.useCounter({
        name: 'num_of_actions_total',
        help: 'Total number of actions received',
        labelNames: ['install', 'action'],
    });

    app.onAny((context) => {
        numberOfActionsTotal
        .labels({
            install: context.payload.installation.id,
            action: context.payload.action,
        })
        .inc();
    });
}