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

适用于 Prometheus 的 Azure Monitor 托管服务规则组

Prometheus 中的规则在收集数据时会对数据进行处理。 将其配置为 Prometheus 规则组的一部分,应用于 Azure Monitor 工作区中的 Prometheus 指标。

规则类型

有两种类型的 Prometheus 规则,如下表所述。

类型 说明
警报 警报规则可基于 Prometheus 查询语言 (Prom QL) 查询的结果创建 Azure Monitor 警报。 由 Azure 托管 Prometheus 警报规则触发的警报以与其他 Azure Monitor 警报类似的方式进行处理和触发通知。
录制 记录规则可预先计算经常需要的或计算量大的表达式,并将其结果存储为一组新时序。 通过记录规则创建的时序将作为新的 Prometheus 指标引入回 Azure Monitor 工作区。

创建 Prometheus 规则

可以使用 Azure 资源类型 Microsoft.AlertsManagement/prometheusRuleGroups 来创建和配置 Azure 托管 Prometheus 规则组、记录规则和警报规则,其中警报规则和记录规则定义为规则组属性的一部分。 Prometheus 规则组是在特定 Azure Monitor 工作区的范围内定义的。 可以使用 Azure 资源管理器 (ARM) 模板、API、Azure CLI 或 PowerShell 创建 Prometheus 规则组。

Azure 托管 Prometheus 规则组遵循开放源代码 Prometheus 规则组的结构和术语。 Azure 版本支持规则名称、表达式、“for”子句、标签、批注。 应注意 OSS 规则组与 Azure 托管 Prometheus 之间存在的以下主要差异:

  • Azure 托管 Prometheus 规则组作为 Azure 资源进行管理,并包含资源管理所需的信息,例如 Azure 规则组应驻留的订阅和资源组。
  • Azure 托管 Prometheus 警报规则包括专用属性,允许像处理其他 Azure Monitor 警报一样处理此类警报。 例如,作为 Azure 托管 Prometheus 警报规则的一部分,支持警报严重性、操作组关联和警报自动解除配置。

注意

对于 AKS 或 ARC Kubernetes 群集,可以使用一些建议的警报规则。 请参阅此处的预定义警报规则。

将规则限制为特定群集

可以通过向规则组添加一个群集范围和/或选择使用规则组 clusterName 属性,将规则组中的规则限制为查询来自某个特定群集的数据。 如果 Azure Monitor 工作区包含来自多个群集的大量数据,则应将规则限制为单个群集。 在这种情况下,对所有数据运行一组规则可能会导致性能或限制问题。 通过使用群集范围,可以创建多个规则组,每个组使用同一规则进行配置,并将每个组限制为涵盖不同群集。

若要将规则组限制为使用某个 ARM 模板的群集范围,应将群集的 Azure 资源 ID 添加到规则群范围[]列表中。 范围列表仍必须包含 Azure Monitor 工作区资源 ID。 支持将以下群集资源类型作为群集范围:

  • Azure Kubernetes 服务 (AKS) 群集 (Microsoft.ContainerService/managedClusters)
  • 已启用 Azure Arc 的 Kubernetes 群集 (Microsoft.kubernetes/connectedClusters)
  • Azure 连接的设备 (Microsoft.ResourceConnector/appliances)

除了群集 ID,还可以配置规则组的 clusterName 属性。 “clusterName”属性必须与从特定群集中抓取时添加到指标中的 cluster 标签匹配。 默认情况下,此标签设置为群集 ID 的最后一部分(即资源名称)。 如果使用群集抓取 configmap 中的“cluster_alias”设置更改过此标签,则必须在规则组“clusterName”属性中包含更新后的值。 如果你的抓取使用的是默认的“cluster”标签值,则“clusterName”属性是可选属性。

以下示例展示了如何将规则组配置为限制查询特定群集:

{
    "name": "sampleRuleGroup",
    "type": "Microsoft.AlertsManagement/prometheusRuleGroups",
    "apiVersion": "2023-03-01",
    "location": "northcentralus",
    "properties": {
         "description": "Sample Prometheus Rule Group limited to a specific cluster",
         "scopes": [
             "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.monitor/accounts/<azure-monitor-workspace-name>",
             "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.containerservice/managedclusters/<myClusterName>"
         ],
         "clusterName": "<myCLusterName>",
         "rules": [
             {
                ...
             }
         ]
    }
}        

如果未为特定规则组指定群集 ID 范围和 clusterName,则组中的规则将从所有群集的所有工作区中的所有群集中查询数据。

还可以使用门户 UI 将规则组限制为某个群集范围。

在 Azure 门户中创建或编辑 Prometheus 规则组

若要从门户主页创建新的规则组,请执行以下操作:

  1. 门户中,选择“监视”>“警报”。
  2. 选择 Prometheus 规则组显示如何从 Azure Monitor 警报屏幕访问 Prometheus 规则组的屏幕截图。
  3. 选择“+ 创建”,打开规则组创建向导 显示创建新 Prometheus 规则组的步骤的屏幕截图。

若要从门户主页编辑新规则组,请执行以下操作:

  1. 门户中,选择“监视”>“警报”。
  2. 选择“Prometheus 规则组”以查看订阅中现有的规则组列表
  3. 选择所需规则组,进入编辑模式。

配置规则组范围

在规则组“范围”选项卡上:

  1. 从订阅中可用的工作区列表中选择 Azure Monitor 工作区。 此组中的规则从此工作区查询数据。
  2. 若要将规则组限制为某个群集范围,请选择“特定群集”选项:
    • 从已连接到所选 Azure Monitor 工作区的群集列表中选择“群集”。
    • 系统会为你输入默认的“群集名称”值。 仅当已使用 cluster_alias 更改过群集标签值时,才应更改此值。
  3. 选择“下一步”以配置规则组详细信息

显示 Prometheus 规则组范围的配置的屏幕截图。

配置规则组详细信息

在规则组“详细信息”选项卡上:

  1. 选择其中应存储规则组的“订阅”和“资源组”。
  2. 输入规则组“名称”和“说明”。 规则组一旦创建好,就无法更改规则组名称。
  3. 选择规则组的“评估间隔”时间。 默认值为 1 分钟。
  4. 选择是否在创建时启用规则组。
  5. 选择“下一步”以配置组中的规则。

显示 Prometheus 规则组详细信息的配置的屏幕截图。

配置组中的规则

  • 在规则组“规则”选项卡上,可以查看组中的记录规则和警报规则列表。

  • 一个组中最多可以添加 20 条规则。

  • 规则按照其在组中的显示顺序进行评估。 可以使用上移下移选项更改规则的顺序。

  • 若要添加新记录规则,请执行以下操作:

  1. 选择“+ 添加记录规则”,打开“创建记录规则”窗格。
  2. 输入规则的“名称”。 此名称是规则创建的指标的名称。
  3. 输入规则的 PromQL 表达式
  4. 选择是否在创建时启用规则。
  5. 可以为规则输入可选的“标签”键值对。 这些标签将添加到规则创建的指标中。
  6. 选择“创建”将新规则添加到规则列表中。

显示 Prometheus 规则组记录规则的配置的屏幕截图。

  • 若要添加新的警报规则,请执行以下操作:
  1. 选择“+ 添加警报规则”,打开“创建警报规则”窗格。
  2. 选择此规则触发的警报的“严重性”。
  3. 输入规则的“名称”。 此名称是规则触发的警报的名称。
  4. 输入规则的 PromQL 表达式
  5. 选择“For”值,确定警报表达式第一次变为 true 和直到警报被触发之间的时间段。
  6. 可以为规则输入可选的“注释”键值对。 这些注释将添加到规则触发的警报中。
  7. 可以为规则输入可选的“标签”键值对。 这些标签将添加到规则触发的警报中。
  8. 选择规则触发的操作组
  9. 选择“自动解除警报”,以在“自动解除的时间”段期间,当规则条件不再为 true 时自动解除警报。
  10. 选择是否在创建时启用规则。
  11. 选择“创建”将新规则添加到规则列表中。

显示 Prometheus 规则组警报规则的配置的屏幕截图。

完成创建规则组

  1. 在“标记”选项卡上,设置要添加到规则组资源的任何所需的 Azure 资源标记。 显示创建新警报规则时“标记”选项卡的屏幕截图。
  2. 在“审核 + 创建”选项卡中,将验证该规则组并告知所有问题。 在此选项卡上,还可以选择“查看自动化模板”选项,并为你要创建的组下载模板。
  3. 通过验证并查看设置后,选择“创建”按钮。 显示创建新警报规则时评价和创建选项卡的屏幕截图。
  4. 可以跟进规则组部署,以确保它成功完成或收到任何错误通知。

使用资源管理器模板创建 Prometheus 规则组

可以使用资源管理器模板创建和配置 Prometheus 规则组、预警规则和记录规则。 可以使用资源管理器模板,通过编程方式在所有环境中以一致且可重现的方式创建和配置规则组。

基本步骤如下所示:

  1. 将以下模板用作描述如何创建规则组的 JSON 文件。
  2. 使用任何部署方法(如 Azure 门户Azure CLIAzure PowerShellRest API)部署模板。

Prometheus 规则组的模板示例

以下是用于创建 Prometheus 规则组的示例模板,其中包括一条记录规则和一条警报规则。 此模板将创建类型为 Microsoft.AlertsManagement/prometheusRuleGroups 的资源。 此组的范围仅限于单个 AKS 群集。 规则按照其在组中显示的顺序执行。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
           "name": "sampleRuleGroup",
           "type": "Microsoft.AlertsManagement/prometheusRuleGroups",
           "apiVersion": "2023-03-01",
           "location": "northcentralus",
           "properties": {
                "description": "Sample Prometheus Rule Group",
                "scopes": [
                    "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.monitor/accounts/<azure-monitor-workspace-name>",
                    "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.containerservice/managedclusters/<myClusterName>"
                ],
                "enabled": true,
                "clusterName": "<myCLusterName>",
                "interval": "PT1M",
                "rules": [
                    {
                        "record": "instance:node_cpu_utilisation:rate5m",
                        "expression": "1 - avg without (cpu) (sum without (mode)(rate(node_cpu_seconds_total{job=\"node\", mode=~\"idle|iowait|steal\"}[5m])))",
                        "labels": {
                            "workload_type": "job"
                        },
                        "enabled": true
                    },
                    {
                        "alert": "KubeCPUQuotaOvercommit",
                        "expression": "sum(min without(resource) (kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\", resource=~\"(cpu|requests.cpu)\"})) /  sum(kube_node_status_allocatable{resource=\"cpu\", job=\"kube-state-metrics\"}) > 1.5",
                        "for": "PT5M",
                        "labels": {
                            "team": "prod"
                        },
                        "annotations": {
                            "description": "Cluster has overcommitted CPU resource requests for Namespaces.",
                            "runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuquotaovercommit",
                            "summary": "Cluster has overcommitted CPU resource requests."
                        },
                        "enabled": true,
                        "severity": 3,
                        "resolveConfiguration": {
                            "autoResolved": true,
                            "timeToResolve": "PT10M"
                        },
                        "actions": [
                            {
                               "actionGroupID": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.insights/actiongroups/<action-group-name>"
                            }
                        ]
                    }
                ]
            }
        }
    ]
}        

下表描述了规则定义中的每个属性。

规则组

规则组包含以下属性。

名称 必需 类型​​ 说明
name True 字符串 Prometheus 规则组名
type True 字符串 Microsoft.AlertsManagement/prometheusRuleGroups
apiVersion True 字符串 2023-03-01
location True string 资源位置不受支持的区域。
properties.description False string 规则组说明。
properties.scopes True string[] 必须包含目标 Azure Monitor 工作区 ID。 还可以选择再包含一个群集 ID。
properties.enabled False boolean 启用/禁用组。 默认为 true。
properties.clusterName False string 必须与添加到从目标群集抓取的指标的 cluster 标签匹配。 默认情况下,设置为出现在范围[]中的群集 ID 的最后一部分(即资源名称)。
properties.interval False 字符串 组评估间隔。 默认值 = PT1M

记录规则

rules 部分包含以下记录规则属性。

名称 必需 类型​​ 说明
record True 字符串 记录规则名。 此名称用于新的时序。
expression True 字符串 用于计算新时序值的 PromQL 表达式。
labels True 字符串 Prometheus 规则标签键值对。 这些标签将添加到记录的时序中。
enabled False boolean 启用/禁用组。 默认为 true。

警报规则

rules 部分包含以下警报规则属性。

名称 必需 类型​​ 说明 说明
alert False 字符串 警报规则名称
expression True 字符串 要计算的 PromQL 表达式。
for False 字符串 警报触发超时。 值 - PT1M、PT5M 等。
labels False object 标签键值对 Prometheus 警报规则标签。 这些标签将添加到此规则触发的警报中。
rules.annotations False object 批注要添加到警报的键值对。
enabled False boolean 启用/禁用组。 默认为 true。
rules.severity False 整型 警报严重性。 0-4,默认值为 3(信息性)
rules.resolveConfigurations.autoResolved False boolean 启用后,当条件不再为 true 时,会自动解除警报。 默认值 = true
rules.resolveConfigurations.timeToResolve False 字符串 警报自动解除超时。 默认值 = “PT5M”
rules.action[].actionGroupId false 字符串 一个或多个操作组资源 ID。 触发警报时会激活每个 ID。

将 Prometheus 规则文件转换为 Prometheus 规则组 ARM 模板

如果你有一个 Prometheus 规则配置文件(YAML 格式),现在可以使用 az-prom-rules-converter 实用工具将其转换为 Azure Prometheus 规则组 ARM 模板。 规则文件可以包含一个或多个规则组的定义。

除了规则文件,还必须为实用工具提供创建 Azure Prometheus 规则组所需的其他属性,包括:订阅、资源组、位置、目标 Azure Monitor 工作区、目标群集 ID 和名称和操作组(用于警报规则)。 该实用工具会创建一个模板文件,它可以直接部署,也可以在部署管道内部署,将这些属性中的一些作为参数提供。 为实用工具提供的属性用于模板中的所有规则组。 例如,文件中的所有规则组都在同一订阅、资源组和位置中创建,并使用同一 Azure Monitor 工作区。 如果操作组作为实用工具的参数提供,则模板中的所有警报规则都使用相同的操作组。 如果要更改此默认配置(例如,在不同的规则中使用不同的操作组),可以在部署之前根据需要编辑生成的模板。

注意

az-prom-convert-utility 作为附加工具提供。 建议查看生成的模板,并验证它是否与预期配置匹配。

使用 Azure CLI 创建 Prometheus 规则组

可以使用 Azure CLI 创建和配置 Prometheus 规则组、预警规则和记录规则。 以下示例代码使用 Azure Cloud Shell

  1. 门户中,选择“Cloud Shell”。 在提示符下,使用以下命令。

  2. 若要创建 Prometheus 规则组,请使用 az alerts-management prometheus-rule-group create 命令。 可以在用于创建和管理 Prometheus 规则组的 Azure CLI 命令az alerts-management prometheus-rule-group create 部分中查看有关 Prometheus 规则组创建命令的详细文档。

示例:使用规则创建新的 Prometheus 规则组

 az alerts-management prometheus-rule-group create -n TestPrometheusRuleGroup -g TestResourceGroup -l westus --enabled --description "test" --interval PT10M --scopes "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.monitor/accounts/testaccount" --rules [{"record":"test","expression":"test","labels":{"team":"prod"}},{"alert":"Billing_Processing_Very_Slow","expression":"test","enabled":"true","severity":2,"for":"PT5M","labels":{"team":"prod"},"annotations":{"annotationName1":"annotationValue1"},"resolveConfiguration":{"autoResolved":"true","timeToResolve":"PT10M"},"actions":[{"actionGroupId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/microsoft.insights/actionGroups/test-action-group-name1","actionProperties":{"key11":"value11","key12":"value12"}},{"actionGroupId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/microsoft.insights/actionGroups/test-action-group-name2","actionProperties":{"key21":"value21","key22":"value22"}}]}]

使用 PowerShell 创建新的 Prometheus 规则组

若要使用 PowerShell 创建 Prometheus 规则组,请使用 new-azprometheusrulegroup cmdlet。

示例:使用规则创建 Prometheus 规则组定义。

$rule1 = New-AzPrometheusRuleObject -Record "job_type:billing_jobs_duration_seconds:99p5m"
$action =  New-AzPrometheusRuleGroupActionObject -ActionGroupId /subscriptions/fffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/MyresourceGroup/providers/microsoft.insights/actiongroups/MyActionGroup -ActionProperty @{"key1" = "value1"}
$Timespan = New-TimeSpan -Minutes 15
$rule2 = New-AzPrometheusRuleObject -Alert Billing_Processing_Very_Slow -Expression "job_type:billing_jobs_duration_seconds:99p5m > 30" -Enabled $false -Severity 3 -For $Timespan -Label @{"team"="prod"} -Annotation @{"annotation" = "value"} -ResolveConfigurationAutoResolved $true -ResolveConfigurationTimeToResolve $Timespan -Action $action
$rules = @($rule1, $rule2)
$scope = "/subscriptions/fffffffff-ffff-ffff-ffff-ffffffffffff/resourcegroups/MyresourceGroup/providers/microsoft.monitor/accounts/MyAccounts"
New-AzPrometheusRuleGroup -ResourceGroupName MyresourceGroup -RuleGroupName MyRuleGroup -Location eastus -Rule $rules -Scope $scope -Enabled

查看 Prometheus 规则组

可以通过以下方法之一在 Azure 门户中查看 Prometheus 规则组及其包含的规则:

  • 门户主页的搜索框中,查找 Prometheus 规则组
  • 门户主页中,选择“监视”>“警报”,然后选择“Prometheus 规则组”显示如何从警报屏幕查看 Prometheus 规则组的屏幕截图。
  • 在特定 Azure Kubernetes 服务 (AKS) 资源或特定 Azure Monitor 工作区 (AMW) 的页面中,选择“监视”>“警报”,然后选择“Prometheus 规则组”,以查看此特定资源的规则组列表。 可以从列表中选择要查看或编辑其详细信息的规则组。

查看 Prometheus 规则组的资源运行状况状态

现在可以查看门户中 Prometheus 规则组的资源运行状况状态。 这可以检测规则组中的问题,例如配置不正确或查询限制问题

  1. 门户中,转到要监视的 Prometheus 规则组概述
  2. 在左侧窗格的“帮助”下,选择“资源健康状况”。 显示如何查看 Prometheus 规则组的资源运行状况状态的屏幕截图。
  3. 在规则组资源运行状况屏幕中,可以看到规则组的当前可用性状态,以及最近资源运行状况事件的历史记录,最长可追溯到 30 天。 显示如何查看 Prometheus 规则组的资源运行状况历史记录的屏幕截图。
  • 如果规则组标记为“可用”,则它会按预期工作。
  • 如果规则组标记为“降级”,则组中的一个或多个规则无法按预期工作。 这可能是由于规则查询受到限制,或者可能导致规则评估失败的其他问题。 展开状态条目,详细了解检测到的问题,以及缓解建议或进一步进行故障排除。
  • 如果规则组标记为“不可用”,则整个规则组无法按预期工作。 这可能是由于配置问题(例如,无法检测到 Azure Monitor 工作区)或内部服务问题。 展开状态条目,详细了解检测到的问题,以及缓解建议或进一步进行故障排除。
  • 如果规则组标记为“未知”,则整个规则组处于禁用状态或处于未知状态。

禁用和启用规则组

若要启用或禁用规则,请在 Azure 门户中选择规则组。 可选择“启用”或“禁用”来更改其状态。

后续步骤