使用 Azure-Monitoring-libraries-for-python 从 Azure-Monitor 监控 azure-resources 并获取这些指标
Monitoring azure-resources from Azure-Monitor by using Azure-Monitoring-libraries-for-python and getting these metrics
我们将从 Azure Monitor 获取一些指标。
我安装了这些库并编写了一个脚本来执行此操作。
脚本如下。
#! /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))
当我 运行 这个脚本时,结果有时会显示 'None',不管我在 Azure-Monitor 上都能看到正确的值。
当我 运行 从 Azure 负载均衡器获取指标的脚本时,脚本 return 是正确的值。
这个URL(https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/metrics-supported#microsoftcomputevirtualmachines)表示PercentageCPU的聚合类型是Average,所以脚本似乎是正确的。
我不知道为什么这个获取百分比的脚本 CPU 与 Azure-Monitor return 的值不同。
有人知道解决办法吗?
Azure 监视器按 UTC 时间记录指标,因此您应该使用 today = datetime.datetime.utcnow()
来定义您的时间跨度。
根据您的代码,您查询的是最新的 1 分钟 VM CPU 百分比,Azure 监控日志指标会有一些延迟,所以可能由于延迟而无法获取此值,所以也许您可以尝试获取最后 5 分钟的 i,e CPU 百分比。
只需尝试下面的代码片段:
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):
我们将从 Azure Monitor 获取一些指标。
我安装了这些库并编写了一个脚本来执行此操作。
脚本如下。
#! /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))
当我 运行 这个脚本时,结果有时会显示 'None',不管我在 Azure-Monitor 上都能看到正确的值。
当我 运行 从 Azure 负载均衡器获取指标的脚本时,脚本 return 是正确的值。
这个URL(https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/metrics-supported#microsoftcomputevirtualmachines)表示PercentageCPU的聚合类型是Average,所以脚本似乎是正确的。
我不知道为什么这个获取百分比的脚本 CPU 与 Azure-Monitor return 的值不同。
有人知道解决办法吗?
Azure 监视器按 UTC 时间记录指标,因此您应该使用 today = datetime.datetime.utcnow()
来定义您的时间跨度。
根据您的代码,您查询的是最新的 1 分钟 VM CPU 百分比,Azure 监控日志指标会有一些延迟,所以可能由于延迟而无法获取此值,所以也许您可以尝试获取最后 5 分钟的 i,e CPU 百分比。
只需尝试下面的代码片段:
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):