ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python使用AliyunOpenApi获取ecs监控数据

2022-06-07 14:03:15  阅读:195  来源: 互联网

标签:set python mo request ins ecs AliyunOpenApi mons


python使用AliyunOpenApi获取ecs监控数据

ecs.py

#!/usr/bin/env python
#coding=utf-8
import json
import datetime,time
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.DescribeInstanceMonitorDataRequest import DescribeInstanceMonitorDataRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
client = AcsClient('AK_ID', 'AK_SRT', 'cn-beijing')

# 时间处理函数
def time2iso(dt):
    """本地时间转UTC时间(-8:00)"""
    cr_date =  datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
    # print(cr_date)
    time_struct = time.mktime(cr_date.timetuple())
    utc_st = datetime.datetime.utcfromtimestamp(time_struct)
    utc_st = str(utc_st).replace(' ','T') + 'Z'
    return utc_st


    # return datetime.datetime.utcfromtimestamp(timestamp).strftime(format).replace('{-FF-}',sec)
        
# 获取运维监控信息
def get_ecs_eni(starttime,endtime,ins,timesp):
    request = DescribeInstanceMonitorDataRequest()
    request.set_accept_format('json')
    request.set_StartTime(starttime)
    request.set_EndTime(endtime)
    request.set_Period(timesp)
    ecs_mo = {}
    for eid in ins.keys():
        ins_mo = {}
        request.set_InstanceId(eid)
        response = json.loads(str(client.do_action_with_exception(request),encoding='utf-8'))
        cpu = []
        net = [] 
        rio = []
        wio = []
        for mons in response["MonitorData"]["InstanceMonitorData"]:
            if "CPU" in mons and "IOPSWrite" in mons and "IOPSRead" in mons and "IntranetBandwidth" in mons:
                cpu.append(mons['CPU'])
                wio.append(mons['IOPSWrite'])
                rio.append(mons['IOPSRead'])
                net.append(mons['IntranetBandwidth'])
        ins_mo["CPU"] = str(max(cpu)) + '%'
        ins_mo["net"] = str(float("%.2f" % (max(net) /1024 ))) #+'MB/s'
        ins_mo["wio"] = str(max(wio))+'次/s'
        ins_mo["rio"] = str(max(rio))+'次/s'
        ins_mo["InstanceId"] = eid
        ins_mo["InstanceName"] = ins[eid][0]
        ins_mo["IpAddress"] = ins[eid][1]
        ecs_mo[eid] = ins_mo
    print(ecs_mo)

# 获取ecs 实例基本信息
def get_ecs_instance():
    request = DescribeInstancesRequest()
    request.set_accept_format('json')
    request.set_VpcId("vpc-id")
    request.set_VSwitchId("vsw-id")
    request.set_PageSize(50)
    response = json.loads(str(client.do_action_with_exception(request),encoding='utf-8'))
    inss = {}
    for ins in response["Instances"]["Instance"]:
        data = []
        # print(ins["InstanceName"],ins["InstanceId"],ins["VpcAttributes"]["PrivateIpAddress"]["IpAddress"][0])
        data.append(ins["InstanceName"])
        data.append(ins["VpcAttributes"]["PrivateIpAddress"]["IpAddress"][0])
        inss[ins["InstanceId"]] = data
    return inss

if __name__ == '__main__':
    starttime = time2iso("2021-06-22 00:00:01")
    endtime = time2iso("2021-06-29 23:59:50")
    print(starttime,endtime)
    # ecsid = "i-idssssssssssss"
    timesp = 3600
    inss = get_ecs_instance()
    get_ecs_eni(starttime,endtime,inss,timesp)
    
    

标签:set,python,mo,request,ins,ecs,AliyunOpenApi,mons
来源: https://www.cnblogs.com/pgy674477230/p/16351509.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有