你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

监视 Windows VM 的计划事件

适用范围:VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集

每天都有更新应用到 Azure 的不同组成部分,使其中的服务保持安全和最新状态。 除了计划内更新以外,还可能发生计划外事件。 例如,如果检测到任何硬件降级或故障,Azure 服务可能需要执行计划外维护。 使用实时迁移、保留内存的更新以及对更新影响的严格限制,使这些事件对客户来说几乎都是信息透明的。 大多数情况下,它们可能会导致虚拟机冻结几秒钟。 但是,对于某些应用程序,即使是虚拟机冻结几秒钟,也可能会造成影响。 提前了解即将进行的 Azure 维护非常重要,这可以确保为这些应用程序提供最佳体验。 Scheduled Events 服务提供一个编程接口,即将进行维护时它会发出通知,并使你能够正确处理维护。

本文介绍如何使用计划事件来接收有关可能影响 VM 的维护事件的通知,并构建某种简单的自动化机制来帮助进行监视和分析。

将计划事件路由到 Log Analytics

计划事件作为 Azure 实例元数据服务的一部分提供,该服务已在每个 Azure 虚拟机上提供。 客户可以编写自动化代码来查询其虚拟机的终结点,以查找计划性维护通知并执行缓解措施,例如,保存状态,并从轮换列表中删除其虚拟机。 我们建议生成自动化代码来记录计划事件,以便可以获取 Azure 维护事件的审核日志。

本文逐步介绍如何将维护计划事件捕获到 Log Analytics。 然后,触发一些基本的通知操作,例如,将电子邮件发送给团队,并获取对虚拟机造成了影响的所有事件的历史视图。 对于事件聚合与自动化,我们使用 Log Analytics,但你可以使用任何监视解决方案来收集这些日志并触发自动化。

显示事件生命周期的示意图

先决条件

对于本示例,需要在可用性集中创建一个 Windows 虚拟机。 对于可能会影响可用性集、云服务、虚拟机规模集或独立 VM 中的任何虚拟机的更改,计划事件会提供相关的通知。 运行一个服务来轮询充当收集器的某个 VM 上的计划事件,以获取可用性集中所有其他 VM 的事件。

在本教程结束时,请不要删除组资源组。

还需要创建一个 Log Analytics 工作区,用于从可用性集中的 VM 聚合信息。

设置环境

现在,可用性集中应有 2 个初始 VM。 现在,需要在同一个可用性集中创建名为 myCollectorVM 的第 3 个 VM。

New-AzVm `
   -ResourceGroupName "myResourceGroupAvailability" `
   -Name "myCollectorVM" `
   -Location "East US" `
   -VirtualNetworkName "myVnet" `
   -SubnetName "mySubnet" `
   -SecurityGroupName "myNetworkSecurityGroup" `
   -OpenPorts 3389 `
   -PublicIpAddressName "myPublicIpAddress3" `
   -AvailabilitySetName "myAvailabilitySet" `
   -Credential $cred
  1. GitHub 下载项目的 .zip 安装文件。

  2. 连接到 myCollectorVM,将该 .zip 文件复制到虚拟机并解压缩其中的所有文件。 在 VM 上打开 PowerShell 提示符。 在提示符下切换到包含 SchService.ps1 的文件夹(例如 PS C:\Users\azureuser\AzureScheduledEventsService-master\AzureScheduledEventsService-master\Powershell>),然后设置服务。

    .\SchService.ps1 -Setup
    
  3. 启动该服务。

    .\SchService.ps1 -Start
    
  4. 验证服务状态,确保它正在运行。

    .\SchService.ps1 -status  
    

    验证命令应会返回 Running

现在,该服务将开始每隔 10 秒轮询所有计划事件,并审批事件以加速维护。 “冻结”、“重新启动”、“重新部署”和“抢占”是计划事件捕获的事件。 可以扩展脚本,以便在审批事件之前触发某些缓解措施。

当计划事件服务捕获到上述任一事件时,该事件将记录到“应用程序事件日志事件状态”、“事件类型”、“资源”(虚拟机名称)和“不早于”(最小通知期限)中。 可以在应用程序事件日志中找到 ID 为 1234 的事件。

设置并启动服务后,它会将事件记录到 Windows 应用程序日志中。 若要验证是否可正常执行此操作,请重启可用性集中的某个虚拟机,然后,应会在事件查看器的“Windows 日志”>“应用程序日志”中看到记录了一个事件,其中显示 VM 已重启。

事件查看器的屏幕截图。

当计划事件服务捕获到事件时,该事件将记录到应用程序事件日志中,并显示“事件状态”、“事件类型”、“资源”(VM 名称)和“不早于”(最小通知期限)属性。 可以在应用程序事件日志中找到 ID 为 1234 的事件。

注意

在本示例中,虚拟机位于可用性集中,因此,我们可将一个虚拟机指定为收集器,以侦听计划事件并将其路由到 Log Analytics 工作区。 如果你有独立的虚拟机,可在每个虚拟机上运行该服务,然后将这些虚拟机分别连接到 Log Analytics 工作区。

在我们的设置中,我们选择了“Windows”,但你可以在 Linux 上设计类似的解决方案。

随时可以使用开关 –stop–remove 来停止/删除计划事件服务。

连接到 Log Analytics 工作区

现在,我们想要将 Log Analytics 工作区连接到收集器 VM。 Log Analytics 工作区充当存储库。我们将配置事件日志收集以从收集器 VM 捕获应用程序日志。

若要将计划事件路由到事件日志(服务会将其保存为应用程序日志),需要将虚拟机连接到 Log Analytics 工作区。

设置数据收集

  1. 打开 Azure 门户。

  2. 在顶部的搜索栏中,键入“Log Analytics 工作区”并从搜索结果中选择它。

  3. 选择所创建的工作区来打开其页面。

  4. 在“设置”下选择“代理”,然后单击“虚拟机”。

  5. 在“Windows 服务器”选项卡下,单击“数据收集规则”。

  6. 进入“收集和传送”选项卡,单击“添加数据源”包含空数据源部分的“收集和传送”选项卡的屏幕截图。

  7. 在“数据源”选项卡下,从下拉列表中选择“Windows 事件日志”。

  8. 选择要收集的事件日志。 确保已选择“错误”、“警告”和“信息”。 “添加数据源”选项卡的屏幕截图,其中显示了多个选中的复选框。

  9. 单击“下一步: 目标 >”

  10. 在“目标”选项卡下,单击“添加目标”。

  11. 使用收集器 VM 及其订阅的详细信息填写“目标类型”、“订阅”和“目标详细信息”部分。 “目标”选项卡的屏幕截图,其中显示了类型、订阅和目标详细信息。

  12. 选择正确的 VM 后,将在虚拟机上自动安装 Microsoft Monitoring Agent。 将 VM 连接到工作区并安装扩展的过程需要几分钟时间。

注意

会出现一定的延迟,最长可能需要在 10 分钟之后才会显示日志。

使用 Azure Monitor 创建警报规则

将事件推送到 Log Analytics 后,可运行以下查询来查找计划事件。

  1. 在页面顶部选择“日志”,将以下内容粘贴到文本框中:

    Event
    | where EventLog == "Application" and Source contains "AzureScheduledEvents" and RenderedDescription contains "Scheduled" and RenderedDescription contains "EventStatus" 
    | project TimeGenerated, RenderedDescription
    | extend ReqJson= parse_json(RenderedDescription)
    | extend EventId = ReqJson["EventId"]
    ,EventStatus = ReqJson["EventStatus"]
    ,EventType = ReqJson["EventType"]
    ,NotBefore = ReqJson["NotBefore"]
    ,ResourceType = ReqJson["ResourceType"]
    ,Resources = ReqJson["Resources"]
    | project-away RenderedDescription,ReqJson
    
  2. 选择“保存”,键入 logQueryogQuery 作为名称,保留“查询”作为类型,键入 VMLogsVMLogs 作为类别,然后选择“保存”。

    保存查询

  3. 选择“新建警报规则”。

  4. 在“创建规则”页中,保留 collectorworkspace 作为资源

  5. 在“条件”下,选择条目“每当客户日志搜索为‘<登录名未定义>’时”。 此时将打开“配置信号逻辑”页。

  6. 在“阈值”下输入 0,然后选择“完成”。

  7. 在“操作”下,选择“创建操作组”。 此时将打开“添加操作组”页。

  8. 在“操作组名称”中键入 myActionGroup

  9. 在“短名称”中键入 myActionGroup 。

  10. 在“资源组”中选择“myResourceGroupAvailability” 。

  11. 在“操作”下的“操作名称”中键入“电子邮件”,然后选择“电子邮件/短信/推送/语音” 。 此时将打开“电子邮件/短信/推送/语音”页。

  12. 选择“电子邮件”,键入电子邮件地址,然后选择“确定” 。

  13. 在“添加操作组”页中选择“确定”。

  14. 在“创建规则”页中的“警报详细信息”下,为“警报规则名称”键入 myAlert,然后为“说明”键入“电子邮件警报规则”。

  15. 完成后,请选择“创建警报规则”。

  16. 重启可用性集中的一个 VM。 几分钟后,你应会收到一封电子邮件,指出已触发该警报。

若要管理警报规则,请转到资源组,在左侧菜单中选择“警报”,然后在页面顶部选择“管理警报规则”。

后续步骤

有关详细信息,请参阅 GitHub 上的计划事件服务页。