0.2.3 • Published 2 months ago

nice-grpc-prometheus v0.2.3

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

nice-grpc-prometheus npm version

Prometheus monitoring for nice-grpc. Uses prom-client. Metrics mostly mimic go-grpc-prometheus.

Installation

npm install nice-grpc-prometheus

Usage

Import nice-grpc-prometheus metrics registry and merge it with the global registry:

import {register as globalRegistry, Registry} from 'prom-client';
import {registry as niceGrpcRegistry} from 'nice-grpc-prometheus';

// use `await mergedRegistry.metrics()` to export all metrics
const mergedRegistry = Registry.merge([globalRegistry, niceGrpcRegistry]);

Attach middleware as the first one on the server:

import {createServer} from 'nice-grpc';
import {prometheusServerMiddleware} from 'nice-grpc-prometheus';

const server = createServer()
  .use(prometheusServerMiddleware())
  .use(/* ... other middleware */);

Attach middleware as the first one on the client:

import {createClientFactory} from 'nice-grpc';
import {prometheusClientMiddleware} from 'nice-grpc-prometheus';

const clientFactory = createClientFactory()
  .use(prometheusClientMiddleware())
  .use(/* ... other middleware */);

const client = clientFactory.create(/* ... */);

Metrics

Following metrics are provided:

Server

NameTypeDescriptionLabels
grpc_server_started_totalCounterTotal number of RPCs started on the server.Common (see below)
grpc_server_handled_totalCounterTotal number of RPCs completed on the server, regardless of success or failure.Common + grpc_code
grpc_server_msg_received_totalCounterTotal number of RPC stream messages received by the server.Common
grpc_server_msg_sent_totalCounterTotal number of gRPC stream messages sent by the server.Common
grpc_server_handling_secondsHistogramHistogram of response latency (seconds) of gRPC that had been application-level handled by the server.Common + grpc_code

Client

NameTypeDescriptionLabels
grpc_client_started_totalCounterTotal number of RPCs started on the client.Common
grpc_client_handled_totalCounterTotal number of RPCs completed on the client, regardless of success or failure.Common + grpc_code
grpc_client_msg_received_totalCounterTotal number of RPC stream messages received by the client.Common
grpc_client_msg_sent_totalCounterTotal number of gRPC stream messages sent by the client.Common
grpc_client_handling_secondsHistogramHistogram of response latency (seconds) of the gRPC until it is finished by the application.Common + grpc_code

Labels

Common labels:

NameDescriptionExamples
grpc_typeCall typeunary, server_stream, client_stream, bidi_stream
grpc_pathFull path of a method/my.package.MyService/MyMethod
grpc_serviceFull service name with packagemy.package.MyService
grpc_methodMethod nameMyMethod

Metrics that correspond to finished calls have extra label:

NameDescriptionExamples
grpc_codeStatus code nameOK, CANCELLED, NOT_FOUND

Customization

You can use your own metric instances. This can be useful for example if you want to use your own buckets in histograms.

import {createClientFactory} from 'nice-grpc';
import {
  labelNamesWithCode,
  prometheusClientMiddleware,
} from 'nice-grpc-prometheus';
import {Histogram, Registry} from 'prom-client';

const registry = new Registry();

const clientHandlingSecondsMetric = new Histogram({
  registers: [registry],
  name: 'custom_grpc_client_handling_seconds',
  help: 'Custom histogram of response latency (seconds) of the gRPC until it is finished by the application.',
  labelNames: labelNamesWithCode,
  buckets: [0.1, 0.5, 1, 2, 3, 5, 10],
});

const clientFactory = createClientFactory()
  .use(prometheusClientMiddleware({clientHandlingSecondsMetric}))
  .use(/* ... other middleware */);

Don't forget to merge new registry with the global registry or use default registry instead.

Client middleware options:

{
  clientStartedMetric?: Counter; // labelNames: labelNames
  clientHandledMetric?: Counter; // labelNames: labelNamesWithCode
  clientStreamMsgReceivedMetric?: Counter; // labelNames: labelNames
  clientStreamMsgSentMetric?: Counter; // labelNames: labelNames
  clientHandlingSecondsMetric?: Histogram; // labelNames: labelNamesWithCode
}

Server middleware options:

{
  serverStartedMetric?: Counter; // labelNames: labelNames
  serverHandledMetric?: Counter; // labelNames: labelNamesWithCode
  serverStreamMsgReceivedMetric?: Counter; // labelNames: labelNames
  serverStreamMsgSentMetric?: Counter; // labelNames: labelNames
  serverHandlingSecondsMetric?: Histogram; // labelNames: labelNamesWithCode
}

Caution: Use the labelNames specified in the comment. Using incorrect labelNames may cause errors now or in the future.

0.2.3

2 months ago

0.2.1

7 months ago

0.2.2

7 months ago

0.2.0

9 months ago

0.1.7

10 months ago

0.1.2

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.1

2 years ago

0.1.0

2 years ago