Commit Graph

62 Commits

Author SHA1 Message Date
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
Corin Lawson
3fd1c2c0eb Introduce histogram support (#435)
* Introduce histogram support

Prior to this change, the custom queries were restricted to counters and
gauges.

This change introduces a new ColumnUsage, namely HISTOGRAM, that expects
the column to contain an array of upper inclusive bounds for each
observation bucket in the emitted metric.  It also expects three more
columns to be present with the suffixes:
- `_bucket`, containing an array of cumulative counters for the
  observation buckets;
- `_sum`, the total sum of all observed values; and
- `_count`, the count of events that have been observed.

A flag has been added to the MetricMap struct to easily identify metrics
that should emit a histogram and the construction of a histogram metric
is aided by the pg.Array function and a new helper dbToUint64 function.

Finally, and example of usage is given in queries.yaml.

fixes #402

Signed-off-by: Corin Lawson <corin@responsight.com>

* Introduces tests for histogram support

Prior to this change, the histogram support was untested.

This change introduces a new integration test that reads a user query
containing a number of histogram metrics.  Also, additional checks have
been added to TestBooleanConversionToValueAndString to test dbToUint64.

Signed-off-by: Corin Lawson <corin@responsight.com>
2020-12-25 02:34:26 +11:00
Yann Hamon
b32e34a425 Do not panic on incorrect env (#457)
* do not panic when envs are set incorrectly

* do not panic when envs are set incorrectly - fix tests

Co-authored-by: Will Rouesnel <wrouesnel@wrouesnel.com>
2020-12-25 02:22:37 +11:00
Kevin Pullin
6354b0c7e7 Add query for 'pg_replication_slots' (#465)
The existing 'pg_stat_replication' data does not
include stats for inactive replication slots. This
commit adds a minimal amount of metrics from
'pg_replication_slots' to know if a slot is
active and its lag.

This is helpful to detect if an inactive slot
is causing the server to run out of storage due
to an inactive slot blocking WAL flushing.
2020-12-25 02:21:40 +11:00
Don Petersen
f870f9591b Don't ignore errors in parseUserQueries (#362)
Failures in parsing the user's queries are just being swallowed, which
makes troubleshooting YAML issues frustrating/impossible. I'm presuming
this was not intentional, since there is error handling code in the
function that calls this one, though it is unreachable as far as I can
tell without this change.

Co-authored-by: Will Rouesnel <wrouesnel@wrouesnel.com>
2020-02-25 22:56:49 +11:00
Ben Kochie
aeec47ead4 Add a build info metric (#323)
* Add a build info metric

Add a standard Prometheus build info metric to make monitoring rollouts
easier.

* Update prometheus vendoring.

* Fix build error

Fix missing bool in builtinMetricMaps.

Signed-off-by: Ben Kochie <superq@gmail.com>
2019-11-26 00:16:23 +11:00
Will Rouesnel
03013dea2e Re-add pg_stat_bgwriter metrics which were accidentally removed.
During a refactor the pg_stat_bgwriter metrics were accidentally removed
and not re-added by 34fdb69ee2.

This commit restores these metrics. Resolves #336.
2019-11-26 00:01:36 +11:00
Will Rouesnel
54a0cf0e63 Fix build error introduced by pg_archiver metrics bad merge.
2772da8dbe was missing an additional
parameter. This fixes the build.
2019-11-25 23:50:43 +11:00
Russ Garrett
2772da8dbe Export pg_stat_archiver metrics
These are useful for knowing if WAL archiving is working successfully.
2019-11-20 10:21:50 +11:00
sfalkon
c4508ff430 Refactoring: fix error 2019-11-20 10:18:20 +11:00
sfalkon
d74818ccac fix integration test 2019-11-20 10:18:20 +11:00
sfalkon
deac1c37db fix master database behavior 2019-11-20 10:18:20 +11:00
Benjamin P. Jung
9b13f5ec57 Add support for 'DATA_SOURCE_URI_FILE' envvar.
Closes #326 as is provides a viable solution to use a K8S init container
to fully contruct the PostgreSQL URI and 'hand it over' to the postgres_exporter
process.
2019-11-20 10:17:31 +11:00
Will Rouesnel
34fdb69ee2 Add support for optional namespace caching. (#319)
In the user queries.yml file, the created namespaces can now be optionally
cached by setting cache_seconds, which will prevent the query being re-run
within that timeframe if previous results are available.

Supercedes #211, credit to @SamSaffron for the original PR.
2019-11-01 00:17:31 +11:00
sfalkon
1385b4f658 Fix some autodiscovery problems (#314)
* Fix problem: If autodiscovery is enable exporter make connection twice to database from connetion string (exclude current database from SQL-query);

* Fix problem: don't get default metrics and settings if autodiscovery is enabled. Now you can use --disable-default-metrics and --disable-settings-metrics with --auto-discover-databases and
2019-10-31 22:09:30 +11:00
Alexis Sellier
ececfdeab7 Yaml parsing refactor (#299)
* Use struct instead of interface{} when parsing query user

* Use MappingOptions

* Split function to be more testable

* Rename function to parseUserQueries

* Start to add test about query parsing
2019-10-31 22:07:59 +11:00
Daniel Pintara
e1428a8330 Don't stop generating fingerprint while encountering value with "=" sign (#318) 2019-10-31 22:02:27 +11:00
Michael Kaye
d6f7ff1641 Expose pg_current_wal_lsn_bytes (#307) 2019-10-30 14:57:54 +11:00
Leo Antunes
e362f444aa [minor] fix landing page content-type (#305) 2019-10-30 14:57:12 +11:00
Dan Molik
043e68e067 Add retries to getServer() (#316)
Some backstory
==============

I was attempting to use postgres_exporter with the official Docker
container (https://hub.docker.com/_/postgres) In a Kubernetes
StatefulSet, with a side-car configuration, but found that I wasn't able
to connect even with sharing the Postgres Unix listening socket, between
both containers. After copying the container over to an Alpine base I
quickly found out that the postgres_exporter was actually starting
before the main Postres container had dropped the unix socket onto the
file system, a quick work around is to write a bash for loop checking
for the existence of a unix socket, however this would require
maintaining a container, besides other users may find retries useful on
startup.

Implementation
==============

All changes are made to the getServer function and variables are
local, I was unsure if it was worth adding command line switches but
this would allow for a more sophisticated backOff loop in the future.

Hope this help, and let me know if you would like me to changes
anything.
2019-10-30 14:54:18 +11:00
Dmitry Ulyanov
238f5c099a Fix pg_up metric returns last calculated value without explicit resetting (#291)
If exporter is scraped by multiple Prometheuses (as we do) - Collect() could be called concurrently. In result in some cases one of Prometheuses could get pg_up = 0, because it was explicitly set to zero on first Collect call.
2019-08-12 13:35:58 +10:00
Alexis Sellier
1ab8d2bbc8 Discover only databases that are not templates and allow connections (#297)
* Discover only databases that are not templates and allow connections

* Update readme
2019-08-12 11:40:58 +10:00
Alexis Sellier
c768e64548 Add --exclude-databases option (#298)
* Add exclude-databases option
* Update readme to explain --exclude-databases
* Add comments to ExcludeDatabases function and unexport Contains function
2019-08-12 11:25:01 +10:00
Richard Kojedzinszky
5f3a711ebd Use application_name column as a label 2019-07-12 10:26:33 +10:00
Will Rouesnel
0d7891de1a Fix smoke-tests to more reliably use pg_isready. 2019-07-03 23:14:20 +10:00
Arno Geurts
85c31524f6 Fix build for auto-discover-databases feature 2019-07-03 22:17:15 +10:00
Arno Geurts
4d96104c10 Add documentation for auto-discover-databases 2019-07-03 22:17:15 +10:00
Arno Geurts
58043f72da Add option to automatically discover database names 2019-07-03 22:17:15 +10:00
Miguel Hernandez
2b896ea2df add support for boolean data types as metrics
This is useful if your database uses true/false for state and want to make prometheus alerts based on that.
Before, booleans were not able to be parsed.  See issue #201
2019-07-01 08:44:56 +10:00
Alexey Palazhchenko
84a575f29f Group and sort imports. 2019-07-01 08:43:47 +10:00
SamB
0d4af2b71c No version metrics when default metrics disabled 2019-07-01 08:42:40 +10:00
Asher Foa
c9dc7a20a1 remove unsupported postgres versions 2019-06-15 19:38:40 +10:00
Anthony Regeda
734dc50972 fix-panic-on-shutdown-server added test for const values parsing 2019-03-02 12:34:59 +10:00
Anthony Regeda
725b163161 fix-panic-on-shutdown-server fix panic on shutdown server 2019-03-02 12:34:59 +10:00
Anthony Regeda
6d2cae6fa8 fix-param-env-key fix spelling of env parameter 2019-01-04 00:32:12 +11:00
Anthony Regeda
1d6a733ba2 multi-server-exporter multi server exporter is introduced 2018-12-19 01:46:45 +11:00
Will Rouesnel
93736366d9 Update goimport/gofmt of files. 2018-11-11 16:05:05 +11:00
Will Rouesnel
474a600842 Add Postgresql 11 to smoke-tests. 2018-11-11 15:40:09 +11:00
Will Rouesnel
414e9b13c2 Remove -x from smoke-test. 2018-11-11 15:39:51 +11:00
Will Rouesnel
99ff02c6a9 Fix the errors introduced into smoke-test from the refactor. 2018-11-11 15:34:33 +11:00
Will Rouesnel
43072ddaa7 Improve support code quality. 2018-11-11 15:07:07 +11:00
Greg Stark
5452a3aac6 Postgres commits 6e7baa3227 and b06d8e58b5 added a new unit suffix "B"
for memory parameters for bytes.
2018-11-03 01:23:01 +11:00
Robson Roberto Souza Peixoto
c225a1e194 Accept constantLabels as parameters
When you area monitoring server from cloud providers the exporter
IP/hostname is not the server IP, so add some constant labels is useful
on dashboards and alerts.

And is very important to use with `--disable-default-metrics` to add
info like `datname` and figure out the database name that you are
monitoring
2018-09-22 15:47:35 +10:00
tshohe
763159e1d2 add query for v9.1 (#203) 2018-07-17 01:18:08 +10:00
Marc Bachmann
05429f2d1c Fix comments about DATA_SOURCE_* environment variable usage 2018-06-19 23:05:16 +10:00