问题描述

使用Python SDK来获取Azure上的各种资源的Metrics的名称以及Metrics Data的示例

问题解答

通过 azure-monitor-query ,可以创建一个 metrics client,调用 client.list_metric_definitions 来获取Metrics 定义,然后通过 client.query_resource 获取Metrics data。

关键函数为:

  1. #第一步:定义 client
  2. client = MetricsQueryClient(credential=credential, endpoint='https://management.chinacloudapi.cn',
  3. audience='https://management.chinacloudapi.cn')
  4.  
  5. #第二步:获取metrics name
  6. response = client.list_metric_definitions(metric_uri)
  7.  
  8. #第三步:获取 metrcis data
  9. response = client.query_resource(
  10. resource_uri=url,
  11. metric_names=[name],
  12. timespan=timedelta(hours=2),
  13. granularity=timedelta(minutes=5),
  14. aggregations=[MetricAggregationType.AVERAGE],
  15. )

需要注意:

全部示例代码:

  1. # import required package
  2. from ast import Try
  3. from warnings import catch_warnings
  4. from datetime import timedelta
  5. from azure.monitor.query import MetricsQueryClient, MetricAggregationType
  6. from azure.identity import AzureCliCredential ## pip install azure-identity
  7.  
  8. # prepare credential
  9. credential = AzureCliCredential()
  10.  
  11. #init metric query client, endpoint need to target China Azure
  12. client = MetricsQueryClient(credential=credential, endpoint='https://management.chinacloudapi.cn',
  13. audience='https://management.chinacloudapi.cn')
  14.  
  15. def printMetricsDataByName(url, name):
  16. ##metrics_uri =metric_uri; ### os.environ.get('METRICS_RESOURCE_URI')
  17. response = client.query_resource(
  18. resource_uri=url,
  19. metric_names=[name],
  20. timespan=timedelta(hours=2),
  21. granularity=timedelta(minutes=5),
  22. aggregations=[MetricAggregationType.AVERAGE],
  23. )
  24.  
  25. for metric in response.metrics:
  26. print(metric.name + ' -- ' + metric.display_description)
  27. for time_series_element in metric.timeseries:
  28. for metric_value in time_series_element.data:
  29. print('\tThe {} at {} is {}'.format(
  30. name,
  31. metric_value.timestamp,
  32. metric_value.average
  33. ))
  34.  
  35. print("### ..Special Reource URL.. ....")
  36. # specific resource uri
  37. metric_uri = '/subscriptions/<your-subscriptions-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Cache/Redis/<your-resource-name>'
  38.  
  39. # do query...
  40. response = client.list_metric_definitions(metric_uri)
  41.  
  42. for item in response:
  43. print(item.name + " ...... Metrics Data ......")
  44. try:
  45. printMetricsDataByName(metric_uri,item.name)
  46. except Exception as e:
  47. print(e)

测试效果图:

附录一:例如在代码中获取Redis资源的Resource ID

  1. from azure.mgmt.redis import RedisManagementClient ## pip install azure-mgmt-redis
  2. from azure.identity import AzureCliCredential ## pip install azure-identity
  3.  
  4. # prepare credential
  5. credential = AzureCliCredential()
  6.  
  7. redisClient = RedisManagementClient(credential, '<YOUR SUB>',
  8. base_url='https://management.chinacloudapi.cn',
  9. credential_scopes=[https://management.chinacloudapi.cn/.default])
  10.  
  11. for item in redisClient.redis.list_by_subscription():
  12. print(item.id)

以上代码执行结果:

附录二:credential = AzureCliCredential() 为访问Azure资源时提供认证授权的方法,如果出现权限不够,或者是无法访问的情况,会出现类似如下的提示,需要根据消息提示来解决权限问题。

  1. Code: AuthorizationFailed
  2. Message: The client 'xxxxxxxxxxxxxxxxxxx@xxxxx.partner.onmschina.cn' with object id 'xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx'
    does not have authorization to perform action 'Microsoft.Insights/metricDefinitions/read'
    over scope '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx/resourceGroups/xxxx-resource-group/providers/Microsoft.Cache/Redis/redis-xxxxxx/providers/Microsoft.Insights'
    or the scope is invalid. If access was recently granted, please refresh your credentials.

参考资料

Azure Monitor Query client library Python samples: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-query/samples

Azure China developer guide: https://docs.microsoft.com/en-us/azure/china/resources-developer-guide#check-endpoints-in-azuredevelop

【Azure 环境】【Azure Developer】使用Python代码获取Azure 中的资源的Metrics定义及数据的更多相关文章

  1. 【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)

    问题描述 通过Metrics监控页面,我们能得知当前资源(如Redis)的运行情况与各种指标.如果我们需要把指标下载到本地或者生成JSON数据导入到第三方的监控平台呢?Azure是否可以通过Pytho ...

  2. 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)

    关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...

  3. 【python】获取列表中最长连续数字

    最近开发遇到一个功能需求,目的是要获取一个AI分析结果中最长连续帧,比如一个视频中连续3帧有人,那么我认为这个视频就是有人,我就要判断这个视频帧列表中是否有连续的三帧有人.本质就是获取列表中的最长连续 ...

  4. 万答#2,一样的Python代码,为什么可以删表,却不能更新数据

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题 运行下面的这段Python代码,却总是无法更新数据: import pym ...

  5. pycharm中运行成功的python代码在jenkin中运行问题总结

    我们在用selenium+python完成了项目的UI自动化后,一般用jekins持续集成工具来定期运行,python程序在pycharm中编辑运行成功,但在jenkins中运行失败的两个问题,整理如 ...

  6. python,如何获取字符串中的子字符串,部分字符串

    说明: 比如有一个字符串,python,如何就获取前3位,或者后2位.在此记录下. 操作过程: 1.通过分割符的方式,下标的方式,获取字符串中的子串 >>> text = 'pyth ...

  7. 当From窗体中数据变化时,使用代码获取数据库中的数据然后加入combobox中并且从数据库中取得最后的结果

    private void FormLug_Load(object sender, EventArgs e) { FieldListLug.Clear();//字段清除 DI = double.Pars ...

  8. 【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization

    Azure Active Directory (Azure AD) is Microsoft's cloud-based identity and access management service, ...

  9. 编写python代码获取4k高清壁纸

    Huskiesir最近在研究python爬虫大约俩周了吧,由于比较懒,也没把具体研究的过程与经验写下来,实在是一大憾事.这次直接上干货,代码送给大家: import re import request ...

随机推荐

  1. 学习saltstack (五)

    Saltstack介绍 Salt三种运行方式 1.local本地运行2.Master/Minion3.Salt ssh Salt的三大功能 a.远程执行b.配置管理(状态管理)c.云管理:阿里云,aw ...

  2. 集合流之"交集(相同)和差集(区别的)"的使用

    一.需求 今天做的是将两个字符串转为数组后再转集合,然后利用集合的流stream来进行差集过滤 二.差集代码 差集:将两个集合相同的数据去掉,留下不同的数据 1 @Test 2 public void ...

  3. Noob渗透笔记

    靶机下载地址:https://www.vulnhub.com/entry/noob-1,746/ kali ip 信息收集 依旧我们先使用nmap扫描确定一下靶机ip nmap -sP 192.168 ...

  4. scrapy 如何链接有密码的redis scrapy-redis 设置redis 密码 scrapy-redis如何为redis配置密码

    # 使用scrapy_redis的调度器SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 使用scrapy_redis的去重机制DUP ...

  5. char向wchar的转换-MultiByteToWideChar

    问题产生 使用CreateFile函数,如下: CreateFile(lpcTheFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NO ...

  6. node-webkit文档翻译#package.json

    title: node-webkit文档翻译#package.json date: 2013-12-07 21:38:25 tags: node-webkit 基本示例 { "main&qu ...

  7. Emscripten教程之代码可移植性与限制(一)

    Emscripten教程之代码可移植性与限制(一) 翻译:云荒杯倾本文是Emscripten-WebAssembly专栏系列文章之一,更多文章请查看专栏.也可以去作者的博客阅读文章.欢迎加入Wasm和 ...

  8. 使用自定义的鼠标图标 --- cursor url

    前段时间在项目中遇到过 自定义鼠标图标 这一需求.由于一般我们用的鼠标样式大都是固定的几种,而 自定义鼠标图标 不是很常用到,所以对这一小知识点进行总结,以防忘记. 自定义鼠标图标 自定义鼠标图标 即 ...

  9. Android开发 之 理解Handler、Looper、MessageQueue、Thread关系

    本文转自博客:http://blog.csdn.net/he90227/article/details/43567073 一. 图解与概述 首先Android中 的每一个线程都会对应一个Message ...

  10. Spring Boot-Profile

    文章目录 前言 一.Profile是什么? 二.使用步骤 1.多Profile文件 2.使用yml方式 3.激活方式 总结 前言 不同的环境解释:比如我们开发人员使用开发环境,项目发布时使用生产环境, ...