@christiangalsterer/pg-promise-prometheus-exporter

中文文档
2.2.0发布于 2024/07/21MITTypeScriptCommonJS近 30 天下载 2.4万

A prometheus exporter for pg-promise

原始使用文档
文档目录6 节
  1. Available Metrics
  2. Example Output
  3. Add Dependency
  4. TypeScript
  5. JavaScript
  6. PgPromiseExporterOptions

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 pg-promise

A prometheus exporter exposing metrics for pg-promise.

Available Metrics

As the exporter is utilizing the node-postgres-prometheus-exporter for the majority of the connection and pool usage metrics, please check the documentation for the list of metrics.

In addition the exporter provides the following metrics.

Metric NameDescriptionLabelsSince
pg_command_duration_seconds_bucketDuration of the executed command in seconds
  • host: The host of the database
  • database: The database name
  • command: Name of the command
  • status: SUCCESS or ERROR
    2.0.0
    pg_command_duration_seconds_sumThe cumulated duration of the executed command in seconds
    • host: The host of the database
    • database: The database name
    • command: Name of the command
    • status: SUCCESS or ERROR
      2.0.0
      pg_command_duration_seconds_countNumber of executed commands
      • host: The host of the database
      • database: The database name
      • command: Name of the command
      • status: SUCCESS or ERROR
        2.0.0
        pg_task_duration_seconds_bucketDuration of the executed task in seconds
        • host: The host of the database
        • database: The database name
        • task: The tag as provided when executing the task. Note: The tag will be only added if it is a valid label value.
          2.0.0
          pg_task_duration_seconds_sumCumulated duration of the executed task in seconds
          • host: The host of the database
          • database: The database name
          • task: The tag as provided when executing the task. Note: The tag will be only added if it is a valid label value.
            2.0.0
            pg_task_duration_seconds_countNumber of executed tasks
            • host: The host of the database
            • database: The database name
            • task: The tag as provided when executing the task. Note: The tag will be only added if it is a valid label value.
              2.0.0
              pg_transaction_duration_seconds_bucketDuration of the executed transactions in seconds
              • host: The host of the database
              • database: The database name
              • transaction: The tag as provided when executing the transaction. Note: The tag will be only added if it is a valid label value.
                2.0.0
                pg_transaction_duration_seconds_sumCumulated duration of the executed transactions in seconds
                • host: The host of the database
                • database: The database name
                • transaction: The tag as provided when executing the transaction. Note: The tag will be only added if it is a valid label value.
                  2.0.0
                  pg_transaction_duration_seconds_countNumber of executed transactions
                  • host: The host of the database
                  • database: The database name
                  • transaction: The tag as provided when executing the transaction. Note: The tag will be only added if it is a valid label value.
                    2.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
                    
                    # HELP pg_command_duration_seconds Timer of pg commands
                    # TYPE pg_command_duration_seconds histogram
                    pg_command_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 21
                    pg_command_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 31
                    pg_command_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 38
                    pg_command_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 3.475
                    pg_command_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 8
                    pg_command_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 14
                    pg_command_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 18
                    pg_command_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 2.116
                    pg_command_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 12
                    pg_command_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 17
                    pg_command_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 18
                    pg_command_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 1.6620000000000001
                    pg_command_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    
                    # HELP pg_task_duration_seconds Timer of pg tasks
                    # TYPE pg_task_duration_seconds histogram
                    pg_task_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",task="my-task"} 8
                    pg_task_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",task="my-task"} 14
                    pg_task_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",task="my-task"} 18
                    pg_task_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",task="my-task"} 2.139
                    pg_task_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    
                    # HELP pg_transaction_duration_seconds Timer of pg transactions
                    # TYPE pg_transaction_duration_seconds histogram
                    pg_transaction_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 11
                    pg_transaction_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 18
                    pg_transaction_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 5.142
                    pg_transaction_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    

                    Usage

                    Add Dependency

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

                    npm i @christiangalsterer/pg-promise-prometheus-exporter
                    

                    TypeScript

                    The following example illustrates how to use the exporter to enable monitoring for the pg-promise.

                    import pgPromise, { type IInitOptions, type IMain } from 'pg-promise'
                    import { Registry, collectDefaultMetrics } from 'prom-client'
                    import { monitorPgPromise } from '@christiangalsterer/pg-promise-prometheus-exporter'
                    
                    ...
                    
                    // set up pg-promise
                    const initOptions: IInitOptions = {/* initialization options */}
                    const pgp: IMain = pgPromise(initOptions)
                    const database: any = pgp(/* the connection parameter is either a configuration object or a connection string */)
                    
                    
                    // set up the prometheus client
                    const register = new Registry();
                    collectDefaultMetrics({ register })
                    
                    // monitor pg-promise
                    monitorPgPromise(database, initOptions, register)
                    
                    ...
                    
                    // connect to PostgreSQL *after* calling monitorPgPromise
                    

                    JavaScript

                    The following example illustrates how to use the exporter to enable monitoring for pg-promise.

                    const promClient = require( 'prom-client');
                    const pgPromiseExporter = require('@christiangalsterer/pg-promise-prometheus-exporter')
                    
                    // set up pg-promise
                    const initOptions = {/* initialization options */};
                    const pgp = require('pg-promise')(initOptions);
                    const database = pgp(/* the connection parameter is either a configuration object or a connection string */)
                    
                    // set up the prometheus client
                    const collectDefaultMetrics = promClient.collectDefaultMetrics;
                    const Registry = promClient.Registry;
                    const register = new Registry();
                    collectDefaultMetrics({ register });
                    
                    // monitor pg-promise
                    pgPromiseExporter.monitorPgPromise(database, initOptions, register)
                    
                    // connect to Postgres *after* calling monitorPgPromise
                    

                    Configuration

                    The exporter can be configured via properties specified on the optional parameter of type PgPromiseExporterOptions.

                    PgPromiseExporterOptions

                    propertyDescriptionExampleSince
                    defaultLabelsDefault labels added to each metrics.{'foo':'bar', 'alice': 3}1.0.0

                    Event Handling

                    If there are already event handler registered for the events provided by pg-promise, the library will preserve the defined event handlers when the initOptions are initialized.

                    Grafana Dashboard

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

                    Here an example for pg-promise client metrics: Grafana:pg-promise client metrics

                    Here an example for pg-promise pool metrics: Grafana:pg-promise pool metrics

                    Here an example for pg-promise command metrics: Grafana:pg-promise command metrics

                    Here an example for pg-promise task metrics: Grafana:pg-promise task metrics

                    Here an example for pg-promise transaction metrics: Grafana:pg-promise transaction metrics

                    Changelog

                    The changes to project can be found in the changelog.

                    Compatibility

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

                    Exporter Versionpg-promise Versionprom-client version
                    ^1.0.0^11.5.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.

                    版本与发布记录

                    @christiangalsterer/pg-promise-prometheus-exporter 共发布 6 个版本,首次发布于 2024/02/08;过去 12 个月发布了 0 个版本。

                    版本发布日期距今
                    2.2.0latest2024/07/212 年前
                    2.1.12024/07/182 年前
                    2.1.02024/04/172 年前
                    2.0.02024/03/012 年前
                    1.1.02024/02/142 年前
                    1.0.02024/02/082 年前

                    关于 @christiangalsterer/pg-promise-prometheus-exporter 的常见问题

                    @christiangalsterer/pg-promise-prometheus-exporter 是什么?

                    A prometheus exporter for pg-promise

                    如何安装 @christiangalsterer/pg-promise-prometheus-exporter?

                    在项目目录运行 npm install @christiangalsterer/pg-promise-prometheus-exporter,或使用 pnpm add / yarn add / bun add。

                    @christiangalsterer/pg-promise-prometheus-exporter 支持 TypeScript 吗?

                    支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

                    @christiangalsterer/pg-promise-prometheus-exporter 支持 ESM 还是 CommonJS?

                    以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

                    @christiangalsterer/pg-promise-prometheus-exporter 需要什么版本的 Node.js?

                    package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

                    @christiangalsterer/pg-promise-prometheus-exporter 可以商用吗?

                    @christiangalsterer/pg-promise-prometheus-exporter 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

                    @christiangalsterer/pg-promise-prometheus-exporter 的下载量有多少?

                    根据 npm 官方下载统计,@christiangalsterer/pg-promise-prometheus-exporter 在 2026/10/10 – 2026/11/08 这 30 天内被下载 23,998 次,日均约 800 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

                    @christiangalsterer/pg-promise-prometheus-exporter 还在维护吗?

                    最新版本 2.2.0 发布于 2024/07/21(2 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2024/02/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。