Azure REST API (4) 在Python环境下,使用Azure REST API
《Windows Azure Platform 系列文章目录》
之前遇到的项目中,客户需要在Python环境下,监控Azure VM的CPU利用率,在这里简单记录一下。
笔者的环境是Windows 10,如果需要Python开发,首先需要准备以下环境:
1.安装Python,下载地址:https://www.python.org/downloads/,我这里分别安装了Python 2.7.15和Python 3.7.0
2.安装PyCharm,下载地址:https://www.jetbrains.com/pycharm/download/#section=windows
选择导入开发环境配置文件,我们选择不导入。
3.配置PyCharm,我们配置运行环境:
4.因为笔者用的是Azure China服务,我们在上图中,需要增加相应的package。我们查询到package名字为mcazurerm
5.然后对mcazurerm进行配置,我们点击External Libraries,Site-packages,mcazurerm,然后点击settings.py
增加SNAPSHOT_API = '2016-04-30-preview'。如下图:
6.获得azure tenant id, appid, app secret, 订阅id,资源组名称,虚拟机名称。具体可以参考之前的内容:
https://www.cnblogs.com/threestone/p/9343146.html
7.vmlist.py的代码如下,分别实现了2个方法,list VM和获得CPU利用率。
#!/usr/bin/env python
# -*- coding:utf8 -*-
import xdrlib ,sys
import xlrd
import mcazurerm
import json
import mcazurerm.restfns
#from restfns import do_delete, do_get, do_get_next, do_patch, do_post, do_put
#from settings import azure_rm_endpoint, SNAPSHOT_API
#from adalfns import get_access_token
import datetime tenant_id = '这里输入tenantid'
app_id = '这里输入appid'
app_secret = '这里输入appsecret' subscription_id = '这里输入订阅ID' location = 'chinaeast'
rg = '这里输入资源组名称'
vmname = '这里输入Azure RM机器名'
vmname2= '这里输入另外要监控的机器名' newapiversion='2016-09-01'
# create an authentication token
access_token = mcazurerm.get_access_token(
tenant_id,
app_id,
app_secret
) def listvm(access_token, subscription_id, resource_group):
endpoint = ''.join([mcazurerm.settings.azure_rm_endpoint,
'/subscriptions/', subscription_id,
'/resourceGroups/', resource_group,
'/providers/Microsoft.Compute/virtualMachines',
'?api-version=', mcazurerm.settings.SNAPSHOT_API])
return mcazurerm.restfns.do_get(endpoint,access_token) def GetCPU(access_toke,subscription_id,resource_group):
endpoint = "".join([mcazurerm.settings.azure_rm_endpoint,
"/subscriptions/", subscription_id,
"/resourceGroups/", resource_group,
"/providers/Microsoft.Compute/virtualMachines/",vmname,
"/providers/microsoft.insights/metrics"
"?$filter=(name.value eq 'Percentage CPU') and timeGrain eq duration'PT1M'",
" and startTime eq 2018-08-22T08:19:26.2644638Z and endTime eq 2018-08-23T08:19:29.0454921Z",
"&api-version=",newapiversion
]) print(endpoint)
return mcazurerm.restfns.do_get(endpoint,access_token) def GetNetworkIn(access_toke,subscription_id,resource_group):
endpoint = "".join([mcazurerm.settings.azure_rm_endpoint,
"/subscriptions/", subscription_id,
"/resourceGroups/", resource_group,
"/providers/Microsoft.Compute/virtualMachines/",vmname,
"/providers/microsoft.insights/metrics"
"?$filter=(name.value eq 'Network In') and timeGrain eq duration'PT1M'",
" and startTime eq 2018-08-22T08:19:26.2644638Z and endTime eq 2018-08-23T08:19:29.0454921Z",
"&api-version=",newapiversion
]) return mcazurerm.restfns.do_get(endpoint,access_token) #https://docs.microsoft.com/en-us/rest/api/monitor/activitylogs/list#get_activity_logs_with_filter_and_select #By reource group
def GetOperationByResourceGroup(access_toke,subscription_id,resource_group):
endpoint = "".join([mcazurerm.settings.azure_rm_endpoint,
"/subscriptions/", subscription_id,
"/providers/microsoft.insights/eventtypes/management/values",
"?api-version=", newapiversion,
"&$filter=eventTimestamp ge '2018-08-01T20:00:00Z' and eventTimestamp le '2018-08-23T20:00:00Z' and resourceGroupName eq '",rg,
"'" ])
return mcazurerm.restfns.do_get(endpoint,access_token) #by resource URI
resourceuri="".join(["/subscriptions/",subscription_id ,"/resourceGroups/",rg,
"/providers/Microsoft.Compute/VirtualMachines/",vmname2]) def GetOperationByResourceURI(access_toke,subscription_id,resource_group):
endpoint = "".join([mcazurerm.settings.azure_rm_endpoint,
"/subscriptions/", subscription_id,
"/providers/microsoft.insights/eventtypes/management/values",
"?api-version=", newapiversion,
"&$filter=eventTimestamp ge '2018-08-01T20:00:00Z' and eventTimestamp le '2018-08-23T20:00:00Z' and resourceUri eq '",resourceuri,
"'" ])
return mcazurerm.restfns.do_get(endpoint,access_token) vmlistreturn1 = listvm(access_token,subscription_id,rg)
vmlistreturn2 = GetCPU(access_token,subscription_id,rg) vmlistreturn3 = GetNetworkIn(access_token,subscription_id,rg)
vmlistreturn4 = GetOperationByResourceGroup(access_token,subscription_id,rg)
vmlistreturn5 = GetOperationByResourceURI(access_token,subscription_id,rg) print(vmlistreturn2)
print(vmlistreturn3)
print(vmlistreturn4)
print(vmlistreturn5)
8.其他REST API,可以参考Azure MSDN文档:
https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines
9.另外如果需要监控Azure China CDN流量的话,请参考下面的内容。我们点击下图的CDN Manage
10.在弹出的窗口中,找到安全管理,秘钥管理。如下图:
11.点击创建秘钥,如下图:
12.获取到秘钥的ID和Key
13.在Python中,增加如下代码:
cdnsubscription_id = 'CDN所在的订阅ID'
cdnendpoint_id='CDN上面的Endpoint ID,具体的返回方法请参考下面的步骤' apiversion='1.0'
cdnkeyid='输入上面步骤的cdnkeyid'
cdnkeyvalue='输入上面步骤的cdnkey value' def calculate_authorization_header(request_url, request_time, key_id, key_value, http_method):
""" Calculate the authorization header.
@request_url: Complete request URL with scheme, host, path and queries
@request_time: UTC request time with format yyyy-MM-dd hh:mm:ss
@key_id: API key ID
@key_value: API key value
@http_method: Http method in upper case """
urlparts = urlparse.urlparse(request_url)
queries = urlparse.parse_qs(urlparts.query)
ordered_queries = collections.OrderedDict(sorted(queries.items()))
message = "%s\r\n%s\r\n%s\r\n%s" % (urlparts.path, ", ".join(['%s:%s' % (key, value[0]) for (key, value) in ordered_queries.items()]), request_time, http_method)
digest = hmac.new(bytearray(key_value, "utf-8"), bytearray(message, "utf-8"), hashlib.sha256).hexdigest().upper()
return "AzureCDN %s:%s" % (key_id, digest) requesturl= "".join(["https://restapi.cdn.azure.cn/subscriptions/", cdnsubscription_id,
"/endpoints?apiVersion=",apiversion
])
currentUTCTime = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
CDNheader = calculate_authorization_header(requesturl,currentUTCTime,cdnkeyid,cdnkeyvalue,'GET') #这个接口 返回CDN Endpoint ID
CDNlist= mcazurerm.restfns.do_CDNget(requesturl,currentUTCTime,CDNheader) #https://docs.azure.cn/zh-cn/cdn/cdn-api-get-subscription-volume
#startTime yyyy-MM-ddThh:mm:ssZ
#endTime yyyy-MM-ddThh:mm:ssZ
#granularity PerFiveMinutes,PerHour,PerDay requesturl= "".join(["https://restapi.cdn.azure.cn/subscriptions/", cdnsubscription_id,
"/endpoints/",cdnendpoint_id,
"/volume?apiVersion=",apiversion,
"&startTime=2018-08-18T00:00:00Z&endTime=2018-08-20T06:32:53Z&granularity=PerHour"
]) currentUTCTime = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
CDNheader = calculate_authorization_header(requesturl,currentUTCTime,cdnkeyid,cdnkeyvalue,'GET')
CDNlist= mcazurerm.restfns.do_CDNget(requesturl,currentUTCTime,CDNheader)
14.修改restfns.py,增加方法:
def do_CDNget(endpoint, requestdate, access_token):
headers = {
"x-azurecdn-request-date": requestdate,
"Authorization": access_token
}
return requests.get(endpoint, headers=headers).json()
Azure REST API (4) 在Python环境下,使用Azure REST API的更多相关文章
- Python环境下NIPIR(ICTCLAS2014)中文分词系统使用攻略
一.安装 官方链接:http://pynlpir.readthedocs.org/en/latest/installation.html 官方网页中介绍了几种安装方法,大家根据个人需要,自行参考!我采 ...
- python环境下实现OrangePi Zero寄存器访问及GPIO控制
最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...
- 图像处理基本工具——Python 环境下的 Pillow( PIL )
由于笔者近期的研究课题与图像后处理有关,需要通过图像处理工具对图像进行变换和处理,进而生成合适的训练图像数据.该系列文章即主要记录笔者在不同的环境下进行图像处理时常用的工具和库.在 Python 环境 ...
- 关于python环境下的opencv安装
吐槽: 这一天我终于记起了这个博客.今天搞python环境下的opencv,又弄了一天,很烦躁.之前配置VS的opencv也是花了好久的时间,然后突然发现之前记录在电脑上的文档都找不到了,于是决定还是 ...
- windows下多Python环境指定pip安装模块到对应Python环境下
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿在windows下装了2套Python,一套是直接安装的Pytho ...
- ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机
最近需要从指定公共访问的blob中复制vhd到自己的订阅存储账户,并使用vhd创建AZURE ARM虚拟机(非经典版),而且在portal.azure.cn中无法实现虚拟机映像创建等功能,于是自己使用 ...
- python环境下安装virtualenv,virtualenvwrapper
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...
- Python环境下如何安装爬虫需求的一些库
是在CMD环境下的: request库pip install request 回车 pandas库 同理,pip install pandas :这里需要声明下,这个是不一定成功的,刚入门稍微看了一点 ...
- Win32环境下代码注入与API钩子的实现(转)
本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...
随机推荐
- 电脑快捷键与JAVA关键字、运算符
电脑快捷键: Alt+ESC切换到上一个操作的窗口 Alt+F4关闭当前窗口 Print Screen截取当前全屏幕到剪切板 Alt+Print Screen截取当前窗口到剪切板 Alt+Shift在 ...
- 数据库和redis的一致性
之前的讲解,主要是在讲解redis如何支撑海量数据.高并发读写.高可用服务的架构 从这一讲开始,正式开始做业务系统的开发 商品详情页,缓存架构,90%是大量的业务(没有什么级数含量),10%最有级数含 ...
- Python学习笔记第五周
目录 一.基础概念 1.模块定义 2.包的定义 3.导入包的本质 4.导入模块的本质 5.导入方法 6.import的本质 7.导入优化 8.模块分类 9.标准库介绍 1.time与datetime ...
- Java中的IO流大体介绍
由于Java中的IO流是在是知识点繁多,所以我大约花了1周的时间将其整理起来.但是整理起来后并不是将完事了,我还是要分字节流和字符流来讲述.然后字节流和字符流中还有是否带有缓冲流. 讲述完IO流后我将 ...
- Python之路,第十一篇:Python入门与基础11
python3 函数2 全局变量:一直存在 局部变量:函数执行时存在,执行完毕后销毁: lambda 表达式(又称匿名函数表达式) 作用: 创建一个匿名(无名)函数对象, 同 def 类似但不提供函 ...
- JAVA基础部分复习(四、抽象类与接口)
抽象类与接口的定义: package cn.review.day02; /** * 抽象类 * 定义: * 1.抽象类使用关键字abstract修饰 * 2.抽象方法必须定义在抽象类中,抽象方法没有方 ...
- Bi-shoe and Phi-shoe
欧拉函数中的性质 Φ(p)=p-1,p为素数.所以这个题算是贪心+数论吧.每个Φ(p)=p-1:只要从p开始,找素数,那么一定有Φ(k)>=p-1;只有当p=k时,等号成立. #include ...
- apache用户认证、域名跳转、Apache访问日志(两种格式)
1.apache 设置,用户访问时 目录或文件的认证: 对目录的认证: <Directory /var/www/222> //指定认证的目录AllowOverride AuthConfig ...
- group_concat的使用以及乱码
1.group_concat子查询返回数字是乱码,既不是utf8也不是gbk,后来看了下子表的字段编码是gbk的,但sql整体返回的是utf8,group_concat前 把字段转换成utf8的,运行 ...
- Docker第一个应用:Hello World
Docker应用:Hello World 前言: 最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟(实际上没用过,掩面哭笑.Jpg). ...