为 Azure Kubernetes Fleet Manager 配置更新运行的监控和警报

设备群管理员可以通过在 Azure Monitor 中配置警报来监控长时间运行的更新任务的状态。 舰队更新运行资源更改会被引入Azure Resource Graph,使管理员能够借助 Azure Monitor 和 Log Analytics 配置警报和自动化。

有关手动或自动升级更新运行的数据存储在Azure Resource Graph中,使管理员有机会根据机群名称、更新运行状态、更新阶段和群集名称进行查询。

无论机队的成员群集位于哪个 Azure 订阅或区域中,更新运行的数据始终位于 Fleet Manager 资源所在 Azure 订阅的 Azure Resource Graph 中。

若要查询更新运行数据,需要使用使用 Kusto 查询语言(KQL)编写的查询。

了解 Azure Resource Graph 中的更新运行数据

若要了解如何使用 Azure Resource Graph 和 Fleet 更新运行数据,让我们使用 Azure Resource Graph 资源管理器来查询更新运行数据。

  1. 首先,在Azure门户中打开Azure Resource Graph资源管理器

  2. 选择“表格”,然后展开aksresources。 机队经理的资源具有前缀 microsoft.containerservice/fleets

    Azure Resource Graph资源管理器的屏幕截图,其中展开了 aksresources 表。

  3. “表 ”窗格中,选择 aksresources 以将其添加到资源管理器查询框。

  4. 现在,选择 microsoft.containerservices/fleets/updateruns。 浏览器查询框应类似于以下 KQL 示例。

    aksresources
    | where type == "microsoft.containerservice/fleets/updateruns"
    
  5. 运行查询以检索当前Azure订阅Azure Resource Graph中保存的所有更新运行数据。 更新运行数据作为结果字段中的 JSON 对象 properties 保存。 可以在 本文后面查看此对象的示例。

筛选至机群管理器实例

针对Azure Resource Graph生成 Kusto 查询时,可以使用以下示例查询作为有关如何仅选择与特定 Fleet Manager 资源关联的更新运行的指导。

您可以按以下方式向资源浏览器查询添加手动筛选条件,以选择您的 Fleet Manager 实例。

  1. 在资源管理器查询中,手动添加额外的 where 子句,并将 your-fleet-name 占位符替换为你的 Fleet Manager 的名称。

    aksresources
    | where type == "microsoft.containerservice/fleets/updateruns"
    | where id contains ('Microsoft.ContainerService/fleets/your-fleet-name')
    
  2. 运行查询以查看结果集仅包括指定机群管理器的更新运行。

按更新运行状态筛选

了解如何查找与机群管理器关联的更新运行后,可以添加进一步的筛选器,以便结果基于更新运行的状态。

  1. 通过依次展开 microsoft.containerservice/fleets/updaterunsstatusstatus 节点,更新资源管理器查询。

  2. 选择 state,以便将该属性添加到资源管理器查询中。

    在Azure Resource Graph资源管理器中选择更新运行中的字段以将其添加到查询的屏幕截图。

    资源管理器中的查询应与以下示例类似。

    aksresources
    | where type == "microsoft.containerservice/fleets/updateruns"
    | where id contains ('Microsoft.ContainerService/fleets/your-fleet-name')
    | where properties['status']['status']['state'] == "INSERT_VALUE_HERE"
    
  3. INSERT_VALUE_HERE 占位符替换为相应的 更新运行状态 值。 例如,若要仅接收失败的更新运行,请将此值设置为 Failed

  4. 运行该查询后,你将只会收到 Fleet Manager 中状态匹配的更新运行记录。

高级筛选

Azure Resource Graph 资源图浏览器让你能够轻松开始浏览更新运行相关数据。

以下高级 Kusto 查询选项可让您在创建警报时更轻松地使用其他更新运行属性。

  • mv-expand 可用于解压缩更新运行记录中的阶段、组和成员群集。
  • json_parse 可用于更轻松地引用 JSON 对象,而无需使用嵌套数组。

在以下示例查询中,我们可以确定 prod 阶段的 chinaeast3 组中哪个成员集群发生了故障。 如果此组/阶段中没有任何失败的集群,则不会返回任何行。

aksresources
| where type == "microsoft.containerservice/fleets/updateruns"
| where id contains ('Microsoft.ContainerService/fleets/your-fleet-name')
| extend parsedProperties = parse_json(properties)
| mv-expand stages = parsedProperties.status.stages
| mv-expand groups = stages.groups
| mv-expand members = groups.members
| where properties.status.status.state == "Failed"
| where stages.name == "prod" and groups.name == "chinaeast3" and members.status.state == "Failed"
| project stageName = stages.name, groupName = groups.name, memberName = members.name, memberState = members.status.state, memberStartTime = members.status.startTime

建筑警报

了解可用的Azure Resource Graph数据后,可以使用Azure Monitor警报规则和日志搜索来定义何时收到警报。

  1. 首先,在 Azure 门户中打开Azure Monitor 边栏

  2. 在左侧导航中选择 “警报 ”,后跟“ + 创建”,然后选择 “警报规则”。

    Azure Monitor 警报中“创建”菜单的屏幕截图,其中突出显示了“警报规则”选项。

  3. 在“创建警报规则”屏幕上,选择“+ 选择范围”,然后在“选择资源”边栏选项卡中,通过选择其所在的 Azure订阅和资源组,导航到机群管理器资源。

    显示选择要创建新警报规则的范围的屏幕截图。

  4. 选择 “条件 ”选项卡,然后在 “信号名称 选择”列表中选择“ 自定义日志搜索”。 日志边栏会显示在屏幕右侧。

    屏幕截图显示“条件”选项卡已加载,并且在“信号名称”下拉列表中已选择“自定义日志搜索”。

  5. “日志 ”边栏选项卡中,输入要用于触发警报的 Resource Graph 查询。 对于我们的示例,我们会针对任何失败的更新运行发出警报,并包括更新运行开始时间。

    备注

    对于 Azure Monitor 日志搜索查询,必须为 aksresources 表添加 arg(""). 前缀。 其余语法与本文前面使用的查询保持不变。

    arg("").aksresources
    | where type == "microsoft.containerservice/fleets/updateruns"
    | where id contains ('Microsoft.ContainerService/fleets/your-fleet-name')
    | extend parsedProps = parse_json(properties)
    | where parsedProps.status.status.state == "Failed"
    | project id, startTime = parsedProps.status.status.startTime
    
  6. 对查询返回的结果感到满意后,请选择“ 继续编辑警报 ”以关闭“ 日志 ”边栏选项卡。 查询会自动插入到 搜索查询 输入框中。 如果需要,可以继续在此处编辑它。

    显示如何自动将查询文本插入“创建警报规则”屏幕的“搜索”查询框中的屏幕截图。

  7. 向下滚动,直到看到 警报逻辑,使用窗体字段定义要触发警报的条件。 建议使用 静态 阈值,将值设置为 0将运算符 设置为 大于。 调整频率以适应首选时间段。

    展示如何将告警逻辑设置为“大于 0”并每 5 分钟检查一次的屏幕截图。

  8. 选择“下一步:操作”或“操作>”选项卡,以定义在匹配警报逻辑时要执行的操作。 可以选择一系列频道和集成选项,这些选项在Azure Monitor操作组文档中详细介绍。

  9. 若要保存警报规则,请选择“详细信息”选项卡,然后选择相应的Azure订阅和资源组。 通过选择严重性、提供警报规则名称和可选的说明来设置警报规则的详细信息,然后选择要将警报保存到的Azure 区域。 最后,设置要用于运行日志查询的 标识

    显示如何在设置警报级别和名称时将警报规则保存到资源组的屏幕截图。

  10. 选择“ 标记 ”选项卡以添加所需的任何标记,然后选择 “查看 + 创建 ”以创建新的警报规则。

下次触发警报规则时,将激活所选警报组,并调用所选通知和集成。

示例更新运行 JSON 属性结果

以下示例展示了 Azure Resource Graph 中保存的每次更新运行的 properties 有效负载。 可以使用此结构来告知如何生成警报查询或仪表板。

{
    "status": {
        "status": {
            "state": "Pending",
            "startTime": "2025-03-05T13:17:18.277945575Z"
        },
        "nodeImageSelection": {
            "selectedNodeImageVersions": [
                {
                    "version": "AKSAzureLinux-V2gen2-202502.26.0"
                },
                {
                    "version": "AKSWindows-2022-containerd-20348.3207.250214"
                }
            ]
        },
        "stages": [
            {
                "status": {
                    "state": "Pending",
                    "startTime": "2025-03-05T13:17:19.51815878Z"
                },
                "name": "prod",
                "groups": [
                    {
                        "status": {
                            "completedTime": "2025-03-05T13:48:59.049364234Z",
                            "state": "Completed",
                            "startTime": "2025-03-05T13:17:19.51815818Z"
                        },
                        "name": "chinaeast3",
                        "members": [
                            {
                                "clusterResourceId": "/subscriptions/a22dfd3c-4a99-4d5a-9e2f-70ba55d59fbe/resourceGroups/rg-contoso-demo-01/providers/Microsoft.ContainerService/managedClusters/consoto-web-01",
                                "status": {
                                    "completedTime": "2025-03-05T13:31:09.441388843Z",
                                    "state": "Completed",
                                    "startTime": "2025-03-05T13:17:19.51815698Z"
                                },
                                "name": "member-consoto-web-01",
                                "operationId": "b046b73e-8827-45a7-8696-d1da0815941b",
                                "message": "Skipped upgrade of following agent pool(s): current node image version \"AKSWindows-2022-containerd-20348.3207.250214\" of agent pool \"win\" is already at or ahead of target upgrade version \"AKSWindows-2022-containerd-20348.3207.250214\"."
                            },
                            {
                                "clusterResourceId": "/subscriptions/3a22dfd3c-4a99-4d5a-9e2f-70ba55d59fbe/resourceGroups/rg-contoso-demo-01/providers/Microsoft.ContainerService/managedClusters/consoto-web-02",
                                "status": {
                                    "completedTime": "2025-03-05T13:48:59.049364234Z",
                                    "state": "Completed",
                                    "startTime": "2025-03-05T13:31:09.495402941Z"
                                },
                                "name": "member-consoto-web-02",
                                "operationId": "759816e9-d924-4ff4-a992-97aac2a2dddb"
                            }
                        ]
                    },
                    {
                        "status": {
                            "state": "Pending",
                            "startTime": "2025-03-05T13:17:19.51826128Z"
                        },
                        "name": "chinanorth2",
                        "members": [
                            {
                                "clusterResourceId": "/subscriptions/fe691fe1-d1ce-43b9-869a-73c4a14cdafc/resourceGroups/rg-contoso-demo-02/providers/Microsoft.ContainerService/managedClusters/consoto-app-01",
                                "status": {
                                    "state": "Pending",
                                    "startTime": "2025-03-05T13:17:19.51826048Z",
                                    "error": {
                                        "message": "target upgrade node image version \"AKSAzureLinux-V2gen2-202502.26.0\" for agent pool pool is not available in region \"australiaeast\" \n",
                                        "code": "NodeImageVersionNotAvailable"
                                    }
                                },
                                "name": "member-consoto-app-01",
                                "message": "set member: member-consoto-app-01 to Pending due to failed validation err: target upgrade node image version \"AKSAzureLinux-V2gen2-202502.26.0\" for agent pool pool is not available in region \"australiaeast\" \n"
                            }
                        ]
                    },
                    {
                        "status": {
                            "state": "Pending",
                            "startTime": "2025-03-05T13:17:19.518346681Z"
                        },
                        "name": "chinanorth3",
                        "members": [
                            {
                                "clusterResourceId": "/subscriptions/fe691fe1-d1ce-43b9-869a-73c4a14cdafc/resourceGroups/rg-contoso-demo-03/providers/Microsoft.ContainerService/managedClusters/contoso-db-01",
                                "status": {
                                    "state": "Pending",
                                    "startTime": "2025-03-05T13:17:19.518345781Z",
                                    "error": {
                                        "message": "target upgrade node image version \"AKSAzureLinux-V2gen2-202502.26.0\" for agent pool pool is not available in region \"chinanorth3\" \n",
                                        "code": "NodeImageVersionNotAvailable"
                                    }
                                },
                                "name": "member-contoso-db-01",
                                "message": "set member: member-contoso-db-01 to Pending due to failed validation err: target upgrade node image version \"AKSAzureLinux-V2gen2-202502.26.0\" for agent pool pool is not available in region \"chinanorth3\" \n"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    "provisioningState": "Succeeded",
    "managedClusterUpdate": {
        "nodeImageSelection": {
            "customNodeImageVersions": [
                {
                    "version": "AKSAzureLinux-V2-202502.26.0"
                },
                {
                    "version": "AKSWindows-23H2-gen2-25398.1425.250214"
                }
            ],
            "type": "Custom"
        },
        "upgrade": {
            "type": "NodeImageOnly"
        }
    },
    "updateStrategyId": "/subscriptions/00a3c596-fcb8-43ec-bf56-a2d19b4d3663/resourceGroups/flt-contoso-demo/providers/Microsoft.ContainerService/fleets/contoso-fleet-01/updateStrategies/safedeployment",
    "strategy": {
        "stages": [
            {
                "name": "prod",
                "afterStageWaitInSeconds": 0,
                "groups": [
                    {
                        "name": "chinaeast3"
                    },
                    {
                        "name": "chinanorth2"
                    },
                    {
                        "name": "chinanorth3"
                    }
                ]
            }
        ]
    }
}