Reputation: 1754
I would like to get EC2 Instance performance data using this code:
public void testCreateSpotInstance() throws Exception
{
BasicAWSCredentials bawsc = new BasicAWSCredentials(
"AKI2IUYDKF4KZV1DAL2A", "Onv+nq32tUkiLlKI32H3JtIB7Y4QM3esh01J37tL");
AmazonEC2 ec2 = new AmazonEC2Client(bawsc);
ec2.setEndpoint("ec2.ap-southeast-1.amazonaws.com");
ec2.setRegion(Region.getRegion(Regions.EU_CENTRAL_1));
fetchInstancePublicIP(ec2);
}
public void fetchInstancePublicIP(AmazonEC2 ec2)
{
DescribeInstancesRequest request = new DescribeInstancesRequest().withInstanceIds("i-03f5b2c1");
DescribeInstancesResult result = ec2.describeInstances(request);
List<Reservation> list = result.getReservations();
for (Reservation res : list)
{
List<Instance> instanceList = res.getInstances();
for (Instance instance : instanceList)
{
System.out.println("Public IP : " + instance.getPublicIpAddress());
System.out.println("Public DNS : " + instance.getPublicDnsName());
System.out.println("Instance State : " + instance.getState());
System.out.println("Instance TAGS : " + instance.getTags());
System.out.println("Instance Architecture : " + instance.getArchitecture());
System.out.println("Instance VpcId : " + instance.getVpcId());
System.out.println("Instance Launch Time : " + instance.getLaunchTime());
System.out.println("Instance Root Device Name : " + instance.getRootDeviceName());
System.out.println("Instance Hypervisor : " + instance.getHypervisor());
System.out.println("Instance Root Device Type : " + instance.getRootDeviceType());
System.out.println("Instance Virtualization Type : " + instance.getVirtualizationType());
System.out.println("Instance Location : " + instance.getPlacement());
instance.getNetworkInterfaces();
for (int i = 0; i < instance.getNetworkInterfaces().size(); i++)
{
InstanceNetworkInterface get = instance.getNetworkInterfaces().get(i);
System.out.println("Private Ip Address " + get.getPrivateIpAddress());
System.out.println("Mac Address " + get.getMacAddress());
System.out.println("Private Dns Name " + get.getPrivateDnsName());
InstanceNetworkInterfaceAssociation association = get.getAssociation();
System.out.println("Public Ip " + association.getPublicIp());
System.out.println("Public Dns Name " + association.getPublicDnsName());
System.out.println("Ip Owner Id " + association.getIpOwnerId());
}
}
}
}
I can get Instance data but I can't get data about CPU performance and RAM.
Can you give some advice how I can get this data with Java?
Upvotes: 1
Views: 999
Reputation: 201138
Step 1: Configure servers to send RAM usage information to CloudWatch: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html
Step 2: Query CloudWatch for CPU and RAM usage.
Explanation:
RAM usage is only available from within the OS running on the server, so you have to push that to CloudWatch in order to make it accessible. It's also nice to have it in CloudWatch so that you can set alarms on that metric.
Once you have all the values you need in CloudWatch you can get those values in your Java application using the AmazonCloudWatchClient.getMetricStatistics() method.
Upvotes: 2