サンプル ポリシー

このページでは、独自のデザインのポリシーの設定に役立つアラート ポリシーのコレクションについて説明します。

JSON または YAML 形式のポリシー

アラート ポリシーは、JSON と YAML という 2 つのデータ形式で表現できます。 Cloud SDK では、両方の形式で読み取りと書き込みを行えます。REST API は JSON 形式に対応しています。

既存のアラート ポリシーと通知チャネルを YAML(デフォルト)形式で作成するには、gcloud alpha monitoring policies list コマンドと describe コマンド、あるいは gcloud alpha monitoring channels list コマンドと describe コマンドをそれぞれ使用します。

たとえば、このコマンドは単一のポリシーを取得し、test-policy.yaml ファイル内の出力をキャプチャします。

gcloud alpha monitoring policies describe projects/a-gcp-project/alertPolicies/12669073143329903307 > test-policy.yaml
    

既存のアラート ポリシーと通知チャネルを JSON 形式で作成するには、次の方法があります。

  • gcloud コマンドを使用し、--format="json" フラグを指定する。
  • 各 API メソッドのリファレンス ページで API Explorer ウィジェットを使用する。

    詳細については、API Explorer をご覧ください。

ポリシーのコピー

バックアップ / リストアの例に示すように、保存されたポリシーを使用して、ポリシーの新しいコピーを作成できます。保存されているポリシーは、同様のポリシーを作成するための開始点として利用することもできます。

また、あるプロジェクトに保存されたポリシーを使用して、別のプロジェクトで新規または類似のポリシーを作成できます。ただし、保存したポリシーのコピーでは、最初に次の変更を行う必要があります。

  • 通知チャネルから次のフィールドを削除します。
    • name
    • verificationStatus
  • アラート ポリシーでチャネルを参照する前に通知チャネルを作成します(新しいチャネル ID が必要です)。
  • 再作成するアラート ポリシーから次のフィールドを削除します。
    • name
    • condition.name
    • creationRecord
    • mutationRecord

ポリシーのサンプル

ここでのポリシーは、Google Cloud Console で「変化率ポリシー」などの Monitoring in the Google Cloud Console と同じ用語を使用していますが、分類の根拠となる条件は 2 種類だけです。

  • しきい値条件。UI で言及されているほぼすべてのポリシータイプがしきい値条件のバリアントです
  • 不在条件

ここに示されているサンプルでは、これらは conditionThreshold 条件と conditionAbsent 条件で示されています。詳細については、Condition のリファレンス ページをご覧ください。

これらのポリシーの多くは、Google Cloud Console を使用して手動で作成できますが、一部はMonitoring API を使用しないと作成できないものもあります。詳細については、アラートポリシーの作成またはポリシーの作成(API) をご覧ください。

指標しきい値ポリシー

指標しきい値ポリシーは、ある値が所定の境界を超えたことを検出するポリシーです。しきい値ポリシーによっていずれかの条件が重要なポイントに近づいていることが通知されるため、必要な対策を講じることができます。たとえば、使用可能なディスク領域が合計ディスク領域の 10 パーセント未満になると、システムのディスク領域が不足する可能性があります。

次のポリシーは、VM のグループの正常性の指標として平均 CPU 使用率を使用します。インスタンスとゾーンにおける VM グループの平均 CPU 使用率が 60 秒間隔で測定され、15 分(900 秒)にわたって 90 パーセントの使用率のしきい値を超えた場合にアラートが発生します。

{
        "displayName": "Very high CPU usage",
        "combiner": "OR",
        "conditions": [
            {
                "displayName": "CPU usage is extremely high",
                "conditionThreshold": {
                    "aggregations": [
                        {
                            "alignmentPeriod": "60s",
                            "crossSeriesReducer": "REDUCE_MEAN",
                            "groupByFields": [
                                "project",
                                "resource.label.instance_id",
                                "resource.label.zone"
                            ],
                            "perSeriesAligner": "ALIGN_MAX"
                        }
                    ],
                    "comparison": "COMPARISON_GT",
                    "duration": "900s",
                    "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
                              AND resource.type=\"gce_instance\"",
                    "thresholdValue": 0.9,
                    "trigger": {
                        "count": 1
                    }
                }
            }
        ],
    }
    

指標の不在ポリシー

指標の不在ポリシーは、指定した期間に、指標にデータが書き込まれない場合にトリガーされます。

このポリシーを検証する方法として、何も書き込まれないカスタム指標を作成する方法があります。このような種類のポリシーにはカスタム指標は不要ですが、デモ用として、実際に何も使用しないことを簡単に確認します。

以下はカスタム指標の記述子の例です(この指標は API Explorer を使用して作成できます)。

{
      "description": "Number of times the pipeline has run",
      "displayName": "Pipeline runs",
      "metricKind": "GAUGE",
      "type": "custom.googleapis.com/pipeline_runs",
      "labels": [
        {
          "description": "The name of the pipeline",
          "key": "pipeline_name",
          "valueType": "STRING"
        },
      ],
      "unit": "1",
      "valueType": "INT64"
    }
    

詳細については、カスタム指標の使用をご覧ください。

この指標に約 1 時間データが書き込まれないと、次のアラート ポリシーがトリガーされます。つまり、1 時間ごとのパイプラインが実行できなかったということです。ここで使用される条件は conditionAbsent です。

{
        "displayName": "Data ingestion functioning",
        "combiner": "OR",
        "conditions": [
            {
                "displayName": "Hourly pipeline is up",
                "conditionAbsent": {
                    "duration": "3900s",
                    "filter": "resource.type=\"global\"
                              AND metric.type=\"custom.googleapis.com/pipeline_runs\"
                              AND metric.label.pipeline_name=\"hourly\"",
                }
            }
        ],
    }
    

変化率ポリシー

このポリシーは、CPU 使用率が急上昇するとアラートをトリガーします。

{
      "displayName": "High CPU rate of change",
      "combiner": "OR",
      "conditions": [
        {
          "displayName": "CPU usage is increasing at a high rate",
          "conditionThreshold": {
             "aggregations": [
               {
                 "alignmentPeriod": "900s",
                 "perSeriesAligner": "ALIGN_PERCENT_CHANGE",
               }],
            "comparison": "COMPARISON_GT",
            "duration": "180s",
            "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
            "thresholdValue": 0.5,
            "trigger": {
              "count": 1
             }
          }
        }
      ],
    }
    

グループ集計ポリシー

このポリシーは、Google Kubernetes Engine クラスタ全体の平均 CPU 使用率がしきい値を超えるとアラートをトリガーします。

{
        "displayName": "CPU utilization across GKE cluster exceeds 10 percent",
        "combiner": "OR",
        "conditions": [
             {
                "displayName": "Group Aggregate Threshold across All Instances in Group GKE cluster",
                "conditionThreshold": {
                    "filter": "group.id=\"3691870619975147604\" AND metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
                    "comparison": "COMPARISON_GT",
                    "thresholdValue": 0.1,
                    "duration": "300s",
                    "trigger": {
                        "count": 1
                    },
                    "aggregations": [
                        {
                            "alignmentPeriod": "60s",
                            "perSeriesAligner": "ALIGN_MEAN",
                            "crossSeriesReducer": "REDUCE_MEAN",
                            "groupByFields": [
                                  "project",
                                  "resource.label.instance_id",
                                  "resource.label.zone"
                            ]
                        },
                        {
                            "alignmentPeriod": "60s",
                            "perSeriesAligner": "ALIGN_SUM",
                            "crossSeriesReducer": "REDUCE_MEAN"
                        }
                    ]
                },
            }
        ],
    }
    

このポリシーでは、次のグループの存在を前提としています。

{
        "name": "projects/a-gcp-project/groups/3691870619975147604",
        "displayName": "GKE cluster",
        "filter": "resource.metadata.name=starts_with(\"gke-kuber-cluster-default-pool-6fe301a0-\")"
    }
    

グループと同等のフィールドを識別するには、API Explorer を使用してグループの詳細を一覧表示します。詳細については、project.groups.list のリファレンス ページをご覧ください。

稼働時間チェック ポリシー

Monitoring Overview ページに稼働時間チェックのステータスが表示されます。稼働時間のチェックに失敗した場合はアラート ポリシーを使用して直接通知を受け取ることができます。

たとえば、次の JSON は、Google Cloud サイトでの HTTPS 稼働時間チェックを記述します。5 分ごとに稼働状況をチェックします。

稼働時間チェックは Google Cloud Console で作成されました。この JSON 表現は、Monitoring API を使用してプロジェクトの稼働時間チェックの一覧を取得して作成されました(uptimeCheckConfigs.list を参照)。Monitoring API を使用して稼働時間チェックを作成することもできます。

{
        "name": "projects/a-gcp-project/uptimeCheckConfigs/uptime-check-for-google-cloud-site",
        "displayName": "Uptime check for Google Cloud site",
        "monitoredResource": {
            "type": "uptime_url",
            "labels": {
                "host": "cloud.google.com"
          }
        },
        "httpCheck": {
            "path": "/index.html",
            "useSsl": true,
            "port": 443,
            "authInfo": {}
        },
        "period": "300s",
        "timeout": "10s",
        "contentMatchers": [
            {}
        ]
    }
    

稼働時間チェックのアラート ポリシーを作成するには、その UPTIME_CHECK_ID ごとの稼働時間チェックを確認してください。この ID は、チェックが作成されるときに設定されます。name フィールドの最後のコンポーネントとして表示され、設定サマリーの Check ID として UI でも確認できます。Monitoring API を使用している場合は、uptimeCheckConfigs.create メソッドによって ID が返されます。

この ID は displayName から派生します。この場合は、UI に設定されたものです。 稼働時間のチェックを一覧表示して name 値を調べることで、検証できます。

前述の稼働時間チェックの ID は uptime-check-for-google-cloud-site です。

稼働時間チェックが失敗した場合や、Google Cloud サイトの SSL 証明書が 15 日以内に失効する場合は、下記のアラートポリシーがトリガーされます。いずれかの条件が発生した場合、アラート ポリシーは指定された通知チャネルに通知を送信します。

{
        "displayName": "Google Cloud site uptime failure",
        "combiner": "OR",
        "conditions": [
            {
                "displayName": "Failure of uptime check_id uptime-check-for-google-cloud-site",
                "conditionThreshold": {
                    "aggregations": [
                        {
                            "alignmentPeriod": "1200s",
                            "perSeriesAligner": "ALIGN_NEXT_OLDER",
                            "crossSeriesReducer": "REDUCE_COUNT_FALSE",
                            "groupByFields": [ "resource.label.*" ]
                        }
                    ],
                    "comparison": "COMPARISON_GT",
                    "duration": "600s",
                    "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"
                              AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                              AND resource.type=\"uptime_url\"",
                    "thresholdValue": 1,
                    "trigger": {
                        "count": 1
                    }
                }
            },
            {
                "displayName": "SSL Certificate for google-cloud-site expiring soon",
                "conditionThreshold": {
                    "aggregations": [
                        {
                            "alignmentPeriod": "1200s",
                            "perSeriesAligner": "ALIGN_NEXT_OLDER",
                            "crossSeriesReducer": "REDUCE_MEAN",
                            "groupByFields": [ "resource.label.*" ]
                        }
                    ],
                    "comparison": "COMPARISON_LT",
                    "duration": "600s",
                    "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires\"
                              AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                              AND resource.type=\"uptime_url\"",
                    "thresholdValue": 15,
                    "trigger": {
                        "count": 1
                    }
                }
            }
        ],
    }
    

アラート ポリシーのフィルタは、タイプとラベルでモニタリング対象の指標を指定します。指標の型はmonitoring.googleapis.com/uptime_check/check_passedmonitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires です。指標のラベルは、モニタリング対象の特定の稼働時間チェックを表します。この例では、ラベル フィールド check_id に稼働時間チェック ID が含まれています。

AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
    

詳細については、モニタリング フィルタをご覧ください。

プロセスの状態ポリシー

プロセスの状態ポリシーは、パターンと一致するプロセス数がしきい値を超えると、通知を送信します。これは、たとえば、プロセスの実行が停止したことを伝えるのに使用できます。

このポリシーは、ユーザー www として実行している文字列 nginx に一致するプロセスが 5 分以上使用できなかった場合に、指定された通知チャネルに通知を送信します。

{
        "displayName": "Server health",
        "combiner": "OR",
        "conditions": [
            {
                "displayName": "Process 'nginx' is not running",
                "conditionThreshold": {
                    "filter": "select_process_count(\"has_substring(\\\"nginx\\\")\", \"www\") AND resource.type=\"gce_instance\"",
                    "comparison": "COMPARISON_LT",
                    "thresholdValue": 1,
                    "duration": "300s"
                }
            }
        ],
    }
    

プロセスの状態に示した別の使用例もご覧ください。

指標率

API を使用すると、関連する 2 つの指標の比率を計算し、その比率がしきい値を超えた場合に起動するポリシーを作成できます。

比率条件は単純なしきい値条件のバリアントです。比率ポリシーの条件では通常、比率の分子として機能する filter と、比率の分母として機能する denominatorFilter という 2 つのフィルタが使用されます。

両方のフィルタからの時系列は、値の比率の計算が意味を持つものになるように、同じ方法で集計する必要があります。アラート ポリシーは、指定された期間、2 つのフィルタの比率がしきい値を超えた場合にトリガーされます。

次のセクションでは、すべての HTTP レスポンスに対する HTTP エラー応答の割合を監視する際のアラート ポリシーについて、その設定方法を説明します。割合ベースのアラート ポリシーの別の例については、割り当て限度に対する割り当て量の使用率のアラート通知をご覧ください。

HTTP エラーの比率

次のポリシーは、HTTP エラー レスポンスの数とすべての HTTP 応答の数の比率に基づいたしきい値条件を作成します。

{
        "displayName": "HTTP error count exceeds 50 percent for App Engine apps",
        "combiner": "OR",
        "conditions": [
            {
                "displayName": "Ratio: HTTP 500s error-response counts / All HTTP response counts",
                "conditionThreshold": {
                     "filter": "metric.label.response_code>=\"500\" AND
                                metric.label.response_code<\"600\" AND
                                metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                                project=\"a-gcp-project\" AND
                                resource.type=\"gae_app\"",
                     "aggregations": [
                        {
                            "alignmentPeriod": "300s",
                            "crossSeriesReducer": "REDUCE_SUM",
                            "groupByFields": [
                              "project",
                              "resource.label.module_id",
                              "resource.label.version_id"
                            ],
                            "perSeriesAligner": "ALIGN_DELTA"
                        }
                    ],
                    "denominatorFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                                          project=\"a-gcp-project\" AND
                                          resource.type=\"gae_app\"",
                    "denominatorAggregations": [
                       {
                          "alignmentPeriod": "300s",
                          "crossSeriesReducer": "REDUCE_SUM",
                          "groupByFields": [
                            "project",
                            "resource.label.module_id",
                            "resource.label.version_id"
                           ],
                          "perSeriesAligner": "ALIGN_DELTA",
                        }
                    ],
                    "comparison": "COMPARISON_GT",
                    "thresholdValue": 0.5,
                    "duration": "0s",
                    "trigger": {
                        "count": 1
                    }
                }
            }
        ]
    }
    

指標とリソースタイプ

このポリシーの指標タイプは appengine.googleapis.com/http/server/response_count であり、次の 2 つのラベルがあります。

  • response_code。リクエストの HTTP ステータス コードを表す 64 ビットの整数。このポリシーは、このラベルの時系列データをフィルタリングします。これにより、次を判別することができます。
    • 受信したレスポンスの数。
    • 受信したエラー レスポンスの数。
    • すべてのレスポンスに対するエラー レスポンスの割合。
  • loading。リクエストがロードされたかどうかを示すブール値。 loading ラベルはこのアラート ポリシーには関係ありません。

アラート ポリシーは、App Engine アプリからのレスポンス データ、つまりモニタリング対象リソースタイプ gae_app からのデータに関連しています。このモニタリング対象リソースには、次の 3 つのラベルがあります。

  • project_id。Google Cloud プロジェクトの ID。
  • module_id。アプリ内のサービスまたはモジュールの名前。
  • version_id。アプリのバージョン。

これらの指標とモニタリング対象リソースのタイプについては、指標リストの App Engine の指標とモニタリング対象リソースリストの gae_app エントリをご覧ください。

このポリシーの機能

このポリシーは、すべてのレスポンスに対するエラー レスポンスの割合を計算します。 ポリシーは、5 分間のアライメント期間を超えて、比率が 50%を超えると(つまり、比率が 0.5 よりも大きくなると)、アラート通知をトリガーします。

このポリシーは、各フィルタの時系列をそれらのラベルの値でグループ化して、条件に違反するアプリのモジュールとバージョンを取得します。

  • 条件内のフィルタは、App Engine アプリからの HTTP レスポンスを調べ、エラー範囲 5xx 内のレスポンスを選択します。これは比率の分子です。
  • 条件内の分母フィルタは、App Engine アプリからのすべての HTTP レスポンスを調べます。

ポリシーは即時にアラート通知をトリガーします。条件に対する許容期間は 0 秒です。このポリシーはトリガー カウント 1 を使用します。これは、アラート通知をトリガーする条件に違反する必要のある時系列の数です。サービスが 1 個の App Engine アプリの場合、トリガーは 1 が適しています。20 個のサービスを持つアプリの場合に、3 個以上のサービスが条件に違反するとアラートがトリガーされるようにするには、トリガー カウント 3 を使用します。

比率を設定する

分子と分母のフィルタは、分子の条件フィルタが誤差範囲のレスポンス コードと一致し、分母の条件フィルタがすべてのレスポンス コードと一致する点を除いてまったく同じです。次の句は、分子条件にのみ表示されます。

          metric.label.response_code>="500" AND
          metric.label.response_code<"600"

それ以外は、分子フィルタと分母フィルタは同じです。

各フィルタで選択された時系列は、比率の計算が有効になるように、同じ方法で集計する必要があります。ラベルの値の組み合わせごとに時系列が異なるため、フィルタによって複数の時系列が収集されることがあります。このポリシーは指定されたリソースラベルで時系列のこのセットをグループ化し、時系列のセットをグループのセットに分割します。各グループの時系列の一部は分子フィルタに一致します。残りは分母フィルタに一致します。

比率を計算するには、各フィルタに一致する時系列のセットをそれぞれ 1 つの時系列に集計する必要があります。これにより、各グループには分子用と分母用の 2 つの時系列が残ります。次に、各グループの分子と分母の時系列の点の割合を計算できます。

このポリシーでは、両方のフィルタの時系列が次のように集計されます。

  • 各フィルタにより、5 分の間隔で配列された複数の時系列が作成されます。その 5 分の配列間隔で値に対して ALIGN_DELTA を計算して示された値が使用されます。この配置指定子によって、その間隔で一致するレスポンスの数が 64 ビット整数として返されます。

  • 各フィルタ内の時系列は、モジュールとバージョンのリソースラベルの値によってもグループ化されます。したがって、各グループには分子フィルタに一致する時系列と分母フィルタに一致する時系列という整列された 2 セットの時系列が含まれるようになります。

  • 分子フィルタまたは分母フィルタに一致する各グループ内の時系列は、REDUCER_SUM クロス系列削減指定子を使用して個々の時系列に値を合計することで単一の時刻に集計されます。この結果、分子と分母にそれぞれ 1 つの時系列が残り、各時系列によって配置間隔ですべての一致する時系列にわたり、レスポンスの数がレポートされます。

次にポリシーは、各グループを表す分子と分母の時系列に対して、値の比を計算します。比率を得られるようになると、このポリシーは単純な指標しきい値ポリシーになります。