Azure 计划维护通知差异

Azure 计划维护通知差异

我们的服务器在 Azure 上。最近我们收到了一封计划维护的邮件通知。但是,检查仪表板时,它显示没有计划维护活动。

但是,当我打开单个虚拟机的仪表板时,它会显示与维护相关的消息。我无法打开每个虚拟机并检查该消息。

是不是只有我一个人遇到同样的问题,还是其他人也遇到了同样的问题?

谢谢。

答案1

不只是你遇到过这种情况 - 我们也遇到过这种情况。在我们的案例中,VM 刀片在我们收到电子邮件通知前 24-36 小时显示计划维护。在同一时间段内,“计划维护”刀片没有显示任何即将进行的维护。

今天早上,在收到正式的电子邮件通知后,“计划维护”刀片正确显示即将进行的维护。

答案2

是不是只有我一个人遇到同样的问题,还是其他人也遇到了同样的问题?

不,不只是你。

该区域中需要维护的其他虚拟机将收到与您相同的消息。

正如 David 所说,我们可以发现信息这里:

在此处输入图片描述

也许我们应该重新部署您的虚拟机。

如果维护不需要重新启动,Azure 会使用就地迁移在主机更新时暂停 VM。

如果维护需要重新启动,您将收到计划维护时间的通知。在这些情况下,您将获得一个时间窗口,您可以在方便的时候自行开始维护。

有关处理计划维护的更多信息,请参阅此关联

答案3

AzureRM PowerShell

您可以使用 Azure Powershell 查看虚拟机的维护计划时间。使用 -status 参数时,可从 Get-AzureRmVM cmdlet 获取计划维护信息。

Get-AzureRmVM -ResourceGroupName rgName -Name vmName -Status

您还可以使用 Get-AzureRmVM 而不指定 VM 来获取资源组中所有 VM 的维护状态。

Get-AzureRmVM -ResourceGroupName rgName -Status

以下 PowerShell 函数获取您的订阅 ID 并打印出计划进行维护的虚拟机列表。

function MaintenanceIterator
{
    Select-AzureRmSubscription -SubscriptionId $args[0]

    $rgList= Get-AzureRmResourceGroup 

    for ($rgIdx=0; $rgIdx -lt $rgList.Length ; $rgIdx++)
    {
        $rg = $rgList[$rgIdx]        
    $vmList = Get-AzureRMVM -ResourceGroupName $rg.ResourceGroupName 
        for ($vmIdx=0; $vmIdx -lt $vmList.Length ; $vmIdx++)
        {
            $vm = $vmList[$vmIdx]
            $vmDetails = Get-AzureRMVM -ResourceGroupName $rg.ResourceGroupName -Name $vm.Name -Status
              if ($vmDetails.MaintenanceRedeployStatus )
            {
                Write-Output "VM: $($vmDetails.Name)  IsCustomerInitiatedMaintenanceAllowed: $($vmDetails.MaintenanceRedeployStatus.IsCustomerInitiatedMaintenanceAllowed) $($vmDetails.MaintenanceRedeployStatus.LastOperationMessage)"               
            }
          }
    }
}

关联:处理 Windows 虚拟机的计划维护通知


Azure 元数据服务

计划事件是一种 Azure 元数据服务,可让您的应用程序有时间准备虚拟机维护。它提供有关即将发生的维护事件(例如重新启动)的信息,以便您的应用程序可以做好准备并减少中断。它适用于所有 Azure 虚拟机类型,包括 Windows 和 Linux 上的 PaaS 和 IaaS。

# How to get scheduled events 
function Get-ScheduledEvents($uri)
{
    $scheduledEvents = Invoke-RestMethod -Headers @{"Metadata"="true"} -URI $uri -Method get
    $json = ConvertTo-Json $scheduledEvents
    Write-Host "Received following events: `n" $json
    return $scheduledEvents
}

# How to approve a scheduled event
function Approve-ScheduledEvent($eventId, $docIncarnation, $uri)
{    
    # Create the Scheduled Events Approval Document
    $startRequests = [array]@{"EventId" = $eventId}
    $scheduledEventsApproval = @{"StartRequests" = $startRequests; "DocumentIncarnation" = $docIncarnation} 

    # Convert to JSON string
    $approvalString = ConvertTo-Json $scheduledEventsApproval

    Write-Host "Approving with the following: `n" $approvalString

    # Post approval string to scheduled events endpoint
    Invoke-RestMethod -Uri $uri -Headers @{"Metadata"="true"} -Method POST -Body $approvalString
}

function Handle-ScheduledEvents($scheduledEvents)
{
    # Add logic for handling events here
}

######### Sample Scheduled Events Interaction #########

# Set up the scheduled events URI for a VNET-enabled VM
$localHostIP = "169.254.169.254"
$scheduledEventURI = 'http://{0}/metadata/scheduledevents?api-version=2017-03-01' -f $localHostIP 

# Get events
$scheduledEvents = Get-ScheduledEvents $scheduledEventURI

# Handle events however is best for your service
Handle-ScheduledEvents $scheduledEvents

# Approve events when ready (optional)
foreach($event in $scheduledEvents.Events)
{
    Write-Host "Current Event: `n" $event
    $entry = Read-Host "`nApprove event? Y/N"
    if($entry -eq "Y" -or $entry -eq "y")
    {
        Approve-ScheduledEvent $event.EventId $scheduledEvents.DocumentIncarnation $scheduledEventURI 
    }
}

关联:Azure 元数据服务:Windows VM 的计划事件

相关内容