问题描述通过metrics监控页面,我们能得知当前资源(如redis)的运行情况与各种指标。如果我们需要把指标下载到本地或者生成json数据导入到第三方的监控平台呢?azure是否可以通过python代码或者时powershell脚本导出各种指标数据呢?
解决办法可以! powershell命令可以使用get-azmetric 或者是 az monitor metrics list命令来获取资源的metrics值。
get-azmetric:gets the metric values of a resource. https://docs.microsoft.com/en-us/powershell/module/az.monitor/get-azmetric?view=azps-5.4.0&viewfallbackfrom=azps-5.2.0
az monitor metrics list: list the metric values for a resource. https://docs.microsoft.com/en-us/cli/azure/monitor/metrics?view=azure-cli-latest#az_monitor_metrics_list
而使用python代码,可以使用metrics的rest api来实现
metrics – list:lists the metric values for a resource. https://docs.microsoft.com/en-us/rest/api/monitor/metrics/list
在aad中注册应用获取在python代码中访问redis metrics的access token: (将应用程序注册到 microsoft 标识平台: https://docs.azure.cn/zh-cn/active-directory/develop/quickstart-register-app)
注:使用powershell必须先登录到azure。使用命令 connect-azaccount -environment azurechinacloud 或 az cloud set –name azurechinacloud 和 az login。
使用python代码则需要先获取到访问redis metrics的token。获取token可以在azure ad中注册一个应用,然后给该应用在redis的访问控制中赋予reader的权限即可读取metris数据。
执行步骤python步骤一:注册aad应用,复制应用id,客户端访问密码 登录azure平台,进入aad页面,点击app registrations: https://portal.azure.cn/?l=en.en-us#blade/microsoft_aad_iam/activedirectorymenublade/registeredapps
点击“new registration” 按钮,输入应用名称,其他值保留默认,点击保存
创建成功后,进入应用页面,导入到“certificates & secrets”页面,创建需要使用的client secret并复制出来,第三步需要使用
在应用页面复制出tenant id, applicaiton id需要在第三步代码中使用
具体操作过程见如下动图:
步骤二:赋予获取metrics的权限在redis的access control (iam)页面中,通过步骤一的应用名搜索并赋予monitoring reader权限
注:如没有赋予权限,则代码中会报出类似错误:
status code: 844a6bd49dc3eb7dda5a7922bcdafb06
response content: b'{“error”:{“code”:”authorizationfailed”,”message”:”the client ‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’ with object id ‘xxxxxxxx-xxxx-xxxx-xxxx-36166b5f7276’ does not have authorization to perform action ‘microsoft.insights/metrics/read’ over scope ‘/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/xxxx-rg/providers/microsoft.cache/redis/xxxx/providers/microsoft.insights’ or the scope is invalid. if access was recently granted, please refresh your credentials.”}}’
步骤三:编写python代码,使用requests来发送psot,get请求代码中主要有两部分内容:一是获取access token,二是获取metrics data
高亮中的内容都是需要替换成相应的资源信息和第一步中准备的信息
在获取access token的body内容中,grant_type是固定值,为client_credentials。resource的值为中国区azure的管理终结点:https://management.chinacloudapi.cn
import requestsimport json##part 1: get access tokenaadurl="https://login.chinacloudapi.cn/<your aad tenant id>/oauth2/token"aadbody={'grant_type':'client_credentials','client_id':'your aad client id','client_secret':'your aad client secret','resource':'https://management.chinacloudapi.cn'}rtoken= requests.post(aadurl, data=aadbody)##print(rtoken)objtoken = json.loads(rtoken.text)##print(obj['access_token'])##part 2: get the metrics value by tokenheaders = {'content-type': "application/json", 'authorization': 'bearer '+objtoken['access_token'] }url= "https://management.chinacloudapi.cn/subscriptions/<subscriptions>/resourcegroups/<resourcegroups>/providers/microsoft.cache/redis/<your redis name>/providers/microsoft.insights/metrics?api-version=2018-01-01&metricnames=expiredkeys,usedmemory"r = requests.get(url, headers=headers)print('status code: ' + str(r))print('response content: ' + str(r.content))
运行效果如:
powershell登录azure
准备az monitor metrics list命令
az cloud set --name azurechinacloudaz loginaz monitor metrics list --resource /subscriptions/<your subscriptions>/resourcegroups/<resourcegroups>/providers/microsoft.cache/redis/<your redis name> --metric usedmemory --aggregation maximum --interval pt1m
执行效果如下:
以上就是如何使用python代码获取azure redis的监控指标值的详细内容。
