Skip to content

📊 Exposes Prometheus metrics for go-pg database client stats.

License

Notifications You must be signed in to change notification settings

hypnoglow/go-pg-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-pg-monitor

Go Reference Maintenance main Go Report Card

Provides Prometheus metrics for go-pg database client.

Example Grafana dashboards:

grafana

Status

This package is now stable.

As the go-pg is in a maintenance mode, it is unlikely that new features will be introduced in this package. Fixing bugs and security issues will continue.

Usage

  1. Your application should already be using go-pg and exporting Prometheus metrics.

  2. Add the module to your project:

    go get github.com/hypnoglow/go-pg-monitor

    Also add the submodule with the go-pg version you use:

    go get github.com/hypnoglow/go-pg-monitor/gopgv10
  3. Add monitor to your application entrypoint:

    // Create monitor based on your *pg.DB
    mon := monitor.NewMonitor(
    	gopgv10.NewObserver(db),
    	monitor.NewMetrics(),
    )
    
    // Call this on application startup. 
    mon.Open()
    
    // Call this on application shutdown.
    mon.Close()

See example for details.

Exported metrics

  • go_pg_pool_hits - (Gauge) Number of times free connection was found in the pool
  • go_pg_pool_misses - (Gauge) Number of times free connection was NOT found in the pool
  • go_pg_pool_timeouts - (Gauge) Number of times a wait timeout occurred
  • go_pg_pool_total_connections - (Gauge) Number of total connections in the pool
  • go_pg_pool_idle_connections - (Gauge) Number of idle connections in the pool
  • go_pg_pool_stale_connections - (Gauge) Number of stale connections removed from the pool

Reference Grafana Dashboards

You can find two example Grafana dashboards in grafana/ directory. One may be suitable when you use only one database object in your application code, and the other when you use different objects (pools) for different parts of the application.

Note that your dashboard may be different if you use metric namespace, different k8s labels, etc. So these dashboards are provided only as a starting point for making your own.