1

いくつかのクラウドウォッチ メトリックを返す単純なアプリケーションを実行しようとしています。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());
    }
 }
4

2 に答える 2

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());

データを返し始めます。恥ずかしいことに、私は日付の範囲を間違って使用しており、実際には月 = 8 が 9 月であるのに、月 = 9 が 9 月であると想定していました。Dynamo は、無効な範囲の例外をスローしません。

于 2012-09-18T15:38:39.643 に答える
1

コメントで提案しましたが、これには CloudWatch アラームを利用できます。独自の監視ツールを実行する手間が省けます。

アラームに「アクション」を付けることができます。アクションの 1 つがSNS topic. SNS次に、HTTP(S) 呼び出しのトリガー、JSON の送信、フィードなどに使用できますSQS

これはセットアップに少し手間がかかるかもしれませんが、メンテナンスがはるかに簡単になると思います. ところで、無料利用枠に簡単に収まります。

于 2012-09-18T14:54:16.857 に答える