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)
posted @   蒲公英PGY  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示