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 規則群組
若要從入口網站首頁建立新的規則群組:
- 在入口網站中,選取 [監視]>[警示]。
- 選取 [Prometheus 規則群組]
- 選取 [+ 建立] 以開啟規則群組建立精靈
若要從入口網站首頁編輯新的規則群組:
- 在入口網站中,選取 [監視]>[警示]。
- 選取 [Prometheus 規則群組],查看訂用帳戶中現有的規則群組清單
- 選取需要的規則群組,進入編輯模式。
設定規則群組範圍
在規則群組的 [範圍] 索引標籤中:
- 從訂用帳戶中可用的工作區清單中,選取 [Azure 監視器工作區]。 此群組中的規則會查詢此工作區中的資料。
- 若要將規則群組限制於叢集範圍,請選取 [特定叢集] 選項:
- 從已連線到所選 Azure 監視器工作區的叢集清單中,選取 [叢集]。
- 系統會為您輸入預設的 [叢集名稱] 值。 只有當您使用 cluster_alias 變更叢集標籤值時,才能變更此值。
- 選取 [下一步],設定規則群組詳細資料
設定規則群組詳細資料
在規則群組的 [詳細資料] 索引標籤上:
- 選取用來儲存規則群組的 [訂用帳戶] 和 [資源群組]。
- 輸入規則群組的 [名稱] 和 [描述]。 建立規則群組之後,就無法變更規則組名稱。
- 選取規則群組的 [評估間隔] 期間。 預設值為 1 分鐘。
- 選取規則群組是否要在建立時啟用。
- 選取 [下一步],設定群組中的規則。
設定群組中的規則
在規則群組的 [規則] 索引標籤上,您可以看到群組中的記錄規則和警示規則清單。
在單一群組中新增規則的上限是 20 個規則。
規則會依其在群組中出現的順序進行評估。 您可以使用 [上移] 和 [下移] 選項來變更規則的順序。
若要新增記錄規則:
- 選取 [+ 新增記錄規則],以開啟 [建立記錄規則] 窗格。
- 輸入規則的 [名稱]。 此名稱是規則所建立計量的名稱。
- 輸入規則的 PromQL 運算式。
- 選取規則是否要在建立時啟用。
- 您可以為規則輸入選用的標籤機碼值組。 這些標籤會新增至規則所建立的計量。
- 選取 [建立],將新規則新增至規則清單。
- 若要新增警示規則:
- 選取 [+ 新增警示規則] 以開啟 [建立警示規則] 窗格。
- 選取此規則所引發的警示嚴重性。
- 輸入規則的 [名稱]。 此名稱是規則所引發的警示名稱。
- 輸入規則的 PromQL 運算式。
- 選取從警示運算式第一次變成 true 到警示引發為止期間的 [持續時間] 值。
- 您可以為規則輸入選用的註釋機碼值組。 這些註釋會新增至規則引發的警示。
- 您可以為規則輸入選用的標籤機碼值組。 這些標籤會新增至規則所引發的警示。
- 選取規則觸發的動作群組。
- 選取 [自動解決警示],以便在 [自動解決的時間] 期間內,規則條件不再為 true 時,自動解決警示。
- 選取規則是否要在建立時啟用。
- 選取 [建立],將新規則新增至規則清單。
完成建立規則群組
- 在 [標籤] 索引標籤上,設定要新增至規則群組資源的任何必要的 Azure 資源標籤。
- 在 [檢閱 + 建立] 索引標籤上,系統會驗證群組規則,並讓您知道任何問題。 在此索引標籤上,您也可以選取 [檢視自動化範本] 選項,然後針對您要建立的群組下載範本。
- 當驗證通過且您已檢閱設定時,請選取 [建立] 按鈕。
- 您可以追蹤規則群組部署,確保部署順利完成,或在發生任何錯誤時收到通知。
使用 Resource Manager 範本建立 Prometheus 規則群組
您可以使用 Resource Manager 範本,建立及設定 Prometheus 規則群組、警示規則和記錄規則。 Resource Manager 範本可讓您以程式設計方式,在環境中以一致且可重現的方式建立和設定規則群組。
基本步驟如下:
- 以 JSON 檔案形式使用下列範本,該檔案描述如何建立規則群組。
- 使用任何部署方法部署範本,例如 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 | 字串 | 資源位置位於不支援的區域。 |
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。
在入口網站中選取 [Cloud Shell]。 在提示中,使用下列命令。
若要建立 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/microsoft.insights/actionGroups/test-action-group-name1","actionProperties":{"key11":"value11","key12":"value12"}},{"actionGroupId":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 規則群組]。
- 在特定 Azure Kubernetes Services (AKS) 資源的頁面中,或特定 Azure 監視器工作區 (AMW),選取 [監視]>[警示],然後選取 [Prometheus 規則群組],以檢視此特定資源的規則群組清單。 從清單中選取要檢視或編輯詳細資料的規則群組
檢視 Prometheus 規則群組的資源健康狀態
您現在可以在入口網站中檢視 Prometheus 規則群組的資源健康狀態。 這可讓您偵測到規則群組中的問題,例如不正確的設定或查詢節流問題。
- 在入口網站中,移至您想要監視的 Prometheus 規則群組的概觀
- 在左窗格的 [說明] 之下,選取 [資源健康情況]。
- 在規則群組資源健康狀態畫面中,您可以看到規則群組目前的可用性狀態,以及最近資源健康狀態事件的記錄,最多回溯 30 天。
- 如果規則群組標示為 [可用],則會如預期運作。
- 如果規則群組標示為 [降級],則群組中的一或多個規則無法如預期般運作。 這可能是因為規則查詢正在進行節流,或可能是導致規則評估失敗的其他問題所造成。 展開狀態項目,以取得所偵測到問題的詳細資訊,以及風險降低或進一步疑難排解的建議。
- 如果規則群組標示為 [無法使用],則整個規則群組無法如預期運作。 這可能是因為設定問題 (例如,無法偵測到 Azure 監視器工作區),或因為內部服務問題。 展開狀態項目,以取得所偵測到問題的詳細資訊,以及風險降低或進一步疑難排解的建議。
- 如果規則群組標示為 [未知],則會停用整個規則群組或處於未知狀態。
停用和啟用規則群組
若要啟用或停用規則,請在 Azure 入口網站中選取規則群組。 選取 [啟用] 或 [停用] 以變更規則狀態。
下一步
- 深入了解 Azure 警示 (機器翻譯)。
- 記錄規則的 Prometheus 文件 (英文)。
- 警示規則的 Prometheus 文件 (英文)。