问题描述

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

问题解答

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

关键函数为:

#第一步:定义 client
client = MetricsQueryClient(credential=credential, endpoint='https://management.chinacloudapi.cn',
audience='https://management.chinacloudapi.cn') #第二步:获取metrics name
response = client.list_metric_definitions(metric_uri) #第三步:获取 metrcis data
response = client.query_resource(
resource_uri=url,
metric_names=[name],
timespan=timedelta(hours=2),
granularity=timedelta(minutes=5),
aggregations=[MetricAggregationType.AVERAGE],
)

需要注意:

全部示例代码:

# import required package
from ast import Try
from warnings import catch_warnings
from datetime import timedelta
from azure.monitor.query import MetricsQueryClient, MetricAggregationType
from azure.identity import AzureCliCredential ## pip install azure-identity # prepare credential
credential = AzureCliCredential() #init metric query client, endpoint need to target China Azure
client = MetricsQueryClient(credential=credential, endpoint='https://management.chinacloudapi.cn',
audience='https://management.chinacloudapi.cn') def printMetricsDataByName(url, name):
##metrics_uri =metric_uri; ### os.environ.get('METRICS_RESOURCE_URI')
response = client.query_resource(
resource_uri=url,
metric_names=[name],
timespan=timedelta(hours=2),
granularity=timedelta(minutes=5),
aggregations=[MetricAggregationType.AVERAGE],
) for metric in response.metrics:
print(metric.name + ' -- ' + metric.display_description)
for time_series_element in metric.timeseries:
for metric_value in time_series_element.data:
print('\tThe {} at {} is {}'.format(
name,
metric_value.timestamp,
metric_value.average
)) print("### ..Special Reource URL.. ....")
# specific resource uri
metric_uri = '/subscriptions/<your-subscriptions-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Cache/Redis/<your-resource-name>' # do query...
response = client.list_metric_definitions(metric_uri) for item in response:
print(item.name + " ...... Metrics Data ......")
try:
printMetricsDataByName(metric_uri,item.name)
except Exception as e:
print(e)

测试效果图:

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

from azure.mgmt.redis import RedisManagementClient  ## pip install azure-mgmt-redis
from azure.identity import AzureCliCredential ## pip install azure-identity # prepare credential
credential = AzureCliCredential() redisClient = RedisManagementClient(credential, '<YOUR SUB>',
base_url='https://management.chinacloudapi.cn',
credential_scopes=[https://management.chinacloudapi.cn/.default]) for item in redisClient.redis.list_by_subscription():
print(item.id)

以上代码执行结果:

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

Code: AuthorizationFailed
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

最新文章

  1. jQuery操作DOM元素
  2. 树形DP
  3. 倒计时simple 天时分秒
  4. UVALive 6092 Catching Shade in Flatland --枚举+几何计算
  5. OpenJudge计算概论-求满足条件的3位数
  6. eclipse导出Runnable Jar File在Launch Configuration中找不到类
  7. 在使用SQLite插入数据时出现乱码的解决办法
  8. 【HTML5 1】39个让你受益的HTML5教程
  9. 随意一条查询sql转换为查询结果集相应的数目
  10. Spring编程风格
  11. zookeeper集群一次性启动
  12. ubuntu 下舒畅的使用libreoffice
  13. java学习笔记 --- 集合
  14. Redis分布式集群搭建
  15. PowerBI功能发布时间线
  16. 转载:java中Thread.sleep()函数使用
  17. 58.Less介绍及其与Sass的差异
  18. wap2app(六)-- wap2app的原生标题头无法隐藏
  19. gdb 的 symbos 加载详情(set verbose on)
  20. openssl创建自己的CA certificate

热门文章

  1. C语言中的bool类型 stdbool.h
  2. nginx开启gzip和缓存配置
  3. 小程序刷新webview小结
  4. 两个echarts地图联动高亮区域
  5. 你可能不知道的 css 内容块
  6. Linux 0.11源码阅读笔记-中断过程
  7. 安卓性能测试之 adb shell 常用命令
  8. zabbix使用自带模板监控MySQL
  9. linux下elf二进制文件怎么回事(ls,vmstat等命令)
  10. findmnt、lsblk、mount 命令查看磁盘、目录挂载、挂载点以及文件系统格式等情况