Prometheus からアラートルールとレシーバーを移行する

このページでは、PromQL ベースの条件で Prometheus のアラート ルールを Cloud Monitoring アラート ポリシーに移行する方法について説明します。移行プロセスは、Google Cloud 以外の環境で PromQL を使用する場合に活用できます。Prometheus のアラートルールを Cloud Monitoring に移行することで、すべてのアラート ポリシーを 1 つの環境で管理できます。

PromQL ベースの条件によるアラート ポリシーの一般的な情報については、PromQL によるアラート ポリシーをご覧ください。

Grafana ダッシュボードをインポートすることもできます。詳細については、Grafana ダッシュボードを Cloud Monitoring にインポートするをご覧ください。

移行の仕組み

gcloud CLI で既存のアラートルールとレシーバーを移行して、Cloud Monitoring アラート ポリシーと通知チャンネルを作成できます。gcloud CLI は、次の種類の移行を行うことができます。

  • Prometheus 構成ファイルにアラートルールを指定すると、gcloud CLI は PromQL ベースの条件でアラート ポリシーを作成します。

    複数の Prometheus 構成ファイルを同時に指定して、PromQL ベースの条件で複数のアラート ポリシーを作成できます。

  • 少なくとも 1 つのレシーバーで Prometheus Alertmanager ファイルを指定すると、gcloud CLI は各レシーバーを Monitoring の同等の通知チャンネルに変換します。

  • Prometheus Alertmanager ファイルと Prometheus 構成ファイルを同時に指定すると、gcloud CLI によってアラート ポリシーと通知チャンネルが作成され、それぞれの新しい通知チャンネルが新しいアラート ポリシーに関連付けられます。

    アラートルールを使用して複数の構成ファイルを指定すると、gcloud CLI によって、Alertmanager ファイルからすべての通知チャンネルが新しい各アラート ポリシーに割り当てられます。

Prometheus アラートルールがカスタム指標を参照している場合、gcloud CLI にはアラート ポリシーを作成するための同等の指標記述子が必要です。

Prometheus 構成ファイルと Prometheus Alertmanager ファイルは、YAML または JSON のいずれかで有効な Prometheus ルールファイルとしてフォーマットする必要があります。

フィールド マッピング

gcloud CLI は、次のように Prometheus アラートルールと Cloud Monitoring アラート ポリシーのフィールド間にマッピングされます。

Prometheus のアラートルール Cloud Monitoring のアラート ポリシー
alert conditionPrometheusQueryLanguage.alertRule
expr conditionPrometheusQueryLanguage.query
for conditionPrometheusQueryLanguage.duration
labels conditionPrometheusQueryLanguage.labels
annotations: "summary" documentation.subject
annotations: "description" documentation.content

移行された Prometheus アラートルール内の Google Cloud ドキュメント変数

Prometheus は、アラート フィールド テンプレートを使用して、アラートルールのアノテーションとラベルに変数を構成します。アラート フィールド テンプレートを含む Prometheus アラートルールを移行すると、Cloud Monitoring はテンプレートを次のように Cloud Monitoring ドキュメント変数に変換します。

Prometheus アラート フィールド テンプレート Cloud Monitoring ドキュメント変数
{{$value}}

${metric.label.value}

この変数は、${metric.label.KEY} の実装であり、value は PromQL クエリの値を保持します。

{{humanize $value}}

${metric.label.value}

この変数は、${metric.label.KEY} の実装であり、value は PromQL クエリの値を保持します。

{{$labels}} ${metric_or_resource.labels}
{{humanize $labels}} ${metric_or_resource.labels}
{{$labels.key}}

アラート ポリシーのドキュメント構成で ${metric_or_resource.label.KEY} と表示されます。

  • KEY が有効なラベルである場合、この変数は ${metric.label.KEY} の値として通知に表示されます。
  • KEY が有効なリソースの場合、この変数は ${resource.label.KEY} の値として通知に表示されます。
  • KEY が有効なラベルでも有効なリソースでもない場合、この変数は通知に空の文字列として表示されます。
{{humanize $labels.<key>}}

アラート ポリシーのドキュメント構成で ${metric_or_resource.label.KEY} と表示されます。

  • KEY が有効なラベルである場合、この変数は ${metric.label.KEY} の値として通知に表示されます。
  • KEY が有効なリソースの場合、この変数は ${resource.label.KEY} の値として通知に表示されます。
  • KEY が有効なラベルでも有効なリソースでもない場合、この変数は通知に空の文字列として表示されます。

Prometheus からアラートルールとレシーバーを移行する

PromQL ベースの条件で Prometheus アラート ルールを Cloud Monitoring アラート ポリシーに移行するには、gcloud alpha monitoring policies migrate コマンドを使用します。このコマンドを使用して、Prometheus レシーバーを Cloud Monitoring 通知チャンネルに移行することもできます。

  • アラートルールを移行するには、アラートルールを含む YAML または JSON Prometheus ルールファイルが必要です。
  • レシーバーを移行するには、レシーバーを含む YAML または JSON Prometheus Alertmanager ファイルが必要です。

Google Cloud は、Prometheus 記録ルールの移行をサポートしていません。記録ルールを使用するには、セルフデプロイ ルール エバリュエータを使用することをおすすめします。

Prometheus 構成ファイルからアラート ポリシーを作成する

Prometheus 構成ファイルからアラート ポリシーを作成するには、次のコマンドを実行します。複数のファイルパスを指定して、複数のアラート ポリシーを作成できます。

gcloud alpha monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2

Prometheus Alertmanager の構成ファイルから通知チャンネルを作成する

Prometheus Alertmanager 構成ファイルから通知チャンネルを作成するには、次のコマンドを実行します。

gcloud alpha monitoring policies migrate \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE

アラート ポリシーと通知チャンネルを同時に作成する

Prometheus 構成ファイルからアラート ポリシーを作成するのと同時に Prometheus Alertmanager 構成ファイルから通知チャンネルを作成するには、次のコマンドを実行します。

gcloud alpha monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2 \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE

CPU 使用率が 1 分間にわたり 75% を超えたときにアラートを送信するアラートルールが設定された Prometheus 構成ファイルがあります。アラートルールは次のように構成されています。

groups:
- name: Utilization_Alerts
  interval: 30s
  rules:
  - alert: CPU_Utilization_Over_75
    expr: compute_googleapis_com:instance_cpu_utilization > 75
    for: 60s
    labels:
      severity: page
    annotations:
      subject: "Subject: ${metric.label.value}"
      description: "CPU utilization is over 75%"

また、メール、PagerDuty、Webhook レシーバーを含む Prometheus AlertManager ファイルもあります。

receivers:
- name: 'team-emails'
  email_configs:
  - to: EMAIL_ADDRESS
- name: 'team-pager'
  pagerduty_configs:
  - service_key: SERVICE_KEY
- name: 'team-webhook'
  webhook_configs:
  - url: WEBHOOK_ADDRESS

アラート ポリシーと通知チャンネルを作成するには、次のコマンドを実行します。

gcloud alpha monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_CONFIG_FILE \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_ALERTMANAGER_FILE

gcloud CLI は、次の例のようなアラート ポリシーを作成します。

  {
  "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID",
  "displayName": "Utilization_Alerts/CPU_Utilization_Over_75",
  "documentation": {
    "content": "CPU utilization is over 75%",
    "mimeType": "text/markdown",
    "subject": "Subject: ${metric.label.value}"
  },
  "userLabels": {},
  "conditions": [
    {
      "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID/conditions/CONDITION_ID",
      "displayName": "CPU_Utilization_Over_75"
      "conditionPrometheusQueryLanguage": {
        "alertRule": "CPU_Utilization_Over_75",
        "duration": "60s",
        "evaluationInterval": "30s",
        "labels": {
          "severity": "page"
        },
        "query": "compute_googleapis_com:instance_cpu_utilization > 75",
        "ruleGroup": "Utilization_Alerts"
      }
    }
  ],
  "alertStrategy": {},
  "combiner": "OR",
  "enabled": true,
  "notificationChannels": [
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_1",
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_2",
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_3"
  ]
}

Managed Service for Prometheus からアラートルールを移行する

Google Cloud は、RulesClusterRules、および GlobalRules のカスタム リソースを使用して、Managed Service for Prometheus のマネージド ルールの評価を構成します。

これらのリソースを PromQL ベースの条件を備えた Google Cloud アラート ポリシーに移行するには、次の操作を行います。

  1. カスタム リソースの groups セクションを新しい Prometheus ルールファイルにコピーします。

  2. gcloud CLI を使用してルールファイルを移行します。

たとえば、次の Rules カスタム リソースがあるとします。

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: NAMESPACE_NAME
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - alert: FewerThanTenInstancesUp
      expr: sum(up) < 10

前の Rules カスタム リソースから groups をコピーして作成された Prometheus ルールファイルは、次のようになります。

  groups:
  - name: example
    interval: 30s
    rules:
    - alert: FewerThanTenInstancesUp
      expr: sum(up) < 10

複数の Rules カスタム リソースを移行する

複数の Rules、CustomRules、GlobalRules を移行する場合は、リソースごとに別々のルール ファイルを作成して移行することをおすすめします。詳細については、Prometheus のドキュメントをご覧ください。

フィルタ式と集計式を管理する

Rules と ClusterRules は、特定のラベルに基づいて Prometheus アラート式を自動的にフィルタリングします。移行したアラート ポリシーのクエリでこの動作を保持するには、ファイルを移行する前に、これらのラベルを Prometheus ルールファイルのフィルタ式または集計式に明示的に含める必要があります。

たとえば、Managed Service for Prometheus のマネージド ルール エバリュエータは、次のように式 sum(up) < 10 を実行します。

sum(up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}) < 10

ただし、アラート ポリシーに PromQL クエリ sum(up) < 10 がある場合、Cloud Monitoring は sum(up) < 10 としてのみクエリを実行します。このクエリは、指標スコープ内のすべての Google Cloud プロジェクト、クラスタ、名前空間に適用されます。この動作を回避するには、クエリ内のラベルで集計して、Cloud Monitoring が意図したとおりにクエリを実行できるようにすることをおすすめします。たとえば、Rules カスタム リソースからルールファイルを作成する場合、sum(up) < 10 を次の式に変更できます。

sum (up) by (project_id, cluster, namespace) < 10

前述の式は、Google Cloud プロジェクト、クラスタ、名前空間ごとに個別の時系列を生成し、各時系列を <10 のアラートしきい値と比較します。

次の表に、Rules と ClusterRules のアラート式フィルタの評価順序を示します。

ルールのリソースタイプ ラベルをフィルタ
ルール
  1. project_id
  2. cluster
  3. namespace
ClusterRule
  1. project_id
  2. cluster

Prometheus 式でのフィルタリング動作の詳細については、インスタント ベクトル セレクタをご覧ください。