Prometheus 規則群組的 Azure 監視器受控服務

Prometheus 中的規則會在收集數據時對數據採取行動。 它們已設定為 Prometheus 規則群組的一部分,此群組會套用至 Azure 監視器工作區中的 Prometheus 計量。

規則類型

下表所述,Prometheus 規則有兩種類型。

類型 描述
警示 警示規則 可讓您根據 Prometheus 查詢語言 (Prom QL) 查詢的結果建立 Azure 監視器警示。 Azure 受控 Prometheus 警示規則所引發的警示會以與其他 Azure 監視器警示類似的方式處理和觸發通知。
錄製 錄製規則 可讓您預先計算經常需要或計算廣泛的表達式,並將其結果儲存為一組新的時間序列。 記錄規則所建立的時間序列會擷取回 Azure 監視器工作區作為新的 Prometheus 計量。

建立 Prometheus 規則

您可以使用 Azure 資源類型 Microsoft.AlertsManagement/prometheusRuleGroups 來建立和設定 Azure 受控 Prometheus 規則群組、錄製規則和警示規則,其中警示規則和錄製規則會定義為規則群組屬性的一部分。 Prometheus 規則群組是使用特定 Azure 監視器工作區的範圍來定義。 您可以使用 Azure Resource Manager(ARM) 範本、API、Azure CLI 或 PowerShell 來建立 Prometheus 規則群組。

Azure 受控 Prometheus 規則群組遵循 開放原始碼 Prometheus 規則群組的結構和術語。 Azure 版本中支援規則名稱、表達式、『for』 子句、標籤、批註。 應注意 OSS 規則群組與 Azure 受控 Prometheus 之間的下列主要差異:

  • Azure 受控 Prometheus 規則群組會以 Azure 資源的形式管理,並包含資源管理的必要資訊,例如 Azure 規則群組應所在的訂用帳戶和資源群組。
  • Azure 受控 Prometheus 警示規則包含專用屬性,可讓警示像其他 Azure 監視器警示一樣進行處理。 例如,在 Azure 受控 Prometheus 警示規則中,支援警示嚴重性、動作群組關聯和警示自動解決設定。

注意

針對 AKS 或 ARC Kubernetes 叢集,您可以使用一些建議的警示規則。 請參閱此處預先定義的警示規則

限制特定叢集的規則

您可以選擇性地限制規則群組中的規則,藉由將叢集範圍新增至規則群組,以及/或使用規則群組 clusterName 屬性來查詢源自單一特定叢集的數據。 如果您的 Azure 監視器工作區包含來自多個叢集的大量數據,您應該將規則限制為單一叢集。 在這種情況下,擔心對所有數據執行一組規則可能會導致效能或節流問題。 藉由使用叢集範圍,您可以建立多個規則群組,每個群組都會設定相同的規則,且每個群組涵蓋不同的叢集。

若要使用 ARM 範本將規則群組限製為叢集範圍,您應該將叢集的 Azure 資源識別元新增至規則群組範圍[] 列表。 範圍清單仍必須包含 Azure 監視器工作區資源識別碼。 叢集範圍支援下列叢集資源類型:

  • Azure Kubernetes Service 叢集 (AKS) (Microsoft.ContainerService/managedClusters)
  • 已啟用 Azure Arc 的 Kubernetes 叢集 (Microsoft.kubernetes/connectedClusters)
  • Azure 連線設備 (Microsoft.Resource 連線 or/appliance)

除了叢集標識碼之外,您還可以設定 規則群組的 clusterName 屬性。 'clusterName' 屬性必須符合 cluster 從特定叢集擷取時新增至計量的標籤。 根據預設,此標籤會設定為叢集標識碼的最後一個部分(資源名稱)。 如果您使用叢集中的 『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": [
             {
                ...
             }
         ]
    }
}        

如果叢集標識元範圍和 clusterName 未針對規則群組指定,群組中的規則會從所有叢集查詢工作區中所有叢集的規則。

您也可以使用 入口網站 UI 將規則群組限制為叢集範圍。

在 Azure 入口網站 中建立或編輯 Prometheus 規則群組 (預覽)

若要從入口網站首頁建立新的規則群組:

  1. 在入口網站,選取 [監視>警示]。
  2. 選取 Prometheus 規則群組Screenshot that shows how to reach Prometheus rule groups from Azure Monitor alerts screen.
  3. 選取 [+ 建立 ] 以開啟規則群組建立精靈 Screenshot that shows steps to create a new Prometheus rule group.

若要從入口網站首頁編輯新的規則群組:

  1. 在入口網站,選取 [監視>警示]。
  2. 選取 [Prometheus 規則群組 ],以查看訂用帳戶中現有的規則群組清單
  3. 選取想要的規則群組以進入編輯模式。

設定規則群組範圍

在規則群組 [範圍] 索引標籤上:

  1. 從訂用帳戶中可用的工作區清單中選取 Azure 監視器工作區。 此群組中的規則會從此工作區查詢數據。
  2. 若要將規則群組限制為叢集範圍,請選取 [ 特定叢集 ] 選項:
    • 從已連線到所選 Azure 監視器工作區的叢集清單中選取 [叢集]。
    • 系統會為您輸入預設 的 [叢集名稱] 值。 只有當您已使用 cluster_alias 變更叢集標籤值時,才應該變更此值。
  3. 選取 [下一步 ] 以設定規則群組詳細數據

Screenshot that shows configuration of Prometheus rule group scope.

設定規則群組詳細數據

在規則群組 [詳細資料] 索引標籤上:

  1. 選取應儲存規則群組的訂用帳戶和資源群組
  2. 輸入規則群組 [名稱 ] 和 [描述]。 建立規則群組之後,就無法變更規則組名。
  3. 選取規則群組的 [ 評估每個 期間]。 預設值為1分鐘。
  4. 選取建立時是否要啟用規則群組。
  5. 選取 [下一步 ] 以設定群組中的規則。

Screenshot that shows configuration of Prometheus rule group details.

在群組中設定規則

  • 在 [規則群組 規則] 索引標籤上,您可以看到群組中的錄製規則和警示規則清單。

  • 您可以在單一群組中新增最多 20 個規則的規則。

  • 規則會依照規則出現在群組中的順序進行評估。 您可以使用上移移選項來變更規則的順序。

  • 若要新增錄製規則:

  1. 選取 [+ 新增錄製規則 ] 以開啟 [ 建立錄製規則 ] 窗格。
  2. 輸入規則的名稱。 此名稱是規則所建立計量的名稱。
  3. 輸入規則的 PromQL 運算式
  4. 選取規則是否在建立時啟用。
  5. 您可以輸入規則的選擇性 標籤 索引鍵/值群組。 這些標籤會新增至規則所建立的計量。
  6. 選取 [建立 ] 以將新規則新增至規則清單。

Screenshot that shows configuration of Prometheus rule group recording rule.

  • 若要新增警示規則:
  1. 選取 [+ 新增警示規則 ] 以開啟 [建立警示規則] 窗格。
  2. 選取此規則引發的警示嚴重性
  3. 輸入規則的名稱。 此名稱是規則引發的警示名稱。
  4. 輸入規則的 PromQL 運算式
  5. 選取警示表達式之間第一次變成 true,直到引發警示為止的 [For] 值。
  6. 您可以輸入規則的選擇性 註釋 索引鍵/值組。 這些批注會新增至規則引發的警示。
  7. 您可以輸入規則的選擇性 標籤 索引鍵/值群組。 這些標籤會新增至規則引發的警示。
  8. 選取規則所觸發的動作群組
  9. 選取 [ 自動解決警示 ],以在 [自動解決期間] 期間 ,如果規則條件不再為 True,則自動解決 警示。
  10. 選取規則是否在建立時啟用。
  11. 選取 [建立 ] 以將新規則新增至規則清單。

Screenshot that shows configuration of Prometheus rule group alert rule.

完成建立規則群組

  1. 在 [ 卷標] 索引標籤上,設定要新增至規則群組資源的任何必要 Azure 資源標籤。 Screenshot that shows the Tags tab when creating a new alert rule.
  2. 在 [ 檢閱 + 建立] 索引標籤上,規則群組會經過驗證,並讓您知道任何問題。 在此索引標籤上,您也可以選取 [ 檢視自動化範本 ] 選項,並下載您要建立之群組的範本。
  3. 當驗證通過且您已檢閱設定時,請選取 [建立] 按鈕。 Screenshot that shows the Review and create tab when creating a new alert rule.
  4. 您可以追蹤規則群組部署,以確保它順利完成,或收到任何錯誤通知。

使用 Resource Manager 範本建立 Prometheus 規則群組

您可以使用 Resource Manager 範本來建立及設定 Prometheus 規則群組、警示規則和錄製規則。 Resource Manager 範本可讓您以程式設計方式在所有環境中以一致且可重現的方式建立和設定規則群組。

基本步驟如下:

  1. 使用下列範本作為 JSON 檔案,描述如何建立規則群組。
  2. 使用任何部署方法部署範本,例如Azure 入口網站、Azure CLI Azure PowerShell Rest 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 string Prometheus 規則組名
type True string Microsoft.AlertsManagement/prometheusRuleGroups
apiVersion True string 2023-03-01
location True string 預覽中支援之區域的資源位置。
properties.description False string 規則群組描述。
properties.scopes True string[] 必須包含目標 Azure 監視器工作區識別碼。 也可以選擇性地包含一個叢集識別碼。
properties.enabled False boolean 啟用/停用群組。 預設為 true。
properties.clusterName False string 必須符合 cluster 已新增至從目標叢集擷取之計量的標籤。 根據預設,將 設定為出現在 scopes[] 中的叢集識別碼的最後一個部分(資源名稱)。
properties.interval False string 群組評估間隔。 預設值 = PT1M

錄製規則

rules 段包含下列錄製規則的屬性。

名稱 必要 類型​​ 描述
record True string 錄製規則名稱。 這個名稱用於新的時間序列。
expression True string PromQL 運算式,用來計算新的時間序列值。
labels True string Prometheus 規則會標記索引鍵/值組。 這些標籤會新增至記錄的時間序列。
enabled False boolean 啟用/停用群組。 預設為 true。

警示規則

rules 段包含下列警示規則的屬性。

名稱 必要 類型​​ 描述 附註
alert False string 警示規則名稱
expression True string 要評估的 PromQL 運算式。
for False string 警示引發逾時。 值 - 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
rules.resolveConfigurations.timeToResolve False string 警示自動解決逾時。 預設值 = 「PT5M」
rules.action[].actionGroupId false string 一或多個動作群組資源識別碼。 引發警示時,會啟動每個警示。

將 Prometheus 規則檔案轉換為 Prometheus 規則群組 ARM 範本

如果您有 Prometheus 規則組態檔 (YAML 格式),您現在可以使用 az-prom-rules-converter 公用程式 將它轉換成 Azure Prometheus 規則群組 ARM 範本。 規則檔案可以包含一或多個規則群組的定義。

除了規則檔案之外,您必須提供公用程式以建立 Azure Prometheus 規則群組所需的其他屬性,包括:訂用帳戶、資源群組、位置、目標 Azure 監視器工作區、目標叢集識別碼和名稱,以及動作群組(用於警示規則)。 公用程式會建立範本檔案,該範本檔案可以直接部署,或在部署管道內提供其中一些屬性做為參數。 您提供給公用程式的屬性會用於範本中的所有規則群組。 例如,檔案中的所有規則群組都會在相同的訂用帳戶、資源群組和位置中建立,並使用相同的 Azure 監視器工作區。 如果動作群組是以公用程式的參數的形式提供,範本中的所有警示規則都會使用相同的動作群組。 如果您想要變更此預設組態(例如,在不同的規則中使用不同的動作群組),您可以在部署之前,根據需求編輯產生的範本。

注意

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 規則群組 create 命令的詳細檔。

範例:使用規則建立新的 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 監視器工作區中選取 [規則群組 ],以檢視規則群組及其包含在Azure 入口網站中的規則。

Screenshot of rule groups in an Azure Monitor workspace.

停用和啟用規則

若要啟用或停用規則,請選取Azure 入口網站中的規則。 選取 [ 啟用 ] 或 [停用 ] 以變更其狀態。

Screenshot of Prometheus rule detail with enable option.

注意

停用或重新啟用規則或規則群組之後,可能需要幾分鐘的時間,規則群組清單才會反映規則或群組的更新狀態。

下一步