Aliyun-ECS最新监控数据获取

  • 阿里云ECS最新监控数据获取
#!/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)

posted @ 2021-03-24 11:46  独孤云翔  阅读(127)  评论(0)    收藏  举报