分享方式:


Azure 監視器適用於 Prometheus 的受管理服務規則群組

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-enabled Kubernetes 叢集 (Microsoft.kubernetes/connectedClusters)
  • Azure 連線設備 (Microsoft.ResourceConnector/appliances)

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

如果沒有指定規則群組的叢集識別碼範圍和 clusterName,則該群組中的規則會查詢工作區中所有叢集的資料。

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

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

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

  1. 入口網站中,選取 [監視]>[警示]
  2. 選取 [Prometheus 規則群組]顯示如何從 Azure 監視器警示畫面連接 Prometheus 規則群組的螢幕擷取畫面。
  3. 選取 [+ 建立] 以開啟規則群組建立精靈顯示如何建立新 Prometheus 警示規則的螢幕擷取畫面。

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

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

設定規則群組範圍

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

  1. 從訂用帳戶中可用的工作區清單中,選取 [Azure 監視器工作區]。 此群組中的規則會查詢此工作區中的資料。
  2. 若要將規則群組限制於叢集範圍,請選取 [特定叢集] 選項:
    • 從已連線到所選 Azure 監視器工作區的叢集清單中,選取 [叢集]
    • 系統會為您輸入預設的 [叢集名稱] 值。 只有當您使用 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. 選取從警示運算式第一次變成 true 到警示引發為止期間的 [持續時間] 值。
  6. 您可以為規則輸入選用的註釋機碼值組。 這些註釋會新增至規則引發的警示。
  7. 您可以為規則輸入選用的標籤機碼值組。 這些標籤會新增至規則所引發的警示。
  8. 選取規則觸發的動作群組
  9. 選取 [自動解決警示],以便在 [自動解決的時間] 期間內,規則條件不再為 true 時,自動解決警示。
  10. 選取規則是否要在建立時啟用。
  11. 選取 [建立],將新規則新增至規則清單。

顯示 Prometheus 規則群組警示規則設定的螢幕擷取畫面。

完成建立規則群組

  1. 在 [標籤] 索引標籤上,設定要新增至規則群組資源的任何必要的 Azure 資源標籤。 螢幕擷取畫面顯示建立新警示規則時的 [標籤] 索引標籤。
  2. 在 [檢閱 + 建立] 索引標籤上,系統會驗證群組規則,並讓您知道任何問題。 在此索引標籤上,您也可以選取 [檢視自動化範本] 選項,然後針對您要建立的群組下載範本。
  3. 當驗證通過且您已檢閱設定時,請選取 [建立] 按鈕。 螢幕擷取畫面顯示建立新警示規則時的 [檢閱並建立] 索引標籤。
  4. 您可以追蹤規則群組部署,確保部署順利完成,或在發生任何錯誤時收到通知。

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

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

基本步驟如下:

  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 string Prometheus 規則群組名稱
type True string Microsoft.AlertsManagement/prometheusRuleGroups
apiVersion True string 2023-03-01
location True 字串 資源位置位於不支援的區域。
properties.description False string 規則群組描述。
properties.scopes True string[] 必須包含目標 Azure 監視器工作區識別碼。 也可以選擇性地包含一或多個叢集識別碼。
properties.enabled False boolean 啟用/停用群組。 預設為 true。
properties.clusterName False string 必須符合從目標叢集抓取的計量中新增的 cluster 標籤。 預設為顯示在範圍[] 中叢集識別碼的最後一個部分 (資源名稱)。
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,系統就會自動解決警示。 預設值 = 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 CLIaz 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 Services (AKS) 資源的頁面中,或特定 Azure 監視器工作區 (AMW),選取 [監視]>[警示],然後選取 [Prometheus 規則群組],以檢視此特定資源的規則群組清單。 從清單中選取要檢視或編輯詳細資料的規則群組

檢視 Prometheus 規則群組的資源健康狀態

您現在可以在入口網站中檢視 Prometheus 規則群組的資源健康狀態。 這可讓您偵測到規則群組中的問題,例如不正確的設定或查詢節流問題。

  1. 入口網站中,移至您想要監視的 Prometheus 規則群組的概觀
  2. 在左窗格的 [說明] 之下,選取 [資源健康情況]顯示如何檢視 Prometheus 規則群組資源健康狀態的螢幕擷取畫面。
  3. 在規則群組資源健康狀態畫面中,您可以看到規則群組目前的可用性狀態,以及最近資源健康狀態事件的記錄,最多回溯 30 天。 顯示如何檢視 Prometheus 規則群組資源健康記錄的螢幕擷取畫面。
  • 如果規則群組標示為 [可用],則會如預期運作。
  • 如果規則群組標示為 [降級],則群組中的一或多個規則無法如預期般運作。 這可能是因為規則查詢正在進行節流,或可能是導致規則評估失敗的其他問題所造成。 展開狀態項目,以取得所偵測到問題的詳細資訊,以及風險降低或進一步疑難排解的建議。
  • 如果規則群組標示為 [無法使用],則整個規則群組無法如預期運作。 這可能是因為設定問題 (例如,無法偵測到 Azure 監視器工作區),或因為內部服務問題。 展開狀態項目,以取得所偵測到問題的詳細資訊,以及風險降低或進一步疑難排解的建議。
  • 如果規則群組標示為 [未知],則會停用整個規則群組或處於未知狀態。

停用和啟用規則群組

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

下一步