如何验证Azure上有足够的资源

时间:2017-08-18 11:36:06

标签: python azure azure-storage azure-resource-manager azure-resource-group

背景

如果这似乎是一个信息不完整的问题,那就是。这是因为它与一个大型项目有关,该项目使用Azure自动提供和缩放和缩减大量虚拟机,这是由第三方移交给我们的,我们无法理解某些问题。但我会尽力解释

我们正在使用python的Azure SDK来启动Azure VM,以杀死它们等。请参阅启动azure vms的方法中使用的代码:

    #Get VMs info. do it via minimum calls to speed up things
    started_on = time.time()
    while True:
        try:
            time.sleep(5)
            vm = compute_client.virtual_machines.get(self.resource_group, vm_name)
            break

问题

有时当我们运行此命令时,我们会收到此错误:

aioc.logic.connectors.azure:2017-08-17 08:39:45,709 | ERROR | Stop waiting for VM auto-acfinH-25 to finish
Traceback (most recent call last):
  File "/home/aioc/aioc/aioc/logic/connectors/azure.py", line 126, in start
    vm = compute_client.virtual_machines.get(self.resource_group, vm_name)
  File "/home/aioc/venv/lib/python3.4/site-packages/azure/mgmt/compute/compute/v2016_04_30_preview/operations/virtual_machines_operations.py", line 369, in get
    raise exp
msrestazure.azure_exceptions.CloudError: Azure Error: ResourceNotFound
Message: The Resource 'Microsoft.Compute/virtualMachines/auto-acfinH-25' under resource group 'AIOCBot' was not found.
aioc.logic.main_controller_logic:2017-08-17 08:39:45,978 | ERROR | An error occurred while checking Vm with id '599553cdc1462e3a828c66da' machine id '328'
Traceback (most recent call last):
  File "/home/aioc/aioc/aioc/logic/main_controller_logic.py", line 41, in run_vm_controller
    started_vms = vmc.start(vm.machine_type, 1)
  File "/home/aioc/aioc/aioc/logic/connectors/azure.py", line 135, in start
    vm_net_interface = network_client.network_interfaces.get(self.resource_group, vm_name)
  File "/home/aioc/venv/lib/python3.4/site-packages/azure/mgmt/network/v2017_03_01/operations/network_interfaces_operations.py", line 171, in get
    raise exp
msrestazure.azure_exceptions.CloudError: Azure Error: ResourceNotFound

经过调查,事实证明这是发生在b / c我们在azure的资源已经达到最大值(?)。解决此问题的方法是使用以下方法清除所述资源:

def cleanup_all(self):
    """
    Clean up all auto-created resources
    """
    compute_client = ComputeManagementClient(self.credentials, self.subscription_id)
    network_client = NetworkManagementClient(self.credentials, self.subscription_id)
    resource_client = ResourceManagementClient(self.credentials, self.subscription_id)

    l = resource_client.resources.list()
    for r in [r for r in l if r.name.startswith('auto-')]:
        try:
            if 'publicIPAddresses' in r.type:
                rs = network_client.public_ip_addresses.delete(self.resource_group, r.name)
                rs.wait()
            elif 'Microsoft.Network' in r.type: 
                rs = network_client.network_interfaces.delete(self.resource_group, r.name)
                rs.wait()
            elif 'Microsoft.Compute/virtualMachines' in r.type:
                rs = compute_client.virtual_machines.delete(self.resource_group, r.name)
                rs.wait()
        except:
            log.warn("Failed to stop resource: %s with type: %s", r.name, r.type, exc_info=1)

哪个都很棒。但是,出于商业原因,我们不能简单地说 - 创建一个定期运行此命令的cron作业 - 不能以任何自动化的方式运行它b / c它会同时影响许多不同的环境(即prod / demo / stage / dev),这是一个太大的副作用,是可以理解的。

这意味着我们必须每隔一段时间定期运行此命令,一旦我们达成协议,所有环境都已清除并准备就绪。

问题

我想看一下Azure控制台

中的 resources 部分

enter image description here

以某种方式来了解我已经消耗了多少允许的资源。我需要有一个想法,例如:哦你按照你允许的公共ips等45%的比例消耗,这样我知道我是否安全或者我是否需要再次运行purge命令。

想法?

更新

This page详细讨论了可用的限制,例如:

enter image description here

但它没有讨论如何衡量目前正在使用多少这些资源或剩下多少......这就是我想要找到的东西

有人可以解释发生了什么吗?

2 个答案:

答案 0 :(得分:3)

您的问题的部分答案。对于手册,您可以在Azure门户本身上找到此信息。点击"订阅",然后从订阅列表中选择您的订阅,然后选择" Usage + quota"。

enter image description here

答案 1 :(得分:2)

您可以通过编程方式找到它们,但每个提供程序都会调度它:

对于更多基于事件的编程,很可能有一种方法可以自动警告事件网格和/或逻辑应用程序和/或Azure监视器。