如何从AWS CloudWatch获取特定指标的数据?

3
    long offsetInMilliseconds = 1000 * 60 * 60;

    GetMetricStatisticsRequest request1 = new GetMetricStatisticsRequest()
            .withStartTime(new Date(new Date().getTime() - offsetInMilliseconds))
            .withNamespace("AWS/DynamoDB")
            .withPeriod(60*60)
            .withDimensions(new Dimension().withName("TableName").withValue("INT_LOG_TABLE").withName("Operation").withValue("PutItem"))
            .withMetricName("SuccessfulRequestLatency")
            .withStatistics("Average")
            .withEndTime(new Date());


    GetMetricStatisticsResult getMetricStatisticsResult = cw.getMetricStatistics(request1);

    double avgRequestLatency = 0;
    List dataPoint = getMetricStatisticsResult.getDatapoints();
    for (Object aDataPoint : dataPoint){
        Datapoint dp = (Datapoint) aDataPoint;
        avgRequestLatency = dp.getAverage();

    }

我尝试过像这样的方式。

我无法进入循环。

那是因为“getMetricStatisticsResult”是

“标签:SuccessfulRequestLatency,数据点:[]”

我怎么获取“DataPoints”?

提前致谢。

2个回答

1
这可能有很多原因导致没有返回任何数据点。
让我们从代码本身开始:
.withDimensions(new Dimension().withName("TableName").withValue("INT_LOG_TABLE").withName("Operation").withValue("PutItem"))

在这里,您仅创建了一个维度并两次设置名称和值,因此结果是具有 name="Operation"value="PutItem" 的维度。

请尝试改为以下操作:

.withDimensions(Arrays.asList(
    new Dimension().withName("TableName").withValue("INT_LOG_TABLE"),
    new Dimension().withName("Operation").withValue("PutItem")))

0
一个单维度可以使用单个对象设置。如果您需要创建两个维度,则需要创建两个维度对象。
尝试使用下面的代码,它可以工作:
long offsetInMilliseconds = 1000 * 60 * 60

Dimension dimension1 = new Dimension();
        dimension.setName("TableName");
        dimension.setValue("INT_LOG_TABLE");

Dimension dimension2 = new Dimension();
        dimension.setName("Operation");
        dimension.setValue("PutItem");
GetMetricStatisticsRequest request1 = new GetMetricStatisticsRequest()
        .withStartTime(new Date(new Date().getTime() - offsetInMilliseconds))
        .withNamespace("AWS/DynamoDB")
        .withPeriod(60*60)
        .withDimensions(dimension1, dimension2)
        .withMetricName("SuccessfulRequestLatency")
        .withStatistics("Average")
        .withEndTime(new Date());


GetMetricStatisticsResult getMetricStatisticsResult = cw.getMetricStatistics(request1);

double avgRequestLatency = 0;
List dataPoint = getMetricStatisticsResult.getDatapoints();
for (Object aDataPoint : dataPoint){
    Datapoint dp = (Datapoint) aDataPoint;
    avgRequestLatency = dp.getAverage();

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接