Получение показателя использования ЦП при запуске экземпляра aws через Java-клиент - PullRequest
0 голосов
/ 24 сентября 2019

Я запустил новый экземпляр из созданного мной AMI.Затем я включил наблюдение за облаком в этом экземпляре.

Я хочу, чтобы загрузка ЦП этого конкретного экземпляра осуществлялась через клиент Java.Я просто хочу получить эту информацию, просто пройдя учетные данные и instanceid.Я прилагаю следующий код, который я написал.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить показатель загрузки ЦП.Я что-то здесь упускаю?

import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import org.apache.http.impl.client.BasicCredentialsProvider;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.Datapoint;
import com.amazonaws.services.cloudwatch.model.Dimension;
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsRequest;
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsResult;
import com.amazonaws.services.cloudwatch.model.ListMetricsResult;

import software.amazon.awssdk.services.cloudwatch.model.Metric;

/**
 * Lists CloudWatch metrics
 */

public class AwsCloudWatchMetrics {

    final static String InstanceId = "i-xxxxxxxxxxxxx";

    public static void main(String[] args) {

        MonitorCPU();

    }
    private static void MonitorCPU() {

        // AmazonCloudWatchClient cw = new AmazonCloudWatchClient(credentials);

        AWSCredentialsProvider awsp = new AWSCredentialsProvider() {

            @Override
            public void refresh() {
                // TODO Auto-generated method stub

            }

            @Override
            public AWSCredentials getCredentials() {
                AWSCredentials awsCredentials = null;
                try {
                    awsCredentials = new AWSCredentials() {

                        public String getAWSSecretKey() {
                            return "awssecretkeygoeshere";
                        }

                        public String getAWSAccessKeyId() {
                            return "awsaccesskeygoeshere";
                        }
                    };
                } catch (Exception e) {
                    throw new AmazonClientException(
                            "can not load your aws credentials, please check your credentials !!", e);
                }
                return awsCredentials;
            }
        };
        try{

            AmazonCloudWatch cw =  AmazonCloudWatchClientBuilder.standard()
                    .withCredentials(awsp).withRegion("us-east-2").build();
            long offsetInMilliseconds = 1000 * 60 * 60 * 24 ;

            Dimension dimension = new Dimension()
                    .withName("InstanceId")
                    .withValue("i-xxxxxxxxxxxxx");

            GetMetricStatisticsRequest request = new GetMetricStatisticsRequest()
                    .withStartTime(new Date(new Date().getTime() - offsetInMilliseconds)).withNamespace("AWS/EC2")
                    .withPeriod(60 * 60)
                    .withMetricName("CPUUtilization").withStatistics("Average").withEndTime(new Date())
                    .withDimensions(dimension);

            // Dimension().withName("InstanceType").withValue("r5.large"))
            // Dimension().withName("InstanceId").withValue("i-xxxxxxxxxxxxxxxxx")
                    // .withMeasureName("CPUUtilization")
                    //withMetricName("CPUUtilization")

            GetMetricStatisticsResult getMetricStatisticsResult = cw.getMetricStatistics(request);

            System.out.println("request " + request.toString());
            System.out.println("label : " + getMetricStatisticsResult.getLabel());
            System.out.println("DataPoint Size : " + getMetricStatisticsResult.getDatapoints().size());

            double avgCPUUtilization = 0;
            List<Datapoint> dataPoint = getMetricStatisticsResult.getDatapoints();
            for (Object aDataPoint : dataPoint) {
                Datapoint dp = (Datapoint) aDataPoint;
                System.out.println(" avgCPUUtilization " + avgCPUUtilization);
            }

        }catch(AmazonServiceException ase){

            ase.printStackTrace();
        }

        /*
         * TreeMap metricValues = new TreeMap<Long, Double>(); for (Datapoint dp
         * : getMetricStatisticsResult.getDatapoints()) {
         * metricValues.put(dp.getTimestamp().getTime(), dp.getAverage()); }
         * 
         * Set set = metricValues.entrySet(); Iterator i = set.iterator(); while
         * (i.hasNext()) { Map.Entry me = (Map.Entry) i.next();
         * System.out.print(me.getKey() + ": ");
         * System.out.println(me.getValue()); }
         */
    }
}

С приведенным выше кодом я всегда получаю нулевые точки данных и 0.0 в качестве загрузки ЦП, где, как на консоли aws, для заданного диапазона дат я вижу некоторый всплеск ЦП.

...