in stratozone-aws-export.py [0:0]
def get_performance_info(vm_id, region_name, block_device_list):
"""Query system for VM performance data.
Args:
vm_id: instance id.
region_name: name of the AWS region
block_device_list: list of devices (disks) attached to the vm
"""
try:
perf_client = boto3.client('cloudwatch', region_name)
perf_queries = []
global vm_perf_list
disk_count = 0
perf_queries.append(get_metric_data_query('AWS/EC2', 'CPUUtilization',
'InstanceId', vm_id, 'Percent'))
perf_queries.append(get_metric_data_query('AWS/EC2', 'NetworkOut',
'InstanceId', vm_id,
'Bytes'))
perf_queries.append(get_metric_data_query('AWS/EC2', 'NetworkIn',
'InstanceId', vm_id, 'Bytes'))
for block_device in block_device_list:
perf_queries.append(get_metric_data_query('AWS/EBS', 'VolumeReadOps',
'VolumeId',
block_device,
'Count',
'volumereadops'
+ str(disk_count)))
perf_queries.append(get_metric_data_query('AWS/EBS', 'VolumeWriteOps',
'VolumeId',
block_device,
'Count',
'volumewriteops'
+ str(disk_count)))
disk_count = disk_count + 1
response = perf_client.get_metric_data(
MetricDataQueries=perf_queries,
StartTime=datetime.datetime.utcnow() - datetime.timedelta(days=30),
EndTime=datetime.datetime.utcnow(),
ScanBy='TimestampAscending'
)
first_arr_size = len(response['MetricDataResults'][0]['Values'])
if (len(response['MetricDataResults'][1]['Values']) >= first_arr_size and
len(response['MetricDataResults'][2]['Values']) >= first_arr_size and
len(response['MetricDataResults'][3]['Values']) >= first_arr_size):
for i in range(0, first_arr_size):
vm_perf_info = stratozonedict.vm_perf.copy()
vm_perf_info['MachineId'] = vm_id
vm_perf_info['TimeStamp'] = get_formatted_datetime(response['MetricDataResults'][0]['Timestamps'][i])
vm_perf_info['CpuUtilizationPercentage'] = '{:.2f}'.format(
response['MetricDataResults'][0]['Values'][i])
vm_perf_info['NetworkBytesPerSecSent'] = '{:.4f}'.format(
response['MetricDataResults'][1]['Values'][i])
vm_perf_info['NetworkBytesPerSecReceived'] = '{:.4f}'.format(
response['MetricDataResults'][2]['Values'][i])
tmp_read_io = 0
tmp_write_io = 0
for j in range(0, disk_count):
tmp_read_io = tmp_read_io + (
response['MetricDataResults'][3 + j]['Values'][i])
tmp_write_io = tmp_write_io + (
response['MetricDataResults'][4 + j]['Values'][i])
vm_perf_info['DiskReadOperationsPerSec'] = '{:.4f}'.format(
(tmp_read_io /1800))
vm_perf_info['DiskWriteOperationsPerSec'] = '{:.4f}'.format(
(tmp_write_io /1800))
vm_perf_info['AvailableMemoryBytes'] = ''
vm_perf_info['MemoryUtilizationPercentage'] = ''
vm_perf_list.append(vm_perf_info)
except Exception as e:
logging.error('error in get_performance_info')
logging.error(e)