本文实例讲述了Python3编程实现获取阿里云ECS实例及监控的方法。分享给大家供大家参考,具体如下:
#!/usr/bin/env python3.5 # -*- coding:utf8 -*- try: import httplib except ImportError: import http.client as httplib import sys,datetime import urllib import urllib.request import urllib.error import urllib.parse import time import json import base64 import hmac,ssl import uuid from hashlib import sha1 # 解决 访问ssl网站证书的问题 try: _create_unverified_https_context = ssl._create_unverified_context except AttributeError: # Legacy Python that doesn't verify HTTPS certificates by default pass else: # Handle target environment that doesn't support HTTPS verification ssl._create_default_https_context = _create_unverified_https_context class aliyunclient: def __init__(self): self.access_id = '阿里云access_id' self.access_secret ='阿里云secret' #监控获取ECS URL self.url = 'https://ecs.aliyuncs.com' # #签名 def sign(self,accessKeySecret, parameters): sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0]) canonicalizedQueryString = '' for (k,v) in sortedParameters: canonicalizedQueryString += '&' + self.percent_encode(k) + '=' + self.percent_encode(v) stringToSign = 'GET&%2F&' + self.percent_encode(canonicalizedQueryString[1:]) # 使用get请求方法 bs = accessKeySecret +'&' bs = bytes(bs,encoding='utf8') stringToSign = bytes(stringToSign,encoding='utf8') h = hmac.new(bs, stringToSign, sha1) # 进行编码 signature = base64.b64encode(h.digest()).strip() return signature def percent_encode(self,encodeStr): encodeStr = str(encodeStr) res = urllib.request.quote(encodeStr) res = res.replace('+', '%20') res = res.replace('*', '%2A') res = res.replace('%7E', '~') return res # 构建除共公参数外的所有URL def make_url(self,params): timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) parameters = { 'Format' : 'JSON', 'Version' : '2014-05-26', 'AccessKeyId' : self.access_id, 'SignatureVersion' : '1.0', 'SignatureMethod' : 'HMAC-SHA1', 'SignatureNonce' : str(uuid.uuid1()), 'TimeStamp' : timestamp, } for key in params.keys(): parameters[key] = params[key] signature = self.sign(self.access_secret,parameters) parameters['Signature'] = signature url = self.url + "/" + urllib.parse.urlencode(parameters) return url def do_action(self,params): url = self.make_url(params) # print(url) request = urllib.request.Request(url) try: conn = urllib.request.urlopen(request) response = conn.read().decode() except urllib.error.HTTPError as e: print(e.read().strip()) raise SystemExit(e) try: res = json.loads(response) except ValueError as e: raise SystemExit(e) return res # 继承原始类 class client(aliyunclient): def __init__(self,InstanceIds): aliyunclient.__init__(self) self.InstanceIds = InstanceIds # ECS 区域 self.RegionId = "cn-shanghai" # 时间UTC转换 def timestrip(self): UTCC = datetime.datetime.utcnow() utcbefore5 = UTCC - datetime.timedelta(minutes =5) Endtime = datetime.datetime.strftime(UTCC, "%Y-%m-%dT%H:%M:%SZ") StartTime = datetime.datetime.strftime(utcbefore5, "%Y-%m-%dT%H:%M:%SZ") return (StartTime,Endtime) def DescribeInstanceMonitorData(self): ''' 构造实例监控序列函数 ''' self.tt = self.timestrip() action_dict ={"StartTime":self.tt[0],"Endtime":self.tt[1],"Action":"DescribeInstanceMonitorData","RegionId":self.RegionId,"InstanceId":self.InstanceId} return action_dict def DescribeInstances(self): ''' 构建实例配置查询函数 ''' action_dict = {"Action":"DescribeInstances","RegionId":self.RegionId,"InstanceIds":self.InstanceIds} return action_dict def alis_main(self): res = self.do_action(self.DescribeInstances()) listarry = len(res["Instances"]["Instance"]) a = {} cpu = 0 InternetBandwidth = 0 instanlist = {"data":a} # 调用所有符合条件的实例配置数据 for i in range(0,listarry): self.InstanceId = res["Instances"]["Instance"][i]["InstanceId"] BandwidthOUT = res["Instances"]["Instance"][i]["InternetMaxBandwidthOut"] # 调用计算该实例的监控数据 monitordata = self.do_action(self.DescribeInstanceMonitorData()) data = monitordata["MonitorData"]["InstanceMonitorData"] for i in range(0,len(data)): cpu += data[i]["CPU"] InternetBandwidth += data[i]["InternetBandwidth"] # 对该实例数据生成字典 arry = {"BandwidthOUT":BandwidthOUT,"cpu":cpu/len(data),"InternetBandwidth":InternetBandwidth/len(data)} # 将新数据重构到原字典数据 a.setdefault(self.InstanceId,arry) return instanlist if __name__ == "__main__": # 传实例ID 列表进去 clt= client(["i-11cy8adf2x"]) res = clt.alis_main() print(res) # 获取的结果如下: {'data': {'i-11cy8adf2x': {'InternetBandwidth': 0.0, 'cpu': 4.0, 'BandwidthOUT': 4}}} # 解释 获取所有实例的 当前配置的带宽值 当前占用的CPU% 当前占用的出口带宽 kbps
更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年09月23日
2024年09月23日
- Merryland《Merryland》[320K/MP3][69.48MB]
- 苏芮.1991-停在我心里的温柔【福茂】【WAV+CUE】
- 苏慧伦.2020-面面Every.Side.of.Me【相信音乐】【WAV+CUE】
- 群星.1991-不一样的感觉REMIX【宝丽金】【WAV+CUE】
- 银霞.1983-《你那好冷的小手》珍藏纪念版[WAV分轨]
- 银霞.2002-《国语巨星专辑VOL.3》2CD台湾版[WAV+CUE]
- 金池刘罡《昨日情歌HQ》头版限量编号[低速原抓WAV+CUE]
- 段奥娟.2024-23·岁碎念【白米范】【FLAC分轨】
- 顺子.2001-昨日·唯一·更多·顺子自选辑【魔岩】【WAV+CUE】
- 无印良品.1999-私藏三首·原创相对论(EP)【滚石】【WAV+CUE】
- Merryland《Merryland》[FLAC/分轨][170.22MB]
- 庄锭欣 ELKIE《没有你的未来》[320K/MP3][15.78MB]
- 庄锭欣 ELKIE《没有你的未来》[FLAC/分轨][36MB]
- TchaikovskySwanLake,Op.20柴可夫斯基天鹅湖(2013)SACD[Hi-Res]
- 24bit达人艺典《琴歌终极版》整轨WAV+CUE