A PostgreSQL metric exporter for Prometheus written in Rust
pg_exporter is designed with a selective metrics approach:
- Modular collectors – Expose only the metrics you actually need instead of collecting everything by default.
- Avoid unnecessary metrics – Prevent exposing large numbers of unused metrics to Prometheus, reducing load and keeping monitoring efficient.
- Customizable collectors – Tailor the metrics to your specific requirements while maintaining compatibility with the official postgres_exporter.
- Low memory footprint – Designed to minimize memory usage and maximize efficiency while scraping metrics.
Install via Cargo:
cargo install pg_exporter
Or download the latest release from the releases page.
Run the exporter and use the socket directory:
pg_exporter --dsn postgresql:///postgres?user=postgres_exporter
in pg_hba.conf you need to allow the user
postgres_exporterto connect, for example:
local all postgres_exporter trust
You can also specify a custom port, for example 9187:
pg_exporter --dsn postgresql://postgres_exporter@localhost:5432/postgres --port 9187
The following collectors are available:
--collector.defaultdefault--collector.activityactivity--collector.databasesdatabases--collector.vacuumvacuum--collector.lockslocks--collector.statstat
You can enable --colector.<name> or disable --no-collector.<name> For example,
to disable the vacuum collector:
pg_exporter --dsn postgresql:///postgres?user=postgres_exporter --no-collector.vacuum
This collectors are enabled by default:
defaultactivityvacuum
The project is structured as follows:
├── bin
├── cli
├── collectors
├── exporter
└── lib.rs
All the collectors are located in the collectors directory. Each collector is
in its own subdirectory, making it easy to manage and extend.
collectors
├── activity
│ ├── connections.rs
│ ├── mod.rs
│ └── wait.rs
├── config.rs
├── database
│ ├── catalog.rs
│ ├── mod.rs
│ ├── README.md
│ └── stats.rs
├── default
│ ├── mod.rs
│ ├── postmaster.rs
│ ├── settings.rs
│ └── version.rs
├── locks
│ ├── mod.rs
│ └── relations.rs
├── mod.rs <-- main file to register collectors
├── register_macro.rs
├── registry.rs
├── stat
│ ├── mod.rs
│ └── user_tables.rs
├── util.rs
└── vacuum
├── mod.rs
├── progress.rs
└── stats.rs
In mod.rs file inside the collectors directory, you can see how each
collector is registered. This modular approach allows for easy addition or
removal of collectors as needed.
Each collector can then be extended with more specific metrics. For example,
the vacuum collector has two files: progress.rs and stats.rs, this allows
for better organization and separation of concerns within the collector and
better testability. (or that is the plan).
This project is a work in progress. Your feedback, suggestions, and contributions are always welcome!