Starting with version 1.9.0, pgmetrics
can fetch metrics exposed by
AWS RDS instances via AWS CloudWatch.
Both PostgreSQL and
Aurora engines of AWS RDS are supported.
Currently, pgmetrics
can collect:
pgmetrics
collects these metrics using the AWS CloudWatch API
for RDS Metrics and the AWS CloudWatch Logs API
for Enhanced Monitoring metrics.
To collect the information, pgmetrics
has to know the
Database Instance Identifier
of your database. This identifier, chosen by you, uniquely identifies the
database instance within a region for your AWS account. This identifier has
to be passed to pgmetrics
using the command-line option --aws-rds-dbid
.
The AWS region and credential information must be passed via environment variables or other standard mechanisms, see the next section.
Here is an example invocation, directly using hard-coded credentials for the database:
PGPASSWORD=mysecretpass ./pgmetrics -h database-1.abcdefghijkl.us-east-1.rds.amazonaws.com \
-U postgres --aws-rds-dbid=database-1 -w -fjson bench
In this case, the database identifier is “database-1”, the user is “postgres”, the database name is “bench”, the hostname (set by AWS) is “database-1.abcdefghijkl.us-east-1.rds.amazonaws.com” and the password is “mysecretpass”. This produces a JSON output similar to the following:
{
"meta": {
"version": "1.8",
"at": 1586671270,
"collected_dbs": [
"bench"
],
"local": false,
"user_agent": "pgmetrics/v1.9.0"
},
"start_time": 1584703107,
"system_identifier": "6776375427100147225",
"checkpoint_lsn": "66/74000028",
"prior_lsn": "",
"redo_lsn": "66/74000028",
"timeline_id": 1,
"next_xid": 7242,
"oldest_xid": 562,
"oldest_active_xid": 0,
"checkpoint_time": 1586671105,
"wal_flush_lsn": "66/74000650",
[... elided ...]
"rds": {
"basic": {
"CPUUtilization": 3.83333333333818,
"DatabaseConnections": 0,
"DiskQueueDepth": 0.00006666555557407377,
"FreeStorageSpace": 18220265472,
"FreeableMemory": 477421568,
"MaximumUsedTransactionIDs": 6681,
"NetworkReceiveThroughput": 592.1401309978168,
"NetworkTransmitThroughput": 3428.526191230146,
"OldestReplicationSlotLag": -1,
"ReadIOPS": 0,
"ReadLatency": 0,
"ReadThroughput": 0,
"ReplicationSlotDiskUsage": 4096,
"SwapUsage": 0,
"TransactionLogsDiskUsage": 2281709568,
"TransactionLogsGeneration": 0,
"WriteIOPS": 1.2666455559074015,
"WriteLatency": 0.000014652014652014653,
"WriteThroughput": 18636.1787940402
}
},
[... elided ...]
pgmetrics
will detect if Enhanced Monitoring is enabled. If it is, it will
also collect additional information, which will look like this:
"rds": {
"basic": {
[... elided ...]
},
"enhanced": {
"cpuUtilization": {
"guest": 0,
"idle": 95.8,
"irq": 0,
"nice": 0.2,
"steal": 0.1,
"system": 1.5,
"total": 4.3,
"user": 2.2,
"wait": 0.3
},
"diskIO": [
{
"avgQueueLen": 0.33,
"avgReqSz": 172.05,
"await": 25.46,
"device": "rdsdev",
"readIOsPS": 0,
"readKb": 0,
"readKbPS": 0,
"rrqmPS": 0,
"tps": 12.9,
"util": 0.23,
"writeIOsPS": 12.9,
"writeKb": 66584,
"writeKbPS": 1109.55,
"wrqmPS": 0
},
{
"avgQueueLen": 0,
"avgReqSz": 18.39,
"await": 0.23,
"device": "filesystem",
"readIOsPS": 1,
"readKb": 464,
"readKbPS": 7.73,
"rrqmPS": 0,
"tps": 4.9,
"util": 0.11,
"writeIOsPS": 3.9,
"writeKb": 2240,
"writeKbPS": 37.33,
"wrqmPS": 2.67
}
],
"engine": "POSTGRES",
[... elided ...]
pgmetrics
also requires the AWS region name as well as the credentials to
invoke the AWS APIs to fetch the metrics.These can be supplied in various
quasi-standard ways. As a best practice, AWS recommends that you specify
credentials in the following order:
~/.aws/credentials
)You can find more detailed information here.
Usage of the AWS CloudWatch and AWS CloudWatch Logs APIs will incur costs, based on their pricing plans. This means that invoking pgmetrics to collect these metrics will incur charges on your AWS account.