Интеграция AWS API с Cloudwatch, возвращая пустые точки данных

В настоящее время я пытаюсь создать приложение Java, которое может вызывать и ссылаться на API Amazon AWS через AWS Java SDK. Мне удалось напрямую звонить в такие службы, как S3 и EC2, но когда я пытаюсь получить данные из Cloudwatch, я не могу получить никаких точек данных.

Я попытался настроить различные переменные (измерения, корректировки переменных времени), и я попытался протянуть данные через CLI. Когда я запрашиваю данные через CLI, я могу получить точки данных, но приложение Java не получает те же данные. Вот мой код CLI:

aws cloudwatch get-metric-statistics --metric-name BucketSizeBytes --namespace "AWS/S3" --start-time 2019-06-21T00:00:00Z --end-time 2019-06-22T00:00:00Z --period 3600 --statistics Average --unit Bytes --output json --region us-east-1 --dimensions Name=BucketName,Value=XXXXX Name=StorageType,Value=StandardStorage

Вот что я использую на стороне Java. Пространство имен переменной равно строке "AWS/S3", а переменная область имеет значение Region.US_EAST_1

Настройка клиента CloudWatch

 private CloudWatchClient cwClient = CloudWatchClient.builder().region(region).build();

Вызов данных

public S3 individualS3BucketSize(S3 s3) {
        Instant now = Instant.now();
        Dimension dimensions = Dimension.builder().name("BucketName").value("XXXXX").name("StorageType").value("StandardStorage").build();

        GetMetricStatisticsRequest request = GetMetricStatisticsRequest.builder().namespace(namespace).metricName("BucketSizeBytes")
            .statistics(Statistic.AVERAGE)
            .startTime(now.minus(Duration.ofDays(1))).endTime(now).period(3600)
            .dimensions(dimensions)
            .build();

        GetMetricStatisticsResponse response;

        response = cwClient.getMetricStatistics(request);
        System.out.println(response.toString());
}

Когда метод вызывается и метод print запускается, я получаю:

GetMetricStatisticsResponse(Label=BucketSizeBytes, Datapoints=[])

Любые мысли о том, почему он возвращается пустым в приложении Java, но не CLI?

1 ответ

Решение

Проблема с приведенным выше кодом находится внутри отрезка времени. Этот конкретный вызов (BucketSizeBytes) для Cloudwatch не возвращает данные, если только он не находится в одном окне времени из-за времени сообщения этой конкретной метрики. Если вы перейдете на веб-панель управления CloudWatch, никакие данные не будут извлечены, если временной диапазон не установлен на 1d.

Поскольку приведенный выше код имеет время начала и окончания в течение 24 часов друг от друга, никакие точки данных не появятся. Я пересмотрел код для небольших улучшений читабельности и правильной функциональности.

public S3 individualS3BucketSize(S3 s3) {
        Instant now = Instant.now();
        Instant earlier = now.minusSeconds(259201); //3 Days in the past in seconds
        Statistic stat = Statistic.AVERAGE;
        GetMetricStatisticsResponse response;

        Dimension dimensionsName = Dimension.builder().name("BucketName").value(XXXXX).build();
        Dimension dimensionsStorage = Dimension.builder().name("StorageType").value("StandardStorage").build();

        Collection<Dimension> dimensions = new ArrayList<>();
        dimensions.add(dimensionsName);
        dimensions.add(dimensionsStorage);

        GetMetricStatisticsRequest request = GetMetricStatisticsRequest.builder().namespace(namespace).metricName("BucketSizeBytes")
            .dimensions(dimensions)
            .startTime(earlier).endTime(now).period(3600)
            .unit("Bytes").statistics(stat).build();

        response = cwClient.getMetricStatistics(request);
        System.out.println(response.toString());
        return null;
    }
Другие вопросы по тегам