我一直试图让一个简单的应用程序返回一些返回一些cloudwatch指标。我已经尝试了3个不同的Web示例,但没有一个返回任何数据。我可以在AWS控制台上看到数据。也许有人可以发现我的错误或指向一个知道可行的简单例子?
我想要实现的主要是:我想知道我们的应用程序何时接近其dynamoDB读/写限制,然后增加它们。我假设我需要写一些民意调查询问统计数据,如果达到80%的容量,则增加限制。
private static void findCloudWatchData() throws InterruptedException {
AmazonCloudWatchClient cloudWatch = new AmazonCloudWatchClient(new BasicAWSCredentials(key, secret));
cloudWatch.setEndpoint("monitoring.eu-west-1.amazonaws.com");
GetMetricStatisticsRequest getMetricStatisticsRequest = new GetMetricStatisticsRequest();
GregorianCalendar g = new GregorianCalendar(2012, 9, 17, 12, 0);
getMetricStatisticsRequest.setStartTime(g.getTime());
g.add(Calendar.DAY_OF_MONTH, 2);
getMetricStatisticsRequest.setEndTime(g.getTime());
getMetricStatisticsRequest.setNamespace("AWS/DynamoDB");
getMetricStatisticsRequest.setMetricName("SuccessfulRequestLatency");
getMetricStatisticsRequest.setPeriod(5*60);
Dimension tableDimension = new Dimension();
tableDimension.setName("TableName");
tableDimension.setValue("personalisation.user_favourite-int");
Dimension operationDimension = new Dimension();
operationDimension.setName("Operation");
operationDimension.setValue("Query");
getMetricStatisticsRequest.setDimensions(Arrays.asList(tableDimension, operationDimension));
Collection<String> statistics = new ArrayList<String>();
statistics.add("Average");
getMetricStatisticsRequest.setStatistics(statistics);
getMetricStatisticsRequest.setUnit(StandardUnit.Count);
//results
GetMetricStatisticsResult result = cloudWatch.getMetricStatistics(getMetricStatisticsRequest);
System.err.println(result.getDatapoints().size()); //this returns 0 always
for (Datapoint p : result.getDatapoints()) {
System.out.println(p.getTimestamp() + " " + p.getAverage());
}
}
答案 0 :(得分:4)
我发现了问题。如果我将“SuccessfulRequestLatency”更改为:
getMetricStatisticsRequest.setMetricName("ConsumedWriteCapacityUnits");
或者 getMetricStatisticsRequest.setMetricName( “ConsumedReadCapacityUnits”);
并设置如下日期:
now.add(Calendar.MINUTE, -5);
getMetricStatisticsRequest.setEndTime(now.getTime());
now.add(Calendar.DAY_OF_MONTH, -1);
getMetricStatisticsRequest.setStartTime(now.getTime());
它开始返回数据。令人尴尬的是,我错误地使用了日期范围,假设月份= 9是9月,而实际上月份= 8是9月份。 Dynamo不会抛出任何无效的范围异常。
答案 1 :(得分:1)
我在评论中建议您可以依赖CloudWatch警报。它将避免您运行自己的监视工具的痛苦。
您可以将“actions”附加到闹钟。其中一项行动是SNS topic
。 SNS
反过来可用于触发HTTP(S)调用,发送JSON,提要SQS
,...
这可能需要更多的工作来设置,但我相信它会更容易维护。顺便说一句,你很容易适应免费的Tier。