Commit Graph

517 Commits

Author SHA1 Message Date
Kaviraj
2d6996bc31 Add templating for job, instance and datasource
Signed-off-by: Kaviraj <kavirajkanagaraj@gmail.com>
2021-03-02 13:52:42 +01:00
Kaviraj
51225e1733 feat(mixin): Add grafana mixins support for postgres exporter
Signed-off-by: Kaviraj <kavirajkanagaraj@gmail.com>
2021-03-02 13:18:59 +01:00
Ben Kochie
21f27a8e03
Merge pull request #489 from prometheus-community/superq/remove_v
Remove v from changelog tags
2021-03-01 13:49:33 +01:00
Ben Kochie
2e8928828c
Remove v from changelog tags
Attempt 2 to fixup CHANGELOG for promu release.

Signed-off-by: Ben Kochie <superq@gmail.com>
2021-03-01 13:48:14 +01:00
Ben Kochie
5c386e31aa
Merge pull request #488 from prometheus-community/superq/fix_changelog_dates
Add dates to changelog entries
2021-03-01 13:26:33 +01:00
Ben Kochie
b0b1d7c8ba
Add dates to changelog entries
Fixes release publishing.

```bash
list=$(git tag | grep '^v' | sort -rV)
for v in $list ; do
  ts=$(git rev-list -n 1 --pretty --date=format:'%Y-%m-%d' $v | awk '$1 == "Date:" {print $2}')
  echo "## $v / $ts"
done
```

Signed-off-by: Ben Kochie <superq@gmail.com>
2021-03-01 12:07:55 +01:00
Ben Kochie
fc0202159c
Merge pull request #485 from prometheus-community/superq/0.9.0
Release 0.9.0
2021-03-01 11:16:14 +01:00
Ben Kochie
41b2fcd17f
Release 0.9.0
* Add CHANGELOG from existing tags.

First release under the Prometheus Community organisation.

* [CHANGE] Update build to use standard Prometheus promu/Dockerfile
* [ENHANCEMENT] Remove duplicate column in queries.yml #433
* [ENHANCEMENT] Add query for 'pg_replication_slots' #465
* [ENHANCEMENT] Allow a custom prefix for metric namespace #387
* [ENHANCEMENT] Improve PostgreSQL replication lag detection #395
* [ENHANCEMENT] Support connstring syntax when discovering databases #473
* [ENHANCEMENT] Detect SIReadLock locks in the pg_locks metric #421
* [BUGFIX] Fix pg_database_size_bytes metric in queries.yaml #357
* [BUGFIX] Don't ignore errors in parseUserQueries #362
* [BUGFIX] Fix queries.yaml for AWS RDS #370
* [BUGFIX] Recover when connection cannot be established at startup #415
* [BUGFIX] Don't retry if an error occurs #426
* [BUGFIX] Do not panic on incorrect env #457

Signed-off-by: Ben Kochie <superq@gmail.com>
2021-03-01 10:24:26 +01:00
Ben Kochie
f26ca65a80
Merge pull request #486 from prometheus-community/bjk/integration_tests
Add integration tests
2021-03-01 10:23:16 +01:00
Ben Kochie
33e61f3277
Add integration tests
Setup integration test matrix in CircleCI.
* Update README integration testing list.

Signed-off-by: Ben Kochie <superq@gmail.com>
2021-02-28 14:26:51 +01:00
Ben Kochie
c1ddbee8a5
Merge pull request #480 from prometheus-community/superq/community
Update for Prometheus Community
2021-02-26 14:59:00 +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
Jakov Sosic
f188bdef53
Improve PostgreSQL replication lag detection (#395)
In some cases master can show pg_last_xact_replay_timestamp() from past,
which can cause the exporter to show ever-growing value for the lag.

By checking if the instance is in recovery we can avoid reporting some
huge number for master instance.
2020-12-25 02:39:43 +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
Ben Kochie
3864bbc9cd
Update queries.yml (#433)
Update query for pg_stat_user_tables:
* Split up to multi-line format to make it easier to read.
* Remove duplicate of column `COALESCE(last_vacuum, '1970-01-01Z')`.

Signed-off-by: Ben Kochie <superq@gmail.com>
2020-12-25 02:26:58 +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
time_north
b12c8ab04e
Loongson CPU mips64le compiled through. (#418) 2020-08-28 10:04:02 +10:00
Robbie Trencheny
a7538454ed
Add pg_stat_statements view for non-superuser instructions (#398) 2020-08-28 10:03:23 +10:00
Mike
e2df41f43e
Fix queries for awsrds (#370)
* excluding rolname 'rdsadmin' in pg_stat_statements

* notes on using postgres-exporter with AWS:RDS
2020-04-10 01:16:22 +10:00
Lars Kellogg-Stedman
77d42931d0
update docs with examples of DATA_SOURCE_URI (#378)
this has a minor change to the wording and a couple of examples to demonstrate
the use of DATA_SOURCE_URI.

Closes #113
2020-04-10 01:14:24 +10:00
Denis Gubanov
aac3b0d919
ARM64 platform (#386) 2020-04-10 01:14:06 +10:00
Will Rouesnel
3ecfd46549
Switch to debian baseimage for docker (#376) 2020-02-26 00:49:30 +11:00
Daniel Binkhuysen
81f9c78d61
fix pg_database_size_bytes metric in queries.yaml (#357)
Co-authored-by: Will Rouesnel <wrouesnel@wrouesnel.com>
2020-02-25 22:57:22 +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
rafis
0c4425c4b3
Fix max connection alerts formulas (#368) 2020-02-25 22:56:18 +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
Vladimir N. Indik
75d542d496 Update "Flags" list in README (#331)
* Update README according --help output

* Update environment variables list in README
2019-11-20 10:19:34 +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
852ec5d9a1 Add example.alerts.yml
Adds a file containing some basic alerting rules for Prometheus as a launch point for more community contributions (or just when
I get around to coming up with some more I'm interested in).
2019-11-01 10:11:18 +11:00
Will Rouesnel
03457ae745
Stop including tools/src in source tarballs.
Fixes #239.
2019-11-01 01:18:05 +11:00
Will Rouesnel
c2866fd2e2
Fix README.md. 2019-11-01 01:04:08 +11:00
Will Rouesnel
bb0870c562 Rename pg_database_size to pg_database_size_bytes 2019-11-01 00:29:32 +11:00
Will Rouesnel
698fdb7873 Add pg_stat_statements to sample queries.yml file. 2019-11-01 00:29:32 +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