Prometheus 用 Azure Monitor マネージド サービスの規則グループ
Prometheus のルールは、収集されたデータに基づいて動作します。 これらは、Prometheus の規則グループの一部として構成され、Azure Monitor ワークスペースの Prometheus メトリックに適用されます。
ルールの種類
Prometheus のルールには、次の表で説明するように 2 つの種類があります。
型 | 説明 |
---|---|
アラート: | アラート ルールを使うと、Prometheus Query Language (Prom QL) のクエリの結果に基づいて Azure Monitor アラートを作成できます。 Azure Managed Prometheus アラート ルールによって発生したアラートは、他の Azure Monitor アラートと同様に処理され、通知をトリガーします。 |
記録中 | レコーディング ルールを使うと、頻繁に必要な式または計算量の多い式を事前に計算し、その結果を新しい時系列セットとして保存できます。 レコーディング ルールによって作成された時系列は、新しい Prometheus メトリックとして Azure Monitor ワークスペースに再び取り込まれます。 |
Prometheus のルールを作成する
Azure Managed Prometheus の規則グループ、レコーディング ルール、警告ルールは、Azure リソースの種類である Microsoft.AlertsManagement/prometheusRuleGroups を使用して作成および構成できます。この中では、警告ルールとレコーディング ルールが規則グループのプロパティの一部として定義されています。 Prometheus の規則グループは、特定の Azure Monitor ワークスペースのスコープで定義されます。 Prometheus ルール グループは、Azure Resource Manager (ARM) テンプレート、API、Azure CLI、または PowerShell を使用して作成できます。
Azure Managed Prometheus の規則グループは、オープン ソースの Prometheus 規則グループの構造と用語に従います。 ルール名、式、'for' 句、ラベル、注釈はすべて Azure バージョンでサポートされます。 OSS 規則グループと Azure Managed Prometheus の主な違いは次のとおりです。
- Azure Managed Prometheus の規則グループは Azure リソースとして管理され、Azure 規則グループが存在するサブスクリプションやリソース グループなど、リソース管理に必要な情報が含まれます。
- Azure Managed Prometheus の警告ルールには、他の Azure Monitor アラートと同様にアラートを処理できる専用のプロパティが含まれています。 たとえば、アラートの重大度、アクション グループの関連付け、アラートの自動解決の構成は、Azure Managed Prometheus の警告ルールの一部としてサポートされます。
Note
AKS または ARC Kubernetes クラスターの場合は、推奨されるアラート ルールの一部を使用できます。 事前に定義されたアラート ルールについては、こちらを参照してください。
特定のクラスターへのルールの制限
必要に応じて、規則グループにクラスター スコープを追加したり、規則グループの clusterName
プロパティを使ったりして、特定の単一クラスターからのデータに対してクエリを実行するように、規則グループのルールを制限できます。
Azure Monitor ワークスペースに複数のクラスターからの大量のデータが含まれている場合は、ルールを 1 つのクラスターに制限する必要があります。 このような場合、すべてのデータに対して 1 つのルール セットを実行すると、パフォーマンスや調整の問題が発生する可能性があるという懸念があります。 クラスター スコープを使うと、複数の規則グループを作成できます。それぞれ同じルールで、各グループが異なるクラスターを対象として構成されます。
ARM テンプレートを使用して規則グループをクラスター スコープに制限するには、クラスターの Azure リソース ID を scopes[] リストに追加する必要があります。 スコープ リストには、引き続き Azure Monitor ワークスペース リソース ID 含める必要があります。 クラスター スコープとして、次のクラスター リソースの種類がサポートされています。
- Azure Kubernetes Service (AKS) クラスター (Microsoft.ContainerService/managedClusters)
- Azure Arc 対応 Kubernetes クラスター (Microsoft.kubernetes/connectedClusters)
- Azure 接続済みアプライアンス (Microsoft.ResourceConnector/appliances)
クラスター ID に加えて、規則グループの clusterName プロパティを構成できます。 'clusterName' プロパティは、特定のクラスターからスクレイピングされたときにメトリックに追加される cluster
ラベルと一致する必要があります。 既定では、このラベルはクラスター ID の最後の部分 (リソース名) に設定されます。 クラスター スクレイピング構成マップで '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 portal で Prometheus の規則グループを作成または編集する
ポータルのホーム ページから新しい警告ルールを作成するには:
- portal で、[モニター]>[通知] の順に選択します。
- [Prometheus の規則グループ] を選択します。
- [+ 作成] を選択して、規則グループの作成ウィザードを開きます。
ポータルのホーム ページから新しい規則グループを編集するには:
- portal で、[モニター]>[通知] の順に選択します。
- [Prometheus の規則グループ] を選択して、サブスクリプション内の既存の規則グループの一覧を表示します。
- 目的の規則グループを選択して、編集モードに入ります。
規則グループのスコープを構成する
規則グループの [スコープ] タブ:
- サブスクリプションで使用できるワークスペースのリストから [Azure Monitor ワークスペース] を選択します。 このグループのルールは、このワークスペースのデータに対してクエリを実行します。
- 規則グループをクラスター スコープに制限するには、[特定のクラスター] オプションを選択します。
- 選択した Azure Monitor ワークスペースに既に接続されているクラスターのリストから [クラスター] を選択します。
- [クラスター名] の既定値が自動的に入力されます。 この値は、cluster_alias を使用してクラスター ラベル値を変更した場合にのみ変更する必要があります。
- [次へ] を選択して規則グループの詳細を構成します。
規則グループの詳細を構成する
規則グループの [詳細] タブ:
- 規則グループが格納される [サブスクリプション] と [リソース グループ] を選びます。
- 規則グループの [名前] と [説明] を入力します。 規則グループの作成後は、規則グループ名を変更できません。
- 規則グループに対して [評価間隔] の期間を選択します。 既定値は 1 分です。
- 作成時に規則グループを有効にするかどうかを選択します。
- [次へ] を選択してグループのルールを構成します。
グループのルールを構成する
規則グループの [ルール] タブには、グループ内のレコーディング ルールと警告ルールのリストが表示されます。
1 つのグループに最大 20 個のルールを追加できます。
ルールは、グループに出現する順序で評価されます。 ルールの順序は、[上へ移動] と [下へ移動] オプションを使用して変更できます。
新しいレコーディング ルールを追加するには:
- [+ レコーディング ルールの追加] を選択して、[レコーディング ルールの作成] ペインを開きます。
- ルールの [名前] を入力します。 この名前は、ルールによって作成されたメトリックの名前です。
- ルールの PromQL 式を入力します。
- 作成時にルールを有効にするかどうかを選択します。
- オプションで、ルールに対して [ラベル] のキーと値のペアを入力できます。 これらのラベルは、ルールによって作成されたメトリックに追加されます。
- [作成] を選択して、新しいルールをルール リストに追加します。
- 新しい警告ルールを追加するには:
- [+ 警告ルールの追加] を選択して [警告ルールの作成] ペインを開きます。
- このルールで発生したアラートの [重大度] を選択します。
- ルールの [名前] を入力します。 この名前は、このルールで発生したアラートの名前です。
- ルールの PromQL 式を入力します。
- アラート式が最初に true になってから、アラートが発生するまでの期間の For 値を選択します。
- オプションで、ルールに対して [注釈] のキーと値のペアを入力できます。 この注釈は、このルールで発生したアラートに追加されます。
- オプションで、ルールに対して [ラベル] のキーと値のペアを入力できます。 このラベルは、このルールで発生したアラートに追加されます。
- ルールからトリガーされるアクション グループを選択します。
- [アラートを自動的に解決する] を選択すると、[自動解決するまでの時間] の間にルールの条件を満たさなくなった場合、アラートが自動的に解決されます。
- 作成時にルールを有効にするかどうかを選択します。
- [作成] を選択して、新しいルールをルール リストに追加します。
規則グループの作成を完了する
- [タグ] タブで、規則グループ リソースに追加するために必要な Azure リソース タグを設定します。
- [確認と作成] タブで、規則グループが検証され、問題があれば通知されます。 このタブでは、[オートメーション テンプレートの表示] オプションを選択し、作成しようとしているグループのテンプレートをダウンロードすることもできます。
- 検証に合格し、設定を確認したら、[作成] ボタンを選択します。
- 規則グループの展開をフォローアップして、正常に完了したことを確認するか、エラーが発生した場合に通知を受け取ることができます。
Resource Manager テンプレートを使用した Prometheus ルール グループの作成
Resource Manager テンプレートを使って、Prometheus のルール グループ、アラート ルール、レコーディング ルールを作成および構成できます。 Resource Manager テンプレートを使うと、プログラムを使用して、あらゆる環境全体で一貫した再現可能な方法で、ルール グループを作成および構成できます。
基本的な手順は次のとおりです。
- ルール グループの作成方法が記述されている JSON ファイルとして、以下のテンプレートを使います。
- Azure portal、Azure CLI、Azure PowerShell、Rest API など、任意のデプロイ方法を使ってテンプレートをデプロイします。
Prometheus ルール グループのテンプレートの例
次に示すのは、1 つのレコーディング ルールと 1 つのアラート ルールを含む Prometheus ルール グループを作成するサンプル テンプレートです。 このテンプレートは、タイプ Microsoft.AlertsManagement/prometheusRuleGroups
のリソースを作成します。 このグループのスコープは、1 つの 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>"
}
]
}
]
}
}
]
}
次の表では、ルール定義の各プロパティについて説明します。
規則グループ
ルール グループには次のプロパティが含まれます。
名前 | Required | タイプ | 説明 |
---|---|---|---|
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 |
正しい | 文字列の配列 | ターゲットの Azure Monitor ワークスペース ID を含める必要があります。 必要に応じて、クラスター ID をもう 1 つ含めることもできます。 |
properties.enabled |
False | boolean | グループを有効または無効にします。 既定値は true です。 |
properties.clusterName |
False | string | ターゲット クラスターからスクレイピングされたメトリックに追加される cluster ラベルと一致する必要があります。 既定では、scopes[] に表示されるクラスター ID の最後の部分 (リソース名) に設定されます。 |
properties.interval |
いいえ | string | グループの評価の間隔。 既定値 = PT1M |
レコーディング ルール
rules
セクションには、レコーディング ルール用の次のプロパティがあります。
名前 | Required | タイプ | 説明 |
---|---|---|---|
record |
True | string | レコーディング ルールの名前。 この名前は新しい時系列に対して使用されます。 |
expression |
True | string | 新しい時系列の値を計算する PromQL 式。 |
labels |
True | string | Prometheus ルールは、キーと値のペアにラベルを付けます。 これらのラベルは、記録された時系列に付与されます。 |
enabled |
False | boolean | グループを有効または無効にします。 既定値は true です。 |
アラート ルール
rules
セクションには、アラート ルール用の次のプロパティがあります。
名前 | Required | タイプ | 説明設定 | Notes |
---|---|---|---|---|
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 | 整数 (integer) | アラートの重要度。 0 から 4、既定値は 3 (情報) | |
rules.resolveConfigurations.autoResolved |
False | boolean | 有効にすると、条件が満たされなくなった時点でアラートは自動的に解決されます。 既定値 = true | |
rules.resolveConfigurations.timeToResolve |
False | string | アラートの自動解決タイムアウト。 既定値 = "PT5M" | |
rules.action[].actionGroupId |
false | string | 1 つ以上のアクション グループ リソース ID。 アラートが発生すると、それぞれがアクティブになります。 |
Prometheus ルール ファイルの Prometheus ルール グループ ARM テンプレートへの変換
Prometheus ルール構成ファイル (YAML 形式) がある場合は、az-prom-rules-converter ユーティリティを使用して、それを Azure Prometheus ルール グループ ARM テンプレートに変換できるようになりました。 ルール ファイルには、1 つ以上のルール グループの定義を含めることができます。
ルール ファイルに加えて、Azure Prometheus の規則グループを作成するために必要な他のプロパティをユーティリティに提供する必要があります。これにはサブスクリプション、リソース グループ、場所、ターゲット Azure Monitor ワークスペース、ターゲット クラスター ID と名前、そしてアクション グループ (警告ルールに使用) が含まれます。 ユーティリティは、これらのプロパティの一部をパラメーターとして提供する、直接デプロイまたはデプロイ パイプ内でデプロイできるテンプレート ファイルを作成します。 ユーティリティに指定したプロパティは、テンプレート内のすべての規則グループに使用されます。 たとえば、ファイル内のすべての規則グループは、同じサブスクリプション、リソース グループ、場所に作成され、同じ Azure Monitor ワークスペースを使用します。 アクション グループがユーティリティのパラメーターとして指定されている場合、テンプレート内のすべての警告ルールで同じアクション グループが使用されます。 この既定の構成を変更したい (たとえば、異なるルールで異なるアクション グループを使用するなど) 場合は、結果のテンプレートをデプロイ前に必要に応じて編集できます。
Note
az-prom-convert-utility は、提供ツールとして提供されています。 結果のテンプレートを確認し、意図した構成と一致していることを確認することをお勧めします。
Azure CLI を使用した Prometheus ルール グループの作成
Azure CLI を使って、Prometheus のルール グループ、アラート ルール、レコーディング ルールを作成および構成できます。 次の例では、Azure Cloud Shell を使用しています。
portal で Cloud Shell を選択します。 プロンプトで、次のコマンドを使用します。
Prometheus ルール グループを作成するには、
az alerts-management prometheus-rule-group create
コマンドを使用します。 Prometheus ルール グループの作成コマンドに関する詳細なドキュメントについては、「Prometheus ルール グループを作成および管理するための Azure CLI コマンド」のaz alerts-management prometheus-rule-group create
セクションで確認できます。
例: ルールと共に新しい 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 コマンドレットを使用します。
例: ルールと共に 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 のルール グループを表示する
Prometheus ルール グループとそれに含まれるルールは、次のいずれかの方法で Azure portal で表示できます。
- ポータルのホーム ページの検索ボックスで、Prometheus ルール グループを探します。
- ポータルのホーム ページで、[モニター]>[アラート] を選択し、次に [Prometheus ルール グループ] を選択します。
- 特定の Azure Kubernetes Services (AKS) リソースまたは特定の Azure Monitor (AMW) ワークスペース のページで、[モニター]>[アラート] を選択し、次に [Prometheus ルール グループ] を選択して、この特定のリソースのルール グループの一覧を表示します。 一覧からルール グループを選択して、その詳細を表示または編集できます。
Prometheus ルール グループのリソース正常性状態を表示する
ポータルで、Prometheus ルール グループのリソース正常性状態を表示できるようになりました。 これにより、正しくない構成やクエリ調整の問題などのルール グループ内の問題を検出できます
- ポータルで、監視する Prometheus ルール グループの概要に移動します
- 左側のウィンドウの [ヘルプ] で、[リソース正常性] を選択します。
- ルール グループのリソース正常性画面に、ルール グループの現在の可用性の状態と、最近のリソース正常性イベントの履歴 (30 日前まで) を表示できます。
- ルール グループが [使用可能] と示されている場合は、予期したとおりに動作しています。
- ルール グループが [デグレード] と示されている場合は、グループ内の 1 つ以上のルールが予期したとおりに動作していません。 これは、ルール クエリが抑えられているか、ルールの評価を失敗させる場合があるその他の問題が原因である可能性があります。 検出された問題の詳細と、軽減策やさらに詳細なトラブルシューティングに関する推奨事項を確認するには、状態エントリを展開してください。
- ルール グループが [使用不可] と示されている場合は、ルール グループ全体が予期したとおりに動作していません。 これは、構成の問題 (Azure Monitor ワークスペースを検出できないなど) や、内部サービスの問題が原因である可能性があります。 検出された問題の詳細と、軽減策やさらに詳細なトラブルシューティングに関する推奨事項を確認するには、状態エントリを展開してください。
- ルール グループが [不明] と示されている場合は、ルール グループ全体が無効になっているか、不明な状態です。
ルール グループを無効および有効にする
ルール グループを有効または無効にするには、Azure portal でルール グループを選択します。 [有効] または [無効] を選んで、状態を変更します。