首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Azure-监视库-for python监视Azure-Monitor中的资源并获取以下指标

使用Azure-监视库-for python监视Azure-Monitor中的资源并获取以下指标
EN

Stack Overflow用户
提问于 2021-03-31 06:21:55
回答 1查看 360关注 0票数 1

我们将从Azure Monitor获得一些指标。

我安装了库并编写了一个脚本来完成这个任务。

脚本如下。

代码语言:javascript
复制
#! /usr/bin/env python
 
import datetime
from azure.mgmt.monitor import MonitorManagementClient
from azure.identity import ClientSecretCredential

subscription_id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
resource_group_name = 'xxxx-xxxxx'
vm_name = 'xxxxxxxxxx'
 
resource_id = (
    "subscriptions/{}/"
    "resourceGroups/{}/"
    "providers/Microsoft.Compute/virtualMachines/{}"
).format(subscription_id, resource_group_name, vm_name)
 
TENANT_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
CLIENT = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
KEY = 'xxxxxxxxx'
credentials = ServicePrincipalCredentials(
    client_id = CLIENT,
    secret = KEY,
    tenant = TENANT_ID
)
 
client = MonitorManagementClient(
    credentials,
    subscription_id
)
 
today = datetime.datetime.now()
nexttime = today - datetime.timedelta(minutes=1)
 
metrics_data = client.metrics.list(
    resource_id,
    timespan="{}/{}".format(nexttime, today),
    interval='PT1M',
    metricnames='Percentage CPU',
    aggregation='average'
)
for item in metrics_data.value:
    for timeserie in item.timeseries:
        for data in timeserie.data:
            print("{}".format(data.average))

当我运行这个脚本时,结果有时会显示“无”,尽管我可以在Azure-Monitor上看到正确的值。

当我运行从Azure Load Balancer获取度量的脚本时,脚本返回正确的值。

这个URL (https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/metrics-supported#microsoftcomputevirtualmachines)表示百分比CPU的聚合类型是平均的,所以脚本看起来是正确的。

我不知道为什么这个获得CPU百分比的脚本不返回与Azure-Monitor相同的值。

有人知道解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-01 05:39:05

Azure监视器根据UTC时间记录度量指标,因此您应该使用today = datetime.datetime.utcnow()来定义timespan。

根据您的代码,您正在查询最新的1分钟VM CPU百分比,Azure将监视日志度量的一些延迟,因此您可能由于延迟而无法获得此值,因此您可以尝试获得i,e最后5分钟的CPU百分比。

只需尝试下面的代码片段:

代码语言:javascript
复制
today = datetime.datetime.utcnow()
nexttime = today - datetime.timedelta(minutes=5)

query_timespan = "{}/{}".format(nexttime, today - datetime.timedelta(minutes=4))

print(query_timespan)

metrics_data = client.metrics.list(
    resource_id,
    timespan=query_timespan,
    interval='PT1M',
    metricnames='Percentage CPU',
    aggregation='average'
)
for item in metrics_data.value:
    for timeserie in item.timeseries:
        for data in timeserie.data:
            print("{}".format(data.average))

我这边的结果:

门户显示(我的时区是UTC+8):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66882652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档