如何用Python在Azure环境中获取Azure Developer的Metrics定义及数据?

2026-05-27 13:551阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计937个文字,预计阅读时间需要4分钟。

如何用Python在Azure环境中获取Azure Developer的Metrics定义及数据?

问题描述:使用Python SDK从Azure上获取各种资源的Metrics名称,以及Metrics Data的示例。

使用Python SDK获取Metrics:pythonfrom azure.monitor import MetricsClient

创建Metrics客户端metrics_client=MetricsClient(your-azure-subscription-id)

获取Metrics定义metrics=metrics_client.list_metric_definitions()

打印Metrics名称和示例for metric in metrics: print(fMetric Name: {metric.name}) print(fData Example: {metric.data.example}) print(---)

问题解答:

1.如何获取Azure上的Metrics名称?

通过调用`list_metric_definitions`方法,可以获取到所有Metrics的名称。

2. 如何获取Metrics Data的示例? 同样,在`list_metric_definitions`方法返回的结果中,`data`属性包含了Metrics的示例数据。

3. 如何通过`azure-monitor-query`查询Metrics? 使用Azure Monitor Query Language (AMQL) 可以查询Metrics。例如,查询特定资源的CPU使用率: plaintext ResourceGroup:resourceId/microsoft.compute/virtualmachines/vmName | metric 'CPU percentage'

4. 如何创建一个Metrics Client? 创建一个Metrics Client需要提供Azure订阅ID和资源ID。

5. 如何使用`client.list_metric_definitions`获取Metrics? 通过调用`list_metric_definitions`方法,可以获取到所有Metrics的定义,包括名称和示例数据。

问题描述

使用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='management.chinacloudapi.cn', audience='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], )

需要注意:

  • endpoint 和 audience 需要根据代码的使用Azure环境不同而改变,以上为中国区Azure的Endpoint。与Global Azure 终结点对比文档见:docs.microsoft.com/en-us/azure/china/resources-developer-guide#check-endpoints-in-azuredevelop
  • metrics_url 可以在Azure 门户中的“属性”页面获取,当然也可以通过Python对于资源的SDK进行获取。示例代码见附录一.
全部示例代码:

# 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='management.chinacloudapi.cn', audience='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) 测试效果图:

如何用Python在Azure环境中获取Azure Developer的Metrics定义及数据?

附录一:例如在代码中获取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='management.chinacloudapi.cn', credential_scopes=[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:github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-query/samples

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

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

本文共计937个文字,预计阅读时间需要4分钟。

如何用Python在Azure环境中获取Azure Developer的Metrics定义及数据?

问题描述:使用Python SDK从Azure上获取各种资源的Metrics名称,以及Metrics Data的示例。

使用Python SDK获取Metrics:pythonfrom azure.monitor import MetricsClient

创建Metrics客户端metrics_client=MetricsClient(your-azure-subscription-id)

获取Metrics定义metrics=metrics_client.list_metric_definitions()

打印Metrics名称和示例for metric in metrics: print(fMetric Name: {metric.name}) print(fData Example: {metric.data.example}) print(---)

问题解答:

1.如何获取Azure上的Metrics名称?

通过调用`list_metric_definitions`方法,可以获取到所有Metrics的名称。

2. 如何获取Metrics Data的示例? 同样,在`list_metric_definitions`方法返回的结果中,`data`属性包含了Metrics的示例数据。

3. 如何通过`azure-monitor-query`查询Metrics? 使用Azure Monitor Query Language (AMQL) 可以查询Metrics。例如,查询特定资源的CPU使用率: plaintext ResourceGroup:resourceId/microsoft.compute/virtualmachines/vmName | metric 'CPU percentage'

4. 如何创建一个Metrics Client? 创建一个Metrics Client需要提供Azure订阅ID和资源ID。

5. 如何使用`client.list_metric_definitions`获取Metrics? 通过调用`list_metric_definitions`方法,可以获取到所有Metrics的定义,包括名称和示例数据。

问题描述

使用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='management.chinacloudapi.cn', audience='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], )

需要注意:

  • endpoint 和 audience 需要根据代码的使用Azure环境不同而改变,以上为中国区Azure的Endpoint。与Global Azure 终结点对比文档见:docs.microsoft.com/en-us/azure/china/resources-developer-guide#check-endpoints-in-azuredevelop
  • metrics_url 可以在Azure 门户中的“属性”页面获取,当然也可以通过Python对于资源的SDK进行获取。示例代码见附录一.
全部示例代码:

# 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='management.chinacloudapi.cn', audience='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) 测试效果图:

如何用Python在Azure环境中获取Azure Developer的Metrics定义及数据?

附录一:例如在代码中获取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='management.chinacloudapi.cn', credential_scopes=[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:github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-query/samples

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

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!