Commit Graph

106 Commits

Author SHA1 Message Date
Joe Adams
36773e06dc
Merge pull request #673 from cezmunsta/pg_stat_activity-enhancements
Capture usename and application_name for pg_stat_activity
2023-02-12 15:08:39 -05:00
Joe Adams
94a89b0166
Merge pull request #734 from kjbass/master
Close DB connection after probe completes.
2023-02-12 14:52:50 -05:00
Ben Kochie
0e4506e3f4
Merge pull request #746 from prometheus-community/bjk/exporter-toolkit-bump
Update exporter-toolkit
2023-01-25 09:31:55 +01:00
SuperQ
b1e72a981b
go fmt
Signed-off-by: SuperQ <superq@gmail.com>
2023-01-24 18:18:17 +01:00
SuperQ
fc264d0ab0
Update exporter-toolkit
Update to the latest exporter-toolkit
* Enables multi-listener and systemd socket activation.
* Bump Go to 1.19.
* Remove `PG_EXPORTER_WEB_LISTEN_ADDRESS` env var because this is now a
  repeatable flag.

Signed-off-by: SuperQ <superq@gmail.com>
2023-01-24 17:57:31 +01:00
Oleksandr Mysyura
8ff0e5aa70 New unit value 64kB
Signed-off-by: Oleksandr Mysyura <olexandr.mysyura@pragmaticplay.com>
2023-01-04 12:14:29 +02:00
Kurtis Bass
76223cdda8 probe: clean-up database connection after probe to prevent connection leak
Signed-off-by: Kurtis Bass <kurtis.bass@hinge.co>
2022-12-14 14:30:13 -05:00
Julien Pivotto
5fcceb4105 Set gauge to 1 when collector is successful
Signed-off-by: Julien Pivotto <roidelapluie@o11y.eu>
2022-11-24 14:02:37 +01:00
Joe Adams
34d3605788
Merge pull request #683 from preved911/fix/extend_probe_path_metrics
Extending /probe path metrics
2022-10-31 20:51:30 -04:00
Sergey Morozov
14c9d0370f
4kB size added for postgres with 4kB block_size
Signed-off-by: Sergey Morozov <38383507+ken3122@users.noreply.github.com>
2022-10-09 01:50:45 +06:00
cezmunsta
d9ac4be429
Fixed formatting
Signed-off-by: cezmunsta <github@incoming-email.co.uk>
2022-10-04 13:18:22 +01:00
cezmunsta
6937685907
Capture usename and application_name for pg_stat_activity
It is necessary to be able to exclude backups from long-running
transaction alerts, as they are to be expected. With the current
pg_stat_activity metric there is no ability to filter out
specific users or application names.

Resolves #668

Signed-off-by: cezmunsta <github@incoming-email.co.uk>
2022-10-04 13:18:22 +01:00
Ildar Valiullin
ad8b5608f8 extended /probe path metrics
Signed-off-by: Ildar Valiullin <preved.911@gmail.com>
2022-09-03 14:33:13 +03:00
Joe Adams
7ffba684de
Update multi-target handler to use new DSN type
- Moves new dsn type to config.DSN. This will prevent circular dependencies.
- Change DSN.query to be url.Values. This allows the multi-target functionality to merge values without re-parsing the query string
- Change NewProbeCollector to use the new config.DSN type
- Add DSN.GetConnectionString to return a string formatted for the sql driver to use during connection

Signed-off-by: Joe Adams <github@joeadams.io>
2022-09-02 10:32:44 -04:00
Yoan Blanc
9ae347519b
fix: typo
Signed-off-by: Yoan Blanc <yoan@dosimple.ch>
2022-08-30 06:48:06 +02:00
SuperQ
d86dd06ffe
Release 0.12.0-rc.0
BREAKING CHANGES:

This release changes support for multiple postgres servers to use the
multi-target exporter pattern. This makes it much easier to monitor multiple
PostgreSQL servers from a single exporter by passing the target via URL
params. See the Multi-Target Support section of the README.

* [CHANGE] Add multi-target support #618
* [BUGFIX] Add dsn type for handling datasources #678

Signed-off-by: SuperQ <superq@gmail.com>
2022-08-26 16:49:54 +02:00
Joe Adams
de9d21df6a
Add dsn type for handling datasources
dsn is designed to replace the other uses of dsn as a string in the long term. dsn is designed to be safe to log, properly redacting passwords. The goal is eventually always parse datasource information into a dsn type object which can safely be passed around and logged without worrying about wrapping calls in a redaction function (today this function is loggableDSN().

This should solve the root issue in #648, #677, and #643, although the full fix will require more changes to update all code references over to use the dsn type.

Signed-off-by: Joe Adams <github@joeadams.io>
2022-08-24 22:07:37 -04:00
Joe Adams
72430f8d2a Update cmd/postgres_exporter/main.go
Signed-off-by: Joe Adams <github@joeadams.io>
2022-07-28 10:21:02 -04:00
Joe Adams
8f8d2208f5 cleanup and README
Signed-off-by: Joe Adams <github@joeadams.io>

Co-authored-by: Ben Kochie <superq@gmail.com>
2022-07-28 10:19:32 -04:00
Joe Adams
cc751b7966 Add config module
The config module supports adding configuration to the exporter via a config file. This supports adding authentication details in a config file so that /probe requests can specify authentication for endpoints

Signed-off-by: Joe Adams <github@joeadams.io>
2022-07-28 10:19:32 -04:00
Joe Adams
713461df98 WIP: Add prelim multi-target support
- Remove multi server support from new collector package
- Add http handler for multi-target support

Signed-off-by: Joe Adams <github@joeadams.io>
2022-07-28 10:19:32 -04:00
SuperQ
81c4933986
Update build
* Update to Go 1.18.
* Update minimum Go version to 1.17.
* Update Go modules for 1.17 format.
* Bump Go modules
* Enable dependabot.
* Update Prometheus common files.
* Fixup yamllint.

Signed-off-by: SuperQ <superq@gmail.com>
2022-05-25 11:27:42 +02:00
Angus Dippenaar
be30859417 Remove unit from setting because of Aurora
Signed-off-by: Angus Dippenaar <angusdippenaar@gmail.com>
2022-03-03 15:55:35 +01:00
Joe Adams
9704b9fb2e
Clean up autoDiscoverDatabases in the new collector
Signed-off-by: Joe Adams <github@joeadams.io>
2022-02-25 08:11:22 -05:00
Joe Adams
27d23d02ef
refactor pg_stat_bgwriter metrics into standalone collector
This moves the metrics that are queried from pg_stat_bgwriter into a dedicated collector instead of dynamically generating queries and metrics from a map. It renames some metrics including adding the `_total` suffix on all of the counters to match prometheus standards. This implementation uses QueryRowContext to allow for later addition of context for cancellation. From the Postgres documentation, it states that there is one line per WAL sender process, but it is unclear how to differentiate between them in any meaningful way. When querying the table, there is no column to identify the row, only metrics about bgwriter.

Signed-off-by: Joe Adams <github@joeadams.io>
2022-02-22 21:46:43 -05:00
Joe Adams
c3b0206369
Add collector interface
Uses node_exporter style collector registration

Signed-off-by: Joe Adams <github@joeadams.io>
2022-02-14 21:12:27 -05:00
Joe Adams
21a19ed252
Add pg_database collector
Converts the pg_database metrics from queries.yaml to a built in collector. This is enabled by default because it is not likely to be a performance problem and likely very useful data.

Signed-off-by: Joe Adams <github@joeadams.io>
2022-02-09 21:28:40 -05:00
Joe Adams
3880df4f64
Merge pull request #587 from credativ/azure-ff-fix
Avoid parsing error from bogus Azure Flexible Server custom GUC
2022-02-09 15:30:32 -05:00
pitan
adaa0b5e32
Merge branch 'prometheus-community:master' into fix/pg_stat_archiver-version 2022-01-17 17:04:00 +09:00
Daniel Swarbrick
99f0b4c63c
Fix misspelling of PostgreSQL
Signed-off-by: Daniel Swarbrick <daniel.swarbrick@gmail.com>
2022-01-16 19:55:11 +01:00
SuperQ
fcb2535aff
Release 0.10.1
* [BUGFIX] Fix broken log-level for values other than debug. #560

Signed-off-by: SuperQ <superq@gmail.com>
2022-01-14 17:27:06 +01:00
t-inoue
21c9b0d80d change version for pg_stat_archiver
Signed-off-by: t-inoue <t-inoue@sakura.ad.jp>
2022-01-11 13:48:48 +09:00
Michael Banck
5d6e42935d Avoid parsing error from bogus Azure Flexible Server custom GUC
Signed-off-by: Michael Banck <michael.banck@credativ.de>
2021-11-20 19:37:29 +01:00
Harkishen Singh
c1ab341279 Fix broken log-level for values other than debug.
Signed-off-by: Harkishen Singh <harkishensingh@hotmail.com>
2021-07-14 16:19:00 +05:30
Joe Adams
08fd458df0
Update dependencies and fix tests
Signed-off-by: Joe Adams <github@joeadams.io>
2021-07-07 09:52:56 -04:00
Joe Adams
bc981e66c3 Refactor code into logical files
Moves code into more manageable, logical files to group behavior together. This should help improve a developer's ability to navigate the code.

Signed-off-by: Joe Adams <github@joeadams.io>
2021-07-01 16:49:08 -04:00
Dmitry F
29f6fa1891 Fix replication_slot query all supported versions
Signed-off-by: Филатов Дмитрий <d.filatov@2gis.ru>
2021-06-01 18:59:35 +07:00
Paul van der Linden
bc97291103 basic integration test
Signed-off-by: Paul van der Linden <mail@paultjuh.org>
2021-04-19 15:20:53 +02:00
Paul van der Linden
ffa6782e41 fix parsing include databases
Signed-off-by: Paul van der Linden <mail@paultjuh.org>
2021-04-17 12:05:28 +02:00
Pavel Sapezhko
2850ac800a
Add ability to set allow DBs list
Signed-off-by: Pavel Sapezhko <me@weastur.com>
2021-03-11 16:43:13 +03:00
Ben Kochie
a7e88ab430
Fix version flag
Use Prometheus common/version to print --version output.
* Add `-h` short help flag.

Fixes: https://github.com/prometheus-community/postgres_exporter/issues/492

Signed-off-by: Ben Kochie <superq@gmail.com>
2021-03-03 13:51:44 +01:00
Julien Pivotto
be790e12ff Switch to go-kit log and enable TLS/basic auth
Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
2021-03-02 15:31:55 +01:00
Ben Kochie
b67b69acd3
Update for Prometheus Community
Add standard Prometheus build setup
* CircleCI config
* Makefile
* Go modules
* Golang-CI Lint
* promu config
* Remove /vendor
* Remove mage build
* Update READMEs

https://github.com/prometheus-community/postgres_exporter/issues/478

Signed-off-by: Ben Kochie <superq@gmail.com>
2021-02-23 10:51:33 +01:00
Neel Patel
8531abac46
User defined configuration to run the query for different database server version from single yml file (#428)
* Run the query for specific database version if provided from yml file.
By default query will run on all the databases if "runonserver" is not provided.

If user want the query to be run on multiple database versions, use below string.
  runonserver: "9.5, 9.6"

Example yml file as below. ( e.g. below query will run only on database version 9.5 )

pg_replication:
  query: "SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp())) as lag"
  master: true
  runonserver: "9.5"
  metrics:
    - lag:
        usage: "GAUGE"
        description: "Replication lag behind master in seconds"

* Fixed the below review comments given by Ashesh Vashi

    Instead of having db version string from yml file, user can define the range of
    database server version where query is to be executed.

    If user want to run the query on database version greater than 10.0.0, use below format.
      runonserver: ">=10.0.0"

      Below are the example of db version range user can defined in yml file.
            <=10.1.0
            >=12.1.0
            =11.0.0
            <9.6.0 || >=11.0.0

* Remove the call from unused places where 'runOnServer' is not required.
Only Server type hold that value.

* Fix compilation issues.

* Fix the issue with Debugln to print the database server version
2021-02-18 01:04:12 +11:00
Ollie Charles
301976c218
Detect SIReadLock locks in the pg_locks metric (#421)
Co-authored-by: Will Rouesnel <wrouesnel@wrouesnel.com>
2021-01-31 22:22:18 +11:00
Ivan Shapovalov
1ba1100a72
Support connstring syntax when discovering databases (#473)
* Support connstring syntax when discovering databases

Support connstring DSNs (`host=... user=... password=... dbname=...`) in
addition to URIs (`postgresql://user:pass@host/dbname`) for purposes of
database discovery.

Connstring syntax is needed to support accessing PostgreSQL via Unix
domain sockets (`host=/run/postgres`), which is not really possible with
URI syntax.

* Appease gometalinter, don't shadow namespace
2021-01-31 22:21:38 +11:00
Yann Soubeyrand
aea6fae7d6
Recover when connection cannot be established straight at startup (#415)
When the connection to the PostgreSQL instance cannot be established straight
at startup, a race condition can happen when autoDiscoverDatabases is true. If
discoverDatabaseDSNs fails, no dsn is set as the master database, and, if
scrapeDSN succeeds, checkMapVersions will have omitted the default metrics in
the server metric map. The metric map won't be updated unless the version
returned by the PostgreSQL instance changes. With this patch, scrapeDSN won't
be run unless discoverDatabaseDSNs succeeded and thus the race condition is
eliminated.

Signed-off-by: Yann Soubeyrand <yann.soubeyrand@camptocamp.com>
2020-12-25 02:41:05 +11:00
alexey-gavrilov-flant
bfd0707e37
Fixed "Scrape Duration" if psql down (#426)
Co-authored-by: Will Rouesnel <wrouesnel@wrouesnel.com>
2020-12-25 02:39:07 +11:00
Yann Soubeyrand
8c27e97b77
Do not try to return metric descriptors in Describe (#416)
Since we cannot know in advance the metrics which the exporter will generate,
the workaround is to run a Collect and return the metric descriptors. This is
problematic when the connection to the PostgreSQL instance cannot be
established straight from the start. This patch makes Describe return no
descriptors, effectively turning the collector in an unchecked one, which we're
in the typical use case here:
https://pkg.go.dev/github.com/prometheus/client_golang/prometheus?tab=doc#hdr-Custom_Collectors_and_constant_Metrics.

Signed-off-by: Yann Soubeyrand <yann.soubeyrand@camptocamp.com>
2020-12-25 02:37:31 +11:00
Ajay Bhat
c55a3b3c5b
Fixes (#364) (#387)
Have a custom prefix for each of the default metrics created by postgres_exporter

Co-authored-by: Will Rouesnel <wrouesnel@wrouesnel.com>
2020-12-25 02:36:18 +11:00