Fix queries for awsrds (#370)

* excluding rolname 'rdsadmin' in pg_stat_statements

* notes on using postgres-exporter with AWS:RDS
This commit is contained in:
Mike 2020-04-09 11:16:22 -04:00 committed by GitHub
parent 77d42931d0
commit e2df41f43e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 1 deletions

38
README-RDS.md Normal file
View File

@ -0,0 +1,38 @@
# Using Postgres-Exporter with AWS:RDS
### When using postgres-exporter with Amazon Web Services' RDS, the
rolname "rdsadmin" and datname "rdsadmin" must be excluded.
I had success running docker container 'wrouesnel/postgres_exporter:latest'
with queries.yaml as the PG_EXPORTER_EXTEND_QUERY_PATH. errors
mentioned in issue#335 appeared and I had to modify the
'pg_stat_statements' query with the following:
`WHERE t2.rolname != 'rdsadmin'`
Running postgres-exporter in a container like so:
```
DBNAME='postgres'
PGUSER='postgres'
PGPASS='psqlpasswd123'
PGHOST='name.blahblah.us-east-1.rds.amazonaws.com'
docker run --rm --detach \
--name "postgresql_exporter_rds" \
--publish 9187:9187 \
--volume=/etc/prometheus/postgresql-exporter/queries.yaml:/var/lib/postgresql/queries.yaml \
-e DATA_SOURCE_NAME="postgresql://${PGUSER}:${PGPASS}@${PGHOST}:5432/${DBNAME}?sslmode=disable" \
-e PG_EXPORTER_EXCLUDE_DATABASES=rdsadmin \
-e PG_EXPORTER_DISABLE_DEFAULT_METRICS=true \
-e PG_EXPORTER_DISABLE_SETTINGS_METRICS=true \
-e PG_EXPORTER_EXTEND_QUERY_PATH='/var/lib/postgresql/queries.yaml' \
wrouesnel/postgres_exporter
```
### Expected changes to RDS:
+ see stackoverflow notes
(https://stackoverflow.com/questions/43926499/amazon-postgres-rds-pg-stat-statements-not-loaded#43931885)
+ you must also use a specific RDS parameter_group that includes the following:
```
shared_preload_libraries = "pg_stat_statements,pg_hint_plan"
```
+ lastly, you must reboot the RDS instance.

View File

@ -134,7 +134,7 @@ pg_database:
description: "Disk space used by the database"
pg_stat_statements:
query: "SELECT t2.rolname, t3.datname, queryid, calls, total_time / 1000 as total_time_seconds, min_time / 1000 as min_time_seconds, max_time / 1000 as max_time_seconds, mean_time / 1000 as mean_time_seconds, stddev_time / 1000 as stddev_time_seconds, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time / 1000 as blk_read_time_seconds, blk_write_time / 1000 as blk_write_time_seconds FROM pg_stat_statements t1 join pg_roles t2 on (t1.userid=t2.oid) join pg_database t3 on (t1.dbid=t3.oid)"
query: "SELECT t2.rolname, t3.datname, queryid, calls, total_time / 1000 as total_time_seconds, min_time / 1000 as min_time_seconds, max_time / 1000 as max_time_seconds, mean_time / 1000 as mean_time_seconds, stddev_time / 1000 as stddev_time_seconds, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time / 1000 as blk_read_time_seconds, blk_write_time / 1000 as blk_write_time_seconds FROM pg_stat_statements t1 JOIN pg_roles t2 ON (t1.userid=t2.oid) JOIN pg_database t3 ON (t1.dbid=t3.oid) WHERE t2.rolname != 'rdsadmin'"
master: true
metrics:
- rolname: