#!/usr/bin/env python
#coding=utf-8
import json
import os
import json
import xlwt
import math
from datetime import datetime, timedelta
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcms.request.v20190101.DescribeMonitoringAgentHostsRequest import DescribeMonitoringAgentHostsRequest
from aliyunsdkcms.request.v20190101.DescribeMetricDataRequest import DescribeMetricDataRequest
from aliyunsdkcms.request.v20190101.DescribeMetricLastRequest import DescribeMetricLastRequest
# 获取最新的监控数据 可用监控项:cpu_total diskusage_utilization memory_usedutilization process.number process.expend
def data_write(filepath, datas):
f = xlwt.Workbook()
print(datas)
sheet1 = f.add_sheet(u'监控数据(24H)', cell_overwrite_ok=True)
line_01 = ['InstanceID', 'HostName', 'OperatingSystem', 'Region', 'IpGroup', 'isAliyunHost', 'cpu_total',
'memory_usedutilization', 'device', 'usage(%)', 'device', 'usage(%)', 'device', 'usage(%)']
for x in range(len(line_01)):
sheet1.write(0, x, line_01[x], setStyle("宋体"))
i = 1 # i 值为excel从第几行开始写
for data in datas:
for j in range(len(data)):
sheet1.write(i, j, data[j])
i = i + 1
f.save(filepath)
def setStyle(name):
style = xlwt.XFStyle()
font = xlwt.Font()
pattern = xlwt.Pattern()
alignment = xlwt.Alignment()
font.colour_index = 1 # 字体颜色
font.name = name # 字体
font.bold = True # 加粗
alignment.horz = 2 # 对齐方式,居中
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 23 # 背景颜色
style.alignment = alignment
style.pattern = pattern
style.font = font
return style
def get_connect_with_aliy(regionid):
client = AcsClient('xxx', 'xxx', regionid)
request = DescribeMonitoringAgentHostsRequest()
request.set_accept_format('json')
request.set_PageSize(500)
# request.set_PageNumber(2)
response = client.do_action_with_exception(request)
return response
def DataCleanForAgentHost(response):
AgentHost = []
response_decode = (str(response, encoding='utf-8'))
data = json.loads(response_decode)
count = data.get('Total') # 已监控数
instances = data.get('Hosts').get('Host')
for ecs in instances:
InstanceId = {}
if ecs.get('InstanceId') is not None:
InstanceId['instanceId'] = ecs.get('InstanceId')
InstanceId['OperatingSystem'] = ecs.get('OperatingSystem')
InstanceId['Region'] = ecs.get('Region')
InstanceId['HostName'] = ecs.get('HostName')
InstanceId['IpGroup'] = ecs.get('IpGroup')
InstanceId['isAliyunHost'] = ecs.get('isAliyunHost')
# print(InstanceId)
AgentHost.append(InstanceId)
# print(AgentHost)
return AgentHost
def GetMonitorLastStorage(instanceId):
client = AcsClient('xxx', 'xxx', 'cn-shenzhen')
request = DescribeMetricLastRequest()
request.set_accept_format('json')
request.set_Namespace("acs_ecs_dashboard")
request.set_Dimensions(instanceId)
monitor_project = "diskusage_utilization"
request.set_MetricName(monitor_project)
response = client.do_action_with_exception(request)
response_decode = (str(response, encoding='utf-8'))
data = json.loads(response_decode)
Datapoints = json.loads(data.get('Datapoints'))
ecs_storage = []
for ecs_storage_info in Datapoints:
if ecs_storage_info.get('device'):
ecs_storage.append(ecs_storage_info.get('diskname'))
ecs_storage.append(ecs_storage_info.get('Average'))
else:
pass
print(ecs_storage)
def GetMonitorLast(AgentHost, regionid='cn-shenzhen'):
client = AcsClient('xxx', 'xxx', 'cn-shenzhen')
request = DescribeMetricLastRequest()
request.set_accept_format('json')
request.set_Namespace("acs_ecs_dashboard")
monitor_project = ["cpu_total", "memory_usedutilization"]
global ecs_monitor_lasts
for host in AgentHost:
instanceId = {}
instanceId['instanceId'] = host.get('instanceId')
request.set_Dimensions(instanceId)
ecs_tmp = []
ecs_tmp.append(host.get('instanceId'))
ecs_tmp.append(host.get('HostName'))
ecs_tmp.append(host.get('OperatingSystem'))
ecs_tmp.append(host.get('Region'))
ecs_tmp.append(host.get('IpGroup'))
ecs_tmp.append(host.get('isAliyunHost'))
for monitor_obj in monitor_project:
request.set_MetricName(monitor_obj)
response = client.do_action_with_exception(request)
response_decode = (str(response, encoding='utf-8'))
data = json.loads(response_decode)
Datapoints = json.loads(data.get('Datapoints'))
for monitor_last in Datapoints:
ecs_tmp.append(round(monitor_last.get('Average'), 2))
# print(ecs_storage)
# print(ecs_pid)
# print(ecs_tmp)
ecs_monitor_lasts.append(ecs_tmp)
ecs_monitor_lasts.append(ecs_storage)
ecs_monitor_lasts.append(ecs_pid)
# print(ecs_monitor_lasts)
# return ecs_monitor_lasts
def GetMonitorValueFromAgent(AgentHost, regionid):
ecs_cloudmonitors = []
client = AcsClient('xxx', 'xxx', regionid)
request = DescribeMetricDataRequest()
request.set_accept_format('json')
# 数据查询间隔时间 24H
request.set_Period("86400")
# 阿里云产品类型 *
request.set_Namespace("acs_ecs_dashboard")
monitor_project = ["cpu_total", "memory_usedutilization"]
start_time = get_start_timestamp(7)
request.set_StartTime(start_time)
request.set_EndTime(int(datetime.now().timestamp()*1000))
for host in AgentHost:
instanceId = {}
instanceId['instanceId'] = host.get('instanceId')
request.set_Dimensions(instanceId)
# print(str(response, encoding='utf-8'))
ecs_tmp = []
ecs_tmp.append(host.get('instanceId'))
ecs_tmp.append(host.get('HostName'))
ecs_tmp.append(host.get('IpGroup'))
ecs_tmp.append(host.get('isAliyunHost'))
ecs_tmp.append(host.get('OperatingSystem'))
ecs_tmp.append(host.get('Region'))
for monitor_obj in monitor_project:
request.set_MetricName(monitor_obj)
response = client.do_action_with_exception(request)
response_decode = (str(response, encoding='utf-8'))
data = json.loads(response_decode)
Datapoints = json.loads(data.get('Datapoints'))
if Datapoints:
ecs_tmp.append(Datapoints[0].get('Maximum'))
ecs_tmp.append(Datapoints[0].get('Minimum'))
ecs_tmp.append(round(Datapoints[0].get('Average'), 2))
else:
pass
# print(ecs_tmp)
ecs_cloudmonitors.append(ecs_tmp)
return ecs_cloudmonitors
if __name__ == '__main__':
try:
base_dir = os.path.dirname(os.path.abspath(__file__))
finall_file = os.path.join(base_dir, "%s.xlsx" % (datetime.now().strftime("%Y-%m-%d")))
regionid = "cn-shenzhen"
response = get_connect_with_aliy(regionid)
AgentHost = DataCleanForAgentHost(response)
ecs_monitor_lasts = []
GetMonitorLast(AgentHost, regionid)
print(ecs_monitor_lasts)
# data_write(finall_file, list)
except ServerException as e:
print(e)
except ClientException as e:
print(e)