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

@christiangalsterer/node-postgres-prometheus-exporter

v1.3.0

Published

A prometheus exporter for node-postgres

Downloads

4,902

Readme

GitHub Actions CI Status codecov Coverage Status Known Vulnerabilities npm downloads npm version npm license semver Conventional Commits renovate code style: prettier github stars

Prometheus Exporter for node-postgres

A prometheus exporter exposing metrics for node-postgres.

Available Metrics

The exporter provides the following metrics.

pg.Client Metrics

|Metric Name|Description|Labels|Since| |---|---|---|---| |pg_client_errors_total|The total number of connection errors with a database|host: The host of the database.database: The database name|1.0.0| |pg_client_disconnects_total|The total number of disconnected connections|host: The host of the database.database: The database name|1.0.0|

pg.Pool Metrics

|Metric Name|Description|Labels|Since| |---|---|---|---| |pg_pool_connections_created_total|The total number of created connections|host: The host of the database.database: The database name|1.0.0| |pg_pool_size|The current size of the connection pool, including active and idle members|host: The host of the database.database: The database name|1.0.0| |pg_pool_active_connections|The total number of active connections|host: The host of the database.database: The database name|1.0.0| |pg_pool_errors_total|The total number of connection errors with a database|host: The host of the database.database: The database name|1.0.0| |pg_pool_connections_removed_total|The total number of removed connections|host: The host of the database.database: The database name|1.0.0|

Example Output

Here an example output in the prometheus format of the provided metrics.

# HELP pg_client_errors_total The total number of connection errors with a database.
# TYPE pg_client_errors_total counter
pg_client_errors_total{host="localhost:5432",database="node_postgres_test1"} 1

# HELP pg_client_disconnects_total The total number of disconnected connections.
# TYPE pg_client_disconnects_total counter
pg_client_disconnects_total{host="localhost:5432",database="node_postgres_test1"} 1

# HELP pg_pool_connections_created_total The total number of created connections.
# TYPE pg_pool_connections_created_total counter
pg_pool_connections_created_total{host="localhost:5432",database="node_postgres_test1"} 19

# HELP pg_pool_size The current size of the connection pool, including active and idle members.
# TYPE pg_pool_size gauge
pg_pool_size{host="localhost:5432",database="node_postgres_test1"} 10

# HELP pg_pool_max The maximum size of the connection pool.
# TYPE pg_pool_max gauge
pg_pool_max{host="localhost:5432",database="node_postgres_test1"} 10

# HELP pg_pool_active_connections The total number of active connections.
# TYPE pg_pool_active_connections gauge
pg_pool_active_connections{host="localhost:5432",database="node_postgres_test1"} 10

# HELP pg_pool_waiting_connections The total number of waiting connections.
# TYPE pg_pool_waiting_connections gauge
pg_pool_waiting_connections{host="localhost:5432",database="node_postgres_test1"} 1

# HELP pg_pool_idle_connections The total number of idle connections.
# TYPE pg_pool_idle_connections gauge
pg_pool_idle_connections{host="localhost:5432",database="node_postgres_test1"} 0

# HELP pg_pool_errors_total The total number of connection errors with a database.
# TYPE pg_pool_errors_total counter
pg_pool_errors_total{host="localhost:5432",database="node_postgres_test1"} 1

# HELP pg_pool_connections_removed_total The total number of removed connections.
# TYPE pg_pool_connections_removed_total counter
pg_pool_connections_removed_total{host="localhost:5432",database="node_postgres_test1"} 9

Usage

Add Dependency

Add the following dependency to your project to download the package from npm.

npm i @christiangalsterer/node-postgres-prometheus-exporter

TypeScript

The following example illustrates how to use the exporter to enable monitoring for the node-postgres.

import { Client, Pool } from 'pg'
import { Registry, collectDefaultMetrics } from 'prom-client'
import { monitorPgClient, monitorPgPool } from '@christiangalsterer/node-postgres-prometheus-exporter'

...

// set up a pg.Client
const client = new Client()

// set up a pg.Pool
const pool = new Pool()

// set up the prometheus client
const register = new Registry();
collectDefaultMetrics({ register })

// monitor the pg.Client
monitorPgClient(client, register)

// monitor the pg.Pool
monitorPgPool(pool, register)

...

// connect to PostgreSQL *after* calling monitorPgClient() / monitorPgPool()
await client.connect()
await pool.connect()

JavaScript

The following example illustrates how to use the exporter to enable monitoring for node-postgres.

const pg = require('pg')
const promClient = require( 'prom-client');
const postgresExporter = require('@christiangalsterer/node-postgres-prometheus-exporter')

// set up a pg.Client
const client = new pg.Client()

// set up a pg.Pool
const pool = new pg.Pool()

// set up the prometheus client
const collectDefaultMetrics = promClient.collectDefaultMetrics;
const Registry = promClient.Registry;
const register = new Registry();
collectDefaultMetrics({ register });

// monitor the pg.Client
postgresExporter.monitorPgClient(client, register)

// monitor the pg.Pool
postgresExporter.monitorPgPool(pool, register)

// connect to Postgres *after* calling monitorPgClient() / monitorPgPool()
await client.connect()
await pool.connect()

Configuration

The exporter can be configured via properties specified on the optional parameter of type PgClientExporterOptions and PgPoolExporterOptions respectively.

PgClientExporterOptions

|property|Description|Example|Since | |---|---|---|---| | defaultLabels | Default labels added to each metrics. | {'foo':'bar', 'alice': 3} | 1.0.0 |

PgPoolExporterOptions

|property|Description|Example|Since | |---|---|---|---| | defaultLabels | Default labels added to each metrics. | {'foo':'bar', 'alice': 3} | 1.0.0|

Grafana Dashboard

An example dashboard for Grafana is available here displaying the provided metrics by the exporter.

Here an example for node-postgres client metrics: Grafana:node-postgres Client Metrics

Here an example for node-postgres pool metrics: Grafana:node-postgres Pool Metrics

Changelog

The changes to project can be found in the changelog.

Compatibility

The following table list the compatibility of exporter versions with different node-postgres and prom-client versions.

|Exporter Version|node-postgres Version|prom-client version| |---|---|---| |^1.0.0|^8.11.0|^15.0.0|

Contributions

Contributions are highly welcome. If you want to contribute to this project please follow the steps described in the contribution guidelines.

Projects Using The Exporter

If you want to support this project, please add a link to your project and/or company when you use this exporter.

Related Projects

If you are looking for a way to monitor your MongoDB Driver for Node.js you may have a look at https://github.com/christiangalsterer/mongodb-driver-prometheus-exporter.

If you are looking for a way to monitor KafkaJs for Node.js you may have a look at https://github.com/christiangalsterer/kafkajs-prometheus-exporter.