我最初创建了一个大小为 65GB 的 RDS postgres 实例。 是否可以使用任何 postgres 查询来获取可用空间。
如果没有,我怎样才能达到同样的效果?
提前谢谢您。
有几种方法可以做到这一点
转到 RDS 控制台并选择您的数据库所在的区域。单击 显示监控按钮并选择您的数据库实例。将会有一个图表(如下图所示)显示可用存储空间。它可能在图表的第二页或第三页上。
这已记录在AWS RDS 文档中。
或者,您可以使用 AWS API 从 cloudwatch 获取信息。
我将展示如何使用 AWS CLI 执行此操作。
这假设您已设置 AWS CLI 凭证。我在环境变量中导出
AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
,但是有 有多种方法可以配置 CLI(或 SDKS)。
REGION="eu-west-1"
START="$(date -u -d '5 minutes ago' '+%Y-%m-%dT%T')"
END="$(date -u '+%Y-%m-%dT%T')"
INSTANCE_NAME="tstirldbopgs001"
AWS_DEFAULT_REGION="$REGION" aws cloudwatch get-metric-statistics \
--namespace AWS/RDS --metric-name FreeStorageSpace \
--start-time $START --end-time $END --period 300 \
--statistics Average \
--dimensions "Name=DBInstanceIdentifier, Value=${INSTANCE_NAME}"
{
"Label": "FreeStorageSpace",
"Datapoints": [
{
"Timestamp": "2017-11-16T14:01:00Z",
"Average": 95406264320.0,
"Unit": "Bytes"
}
]
}
以下是如何使用 Cloudwatch API 通过 Java AWS SDK 获取相同数据的基本示例。
build.gradle
内容apply plugin: 'java'
apply plugin: 'application'
sourceCompatibility = 1.8
repositories {
jcenter()
}
dependencies {
compile 'com.amazonaws:aws-java-sdk-cloudwatch:1.11.232'
}
mainClassName = 'GetRDSInfo'
再次,我依靠凭证链来获取 AWS API 凭证(我在我的环境中设置它们)。您可以更改对构建器的调用来更改此行为(请参阅使用 AWS 凭证文档)。
import java.util.Calendar;
import java.util.Date;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsRequest;
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsResult;
import com.amazonaws.services.cloudwatch.model.StandardUnit;
import com.amazonaws.services.cloudwatch.model.Dimension;
import com.amazonaws.services.cloudwatch.model.Datapoint;
public class GetRDSInfo {
public static void main(String[] args) {
final long GIGABYTE = 1024L * 1024L * 1024L;
// calculate our endTime as now and startTime as 5 minutes ago.
Calendar cal = Calendar.getInstance();
Date endTime = cal.getTime();
cal.add(Calendar.MINUTE, -5);
Date startTime = cal.getTime();
String dbIdentifier = "tstirldbopgs001";
Regions region = Regions.EU_WEST_1;
Dimension dim = new Dimension()
.withName("DBInstanceIdentifier")
.withValue(dbIdentifier);
final AmazonCloudWatch cw = AmazonCloudWatchClientBuilder.standard()
.withRegion(region)
.build();
GetMetricStatisticsRequest req = new GetMetricStatisticsRequest()
.withNamespace("AWS/RDS")
.withMetricName("FreeStorageSpace")
.withStatistics("Average")
.withStartTime(startTime)
.withEndTime(endTime)
.withDimensions(dim)
.withPeriod(300);
GetMetricStatisticsResult res = cw.getMetricStatistics(req);
for (Datapoint dp : res.getDatapoints()) {
// We requested only the average free space over the last 5 minutes
// so we only have one datapoint
double freespaceGigs = dp.getAverage() / GIGABYTE;
System.out.println(String.format("Free Space: %.2f GB", freespaceGigs));
}
}
}
> gradle run
> Task :run
Free Space: 88.85 GB
BUILD SUCCESSFUL in 7s
使用AWS 管理控制台的方法已更改。
现在你必须走了: