次の方法で共有


Prometheus 用 Azure Monitor マネージド サービスのルール グループ

Prometheus のルールは、データが収集されるときにデータに作用します。 これらは、 Azure Monitor ワークスペースの Prometheus メトリックに適用される Prometheus ルール グループの一部として構成されます。

ルールの種類

Prometheus ルールには 2 種類あります。

タイプ 説明
アラート アラート ルール を使用すると、Prometheus クエリ言語 (PromQL) クエリの結果に基づいて Azure Monitor アラートを作成できます。 Azure Managed Prometheus アラート ルールによって発生したアラートは、他の Azure Monitor アラートと同様の方法で処理され、通知をトリガーします。
録音 レコーディング ルールを使うと、頻繁に必要な式または計算量の多い式を事前に計算し、その結果を新しい時系列セットとして保存できます。 レコーディング ルールによって作成された時系列は、新しい Prometheus メトリックとして Azure Monitor ワークスペースに再び取り込まれます。

Prometheus のルールを作成する

Azure リソースの種類の Microsoft.AlertsManagement/prometheusRuleGroupsを使用して、Azure Managed Prometheus ルール グループ、記録ルール、アラート ルールを作成して構成できます。 アラート ルールと記録ルールは、ルール グループのプロパティの一部として定義されます。 Prometheus の規則グループは、特定の Azure Monitor ワークスペースのスコープで定義されます。 Prometheus ルール グループは、Azure Resource Manager テンプレート (ARM テンプレート)、API、Azure CLI、または PowerShell を使用して作成できます。

Azure Managed Prometheus ルール グループは、オープンソースの Prometheus ルール グループの構造と用語に従います。 ルール名、式、 for 句、ラベル、注釈はすべて Azure バージョンでサポートされています。 オープン ソースソフトウェアルールグループと Azure Managed Prometheus の主な違いは次のとおりです。

  • Azure Managed Prometheus ルール グループは Azure リソースとして管理され、Azure ルール グループが存在するサブスクリプションやリソース グループなど、リソース管理に必要な情報が含まれます。
  • Azure Managed Prometheus アラート ルールには、他の Azure Monitor アラートと同様にアラートを処理できる専用のプロパティが含まれています。 たとえば、アラートの重大度、アクション グループの関連付け、アラートの自動解決の構成は、Azure Managed Prometheus アラート ルールの一部としてサポートされています。

Azure Kubernetes Service (AKS) または Azure Arc 対応 Kubernetes クラスターの場合は、推奨されるアラート ルールの一部を使用できます。 定義済みのアラート ルールについては、 この Web サイトを参照してください。

ルールを特定のクラスターに制限する

必要に応じて、ルール グループにクラスター スコープを追加するか、ルール グループ clusterName プロパティを使用して、1 つの特定のクラスターから送信されたデータに対してクエリを実行するように、ルール グループ内のルールを制限できます。 Azure Monitor ワークスペースに複数のクラスターからの大量のデータが含まれている場合は、ルールを 1 つのクラスターに制限します。 このような場合、すべてのデータに対して 1 つのルール セットを実行すると、パフォーマンスや調整の問題が発生する可能性があります。 クラスター スコープを使うと、複数の規則グループを作成できます。それぞれ同じルールで、各グループが異なるクラスターを対象として構成されます。

ARM テンプレートを使用してルール グループをクラスター スコープに制限するには、クラスターの Azure リソース ID 値をルール グループscopes[]一覧に追加します。 スコープの一覧には、引き続き Azure Monitor ワークスペースリソース ID が含まれている必要があります。 クラスター スコープとして、次のクラスター リソースの種類がサポートされています。

  • Azure Kubernetes Service クラスター (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 portal で Prometheus ルール グループを作成または編集する

Azure portal のホーム ページから新しいルール グループを作成するには:

  1. Azure portal で、[Monitor>Alerts] を選択します。

  2. [Prometheus ルール グループ] を選択します

    Azure Monitor アラート画面から Prometheus ルール グループに到達する方法を示すスクリーンショット。

  3. [+ 作成] を選択して、ルール グループの作成ウィザードを開きます。

    新しい Prometheus ルール グループを作成する手順を示すスクリーンショット。

ポータルのホーム ページから新しい規則グループを編集するには:

  1. Azure portal で、[Monitor>Alerts] を選択します。
  2. [Prometheus ルール グループ] を選択すると、サブスクリプション内の既存のルール グループの一覧が表示されます。
  3. 移動するためのルールグループを選択します。 編集モードに入ります。

規則グループのスコープを構成する

スコープ タブで:

  1. サブスクリプションで使用できるワークスペースの一覧から Azure Monitor ワークスペースを選択します。 このグループのルールは、このワークスペースのデータに対してクエリを実行します。

  2. ルール グループをクラスター スコープに制限するには、[ 特定のクラスター ] オプションを選択します。

    • 選択した Azure Monitor ワークスペースに既に接続されているクラスターの一覧からクラスターを選択します。
    • [クラスター名] の既定値が自動的に入力されます。 この値は、 cluster_aliasを使用してクラスター ラベルの値を変更した場合にのみ変更します。
  3. [次へ] を選択して、ルール グループの詳細を構成します。

    Prometheus ルール グループのスコープの構成を示すスクリーンショット。

規則グループの詳細を構成する

[詳細] タブでは:

  1. ルール グループを格納するサブスクリプションとリソース グループを選択します。

  2. ルール グループの名前と説明を入力します。 この名前は、ルール グループの作成後に変更することはできません。

  3. ルール グループに対して [評価間隔] の期間を選びます。 既定値は 1 分です。

  4. ルール グループの作成時に有効にするかどうかを選択します。

  5. [次へ] を選択してグループのルールを構成します。

    Prometheus ルール グループの詳細の構成を示すスクリーンショット。

グループのルールを構成する

[ ルール ] タブには、グループ内の記録ルールとアラート ルールの一覧が表示されます。 1 つのグループに最大 20 個のルールを追加できます。

ルールは、グループに表示される順序で評価されます。 ルールの順序は、[ 上へ移動 ] オプションと [下へ 移動 ] オプションを使用して変更できます。

新しいレコーディング ルールを追加するには:

  1. [+ レコーディング ルールの追加] を選択して、[レコーディング ルールの作成] ペインを開きます。
  2. ルールの名前を入力します。 この名前は、ルールによって作成されたメトリックの名前です。
  3. PromQLに特化したエディターボックスを使用して、ルールのPromQL式の値を入力します。 式クエリの結果をプレビュー グラフで視覚化して確認できます。 プレビューの時間範囲を変更して、式の結果履歴を拡大または縮小できます。
  4. 作成時にルールを有効にするかどうかを選択します。
  5. オプションで、ルールに対して [ラベル] のキーと値のペアを入力できます。 これらのラベルは、ルールによって作成されたメトリックに追加されます。
  6. [作成] を選択して、新しいルールをルール リストに追加します。

Prometheus ルール グループの記録ルールの構成を示すスクリーンショット。

新しい警告ルールを追加するには:

  1. [ + アラート ルールの追加] を選択して、[ アラート ルールの作成 ] ウィンドウを開きます。
  2. このルールによって発生したアラートの 重大度 の値を選択します。
  3. ルールの名前を入力します。 この名前は、このルールで発生したアラートの名前です。
  4. PromQL に対応した 式エディター ボックスを使用して、ルールの PromQL 式の値を入力します。 式クエリの結果をプレビュー グラフで視覚化して確認できます。 プレビューの時間範囲を変更して、式の結果履歴を拡大または縮小できます。
  5. アラート式が最初に true になってから、アラートが発生するまでの期間の [待機] 値を選択します。
  6. オプションで、ルールに対して [注釈] のキーと値のペアを入力できます。 この注釈は、このルールで発生したアラートに追加されます。
  7. オプションで、ルールに対して [ラベル] のキーと値のペアを入力できます。 これらのラベルは、ルールによって生成されるアラートに追加されます。
  8. ルールからトリガーされるアクション グループを選択します。
  9. [アラートを自動的に解決する] を選択すると、[自動解決するまでの時間] の間にルールの条件を満たさなくなった場合、アラートが自動的に解決されます。
  10. 作成時にルールを有効にするかどうかを選択します。
  11. [作成] を選択して、新しいルールをルール リストに追加します。

Prometheus ルール グループのアラート ルールの構成を示すスクリーンショット。

アラート ルールの場合、式クエリは通常、式の条件を満たす時系列のみを返します。 プレビュー グラフが表示されず、"クエリは結果を返さなかった" というメッセージが表示される場合は、プレビュー時間の範囲内で条件が満たされなかった可能性があります。

規則グループの作成を完了する

  1. [タグ] タブで、規則グループ リソースに追加するために必要な Azure リソース タグを設定します。

    新しいアラート ルールの作成時の [タグ] タブを示すスクリーンショット。

  2. [ 確認と作成 ] タブで、ルール グループが検証され、問題について知らせます。 このタブでは、[ 自動化テンプレートの表示 ] オプションを選択し、作成しようとしているグループのテンプレートをダウンロードすることもできます。

  3. 検証に合格し、設定を確認したら、[ 作成] を選択します。

    新しいアラート ルールを作成するときの [確認と作成] タブを示すスクリーンショット。

  4. ルール グループの展開をフォローアップして、正常に完了したことを確認したり、エラーの通知を受け取ったりすることができます。

ARM テンプレートを使用して Prometheus ルール グループを作成する

ARM テンプレートを使用して、Prometheus ルール グループ、アラート ルール、および記録ルールを作成および構成できます。 ARM テンプレートを使用すると、すべての環境で一貫した再現可能な方法でルール グループをプログラムで作成および構成できます。

基本的な手順は次のとおりです。

  1. ルール グループの作成方法が記述されている JSON ファイルとして、以下のテンプレートを使います。
  2. Azure portal、AzureCLIAzure PowerShellREST 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>"
                            }
                        ]
                    }
                ]
            }
        }
    ]
}        

次の表では、ルール定義の各プロパティについて説明します。

ルール グループ

ルール グループには次のプロパティが含まれます。

名前 必須 タイプ 説明
name 正しい 文字列 Prometheus ルール グループの名前。
type 正しい 文字列 Microsoft.AlertsManagement/prometheusRuleGroups
apiVersion 正しい 文字列 2023-03-01
___location 正しい 文字列 サポートされているリージョン外のリソースの場所。
properties.description いいえ 文字列 ルール グループの説明。
properties.scopes 正しい string[] ターゲットの Azure Monitor ワークスペース ID を含める必要があります。 必要に応じて、もう 1 つのクラスター ID を含めることができます。
properties.enabled いいえ ブール値 グループを有効または無効にします。 既定値は true です。
properties.clusterName いいえ 文字列 ターゲット クラスターから収集されたメトリックに追加される cluster ラベルと一致する必要があります。 既定では、 scopes[]に表示されるクラスター ID の最後の部分 (リソース名) に設定します。
properties.interval いいえ 文字列 グループの評価の間隔。 既定値 = PT1M

レコーディング ルール

rules セクションには、レコーディング ルール用の次のプロパティがあります。

名前 必須 タイプ 説明
record 正しい 文字列 録音ルールの名前。 この名前は新しい時系列に対して使用されます。
expression 正しい 文字列 新しい時系列の値を計算する PromQL 式。
labels 正しい 文字列 Prometheus ルールは、キーと値のペアにラベルを付けます。 これらのラベルは、記録された時系列に付与されます。
enabled いいえ ブーリアン グループを有効または無効にします。 既定値は true です。

アラート ルール

rules セクションには、アラート ルール用の次のプロパティがあります。

名前 必須 タイプ 説明 注記
alert いいえ 文字列 アラート ルール名。
expression 正しい 文字列 評価する PromQL 式。
for いいえ 文字列 アラート生成のタイムアウト。 値 = PT1MPT5Mなど。
labels いいえ オブジェクト キーと値のペアにラベルを付けます。 Prometheus アラート ルールのラベル。 これらのラベルは、このルールによって発生したアラートに付与されます。
rules.annotations いいえ オブジェクト アラートに追加する注釈のキーと値のペア。
enabled いいえ ブール値 グループを有効または無効にします。 既定値は true です。
rules.severity いいえ 整数 アラートの重大度。 0 から 4、既定値は 3 (情報) です。
rules.resolveConfigurations.autoResolved いいえ ブール値 有効にすると、条件が満たされなくなった時点でアラートは自動的に解決されます。 既定値 = true
rules.resolveConfigurations.timeToResolve いいえ 文字列 アラートの自動解決のタイムアウト。 既定値 = PT5M
rules.action[].actionGroupId 偽り 文字列 1 つ以上のアクション グループ リソース ID。 アラートが発生すると、それぞれがアクティブになります。

Prometheus ルール ファイルを Prometheus ルール グループ ARM テンプレートに変換する

Prometheus ルール構成ファイル (YAML 形式) がある場合は、az-prom-rules-converter ユーティリティを使用して、Azure Prometheus ルール グループの ARM テンプレートに変換できるようになりました。 ルール ファイルには、1 つ以上のルール グループの定義を含めることができます。

ルール ファイルに加えて、Azure Prometheus ルール グループの作成に必要なその他のプロパティをユーティリティに提供する必要があります。 これらのプロパティには、サブスクリプション、リソース グループ、場所、ターゲット Azure Monitor ワークスペース、ターゲット クラスター ID と名前、アクション グループ (アラート ルールに使用) が含まれます。 このユーティリティは、これらのプロパティの一部をパラメーターとして提供する、直接または配置パイプ内にデプロイできるテンプレート ファイルを作成します。

ユーティリティに指定したプロパティは、テンプレート内のすべての規則グループに使用されます。 たとえば、ファイル内のすべてのルール グループは、同じサブスクリプション、リソース グループ、および場所に作成され、同じ Azure Monitor ワークスペースを使用します。 アクション グループがユーティリティのパラメーターとして指定されている場合、テンプレート内のすべての警告ルールで同じアクション グループが使用されます。 この既定の構成を変更する場合 (たとえば、異なるルールで異なるアクション グループを使用する)、デプロイする前に必要に応じて結果のテンプレートを編集できます。

az-prom-convert-utility ツールは、サービスの一環として提供されています。 結果のテンプレートを確認し、意図した構成と一致することを確認することをお勧めします。

Azure CLI を使用して Prometheus ルール グループを作成する

Azure CLI を使用して、Prometheus ルール グループ、アラート ルール、および記録ルールを作成および構成できます。 次の例では、Azure Cloud Shell を使用しています。

  1. portalCloud Shell を選択します。 プロンプトで、次のコマンドを使用します。

  2. Prometheus ルール グループを作成するには、az alerts-management prometheus-rule-group create コマンドを使用します。 このコマンドの詳細については、 Prometheus ルール グループを作成および管理するための Azure CLI コマンドに関するドキュメントを参照してください。

例: ルールと共に新しい 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 ルール グループを探します

  • ポータルの ホーム ページで、[ モニター>Alerts] を選択し、[ Prometheus ルール グループ] を選択します。

    アラート画面で Prometheus ルール グループを表示する方法を示すスクリーンショット。

  • 特定の AKS リソースまたは特定の Azure Monitor ワークスペースのページで、 Monitor>Alerts を選択し、 Prometheus ルール グループ を選択して、この特定のリソースのルール グループの一覧を表示します。 一覧からルール グループを選択して、その詳細を表示または編集できます。

Prometheus ルール グループのリソース正常性状態を表示する

ポータルで、Prometheus ルール グループのリソース正常性状態を表示できるようになりました。 正しくない構成やクエリ調整の問題など、ルール グループ内の問題を検出できます。

  1. ポータルで、監視する Prometheus ルール グループの概要に移動します。

  2. 左側のウィンドウの [ ヘルプ] で、[ リソースの正常性] を選択します。

    Prometheus ルール グループのリソース正常性状態を表示する方法を示すスクリーンショット。

  3. [ リソース正常性 ] ウィンドウで、ルール グループの現在の可用性状態を確認できます。 また、過去 30 日間までの最近のリソース正常性イベントの履歴を確認することもできます。

    Prometheus ルール グループのリソース正常性の履歴を表示する方法を示すスクリーンショット。

    • ルール グループが 使用可能としてマークされている場合は、想定どおりに動作します。
    • ルール グループが 機能低下としてマークされている場合、グループ内の 1 つ以上のルールが想定どおりに動作しません。 ルール クエリが制限されるか、他の問題によってルールの評価が失敗する可能性があります。 状態エントリを展開して、検出された問題、軽減策の提案、またはトラブルシューティングの詳細を確認します。
    • ルール グループが 使用不可としてマークされている場合、ルール グループ全体が想定どおりに動作しません。 構成の問題 (Azure Monitor ワークスペースを検出できないなど) や内部サービスの問題がある可能性があります。 状態エントリを展開して、検出された問題、軽減策の提案、またはトラブルシューティングの詳細を確認します。
    • ルール グループが [不明] と示されている場合は、ルール グループ全体が無効になっているか、不明な状態です。

ルール グループを無効および有効にする

ルール グループを有効または無効にするには、Azure portal でルール グループを選択します。 [有効] または [無効] を選んで、状態を変更します。