python使用AliyunOpenApi获取ecs监控数据
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)
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通