JSON 格式的範例政策

這份文件提供快訊政策範例。這些範例以 JSON 格式編寫,並使用監控篩選器。無論您是使用監控篩選器或 Prometheus 查詢語言 (PromQL) 定義政策,都可以採用 JSON 或 YAML 格式建立政策。Google Cloud CLI 可讀取及寫入 JSON 和 YAML,而 REST API 只能讀取 JSON。

如要瞭解使用 PromQL 的快訊政策,請參閱下列文件:

如要瞭解如何設定警告政策欄位,請參閱下列文章:

為現有政策產生 YAML

如要產生現有快訊政策的 YAML 表示法,請使用 gcloud monitoring policies list 指令列出政策,並使用 gcloud monitoring policies describe 指令列印政策。

如要產生現有通知管道的 YAML 表示法,請使用 gcloud monitoring channels list 指令列出管道,並使用 gcloud monitoring channels describe 指令列印管道設定。

如果您未在 Google Cloud CLI 指令中加入 --format 旗標,則 gcloud ... describe 指令的格式預設為 YAML。

舉例來說,下列 gcloud monitoring policies describe 指令會擷取名為 projects/a-gcp-project/alertPolicies/12669073143329903307 的單一政策,而重新導向 (>) 會將輸出內容複製到 test-policy.yaml 檔案:

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

為現有政策產生 JSON

如要產生現有快訊政策和通知管道的 JSON 表示法,請執行下列任一操作:

政策範例

如備份/還原範例所示,您可以使用已儲存的政策來建立新政策。

您可以利用儲存在某個專案中的政策,在另一個專案中建立全新或類似的政策。但是,您必須在儲存政策的副本中先進行下列變更:

  • 從任何通知管道移除下列欄位:
    • name
    • verificationStatus
  • 建立通知管道,然後在快訊政策中參照這些通知管道 (您需要新的管道 ID)。
  • 從您要重新建立的任何快訊政策中移除下列欄位:
    • name
    • condition.name
    • creationRecord
    • mutationRecord

本文中的政策採用與 Google Cloud 控制台的監控功能相同的術語,例如「變更率政策」,並提供兩種條件:

  • 門檻條件;使用者介面中提及的幾乎所有政策類型,都是門檻條件的變體
  • 不存在條件

在下列範例中,這些條件分別對應至 conditionThreshold 和 conditionAbsent。詳情請參閱 Condition 的參考頁面。

您可以使用 Google Cloud 控制台手動建立許多這類政策,但部分政策只能透過 Monitoring API 建立。詳情請參閱「[建立警告政策 (UI)][alert-ui]」或「使用 API 建立警告政策」。

指標臨界值政策

指標門檻政策會在某個值超過預先決定的界線時偵測到。有了門檻政策,您就能在某個項目即將達到重要門檻時收到通知,以便採取行動。舉例來說,當可用磁碟空間低於總磁碟空間的 10% 時,即符合指標閾值政策的條件。

下列警告政策使用平均 CPU 用量做為 VM 群組健康狀態的指標。如果專案中 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"
                        ],
                        "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
                }
            }
        }
    ],
}

指標不存在政策

如果duration 欄位定義的時間範圍內沒有任何資料寫入指標,即符合指標不存在條件。

如要證明這點,其中一種方法是建立自訂指標。

以下是自訂指標的範例描述元。您可以使用 APIs 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"
}

詳情請參閱「使用者定義指標總覽」。

如果資料停止寫入指標約一小時,就會符合下列警告政策中的條件,換句話說,您的每小時管道已無法執行。請注意,這裡使用的條件是 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\"",
            }
        }
    ],
}

預測政策

如果發生下列情況,即符合預測條件:

  • 在 duration 欄位定義的時間範圍內,時間序列的所有預測結果都相同。
  • Cloud Monitoring 預測時間序列會在預測期間內違反門檻。

預測條件是設定為使用預測功能的指標門檻條件。如下列範例所示,這些條件包括 forecastOptions 欄位,可啟用預測並指定預測範圍。在下列範例中,預測範圍設為一小時,這是最小值:

{
    "displayName": "NFS free bytes alert",
    "combiner": "OR",
    "conditions": [
      {
        "displayName": "Filestore Instance - Free disk space percent",
        "conditionThreshold": {
          "aggregations": [
            {
              "alignmentPeriod": "300s",
              "perSeriesAligner": "ALIGN_MEAN"
            }
          ],
          "comparison": "COMPARISON_LT",
          "duration": "900s",
          "filter": "resource.type = \"filestore_instance\" AND metric.type = \"file.googleapis.com/nfs/server/free_bytes_percent\"",
          "forecastOptions": {
            "forecastHorizon": "3600s"
          },
          "thresholdValue": 20,
          "trigger": {
            "count": 1
          }
        }
      }
    ],
}

變更頻率政策

當時間序列中的值增加或減少至少達到門檻指定的百分比時,即符合變化率條件。建立這類條件時,系統會先對時間序列套用變更百分比計算,再與門檻比較。

這項條件會計算過去 10 分鐘的指標值平均值,然後與對齊期開始前 10 分鐘的平均值進行比較。在變動率警告政策中,您無法變更用於比較的 10 分鐘時間範圍。不過,建立條件時,您會指定對齊週期。

這項警告政策會監控 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"
                        ]
                    },
                    {
                        "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-\")"
    }

如要找出群組的對等欄位,請使用專案群組清單參考頁面上的 APIs Explorer 列出群組詳細資料。

運作時間檢查政策

運作時間檢查的狀態會顯示在「運作時間檢查」頁面,但您可以設定警告政策,讓 Cloud Monitoring 在運作時間檢查失敗時傳送通知。

舉例來說,下列 JSON 描述了對 Google Cloud 網站進行的 HTTPS 運作時間檢查。這項警告政策每 5 分鐘會檢查一次可用性。

運作時間檢查是透過 Google Cloud 控制台建立。這裡的 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 欄位的最後一個元件,並在 UI 中顯示為設定摘要中的 Check ID。如果您使用 Monitoring API,uptimeCheckConfigs.create 方法會傳回 ID。

ID 衍生自 displayName (在此例中,其已在 UI 中設定)。 這一點可透過列出運作時間檢查並查看 name 值來驗證。

運作時間檢查的 ID 原格式為 uptime-check-for-google-cloud-site。

如果運作時間檢查失敗,或 Google Cloud 網站上的 SSL 憑證將在 15 天內到期,就會符合下列快訊政策的條件。如果符合任一條件,Monitoring 會將通知傳送至指定的通知管道:

{
    "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_passed 和 monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires。指標標籤會識別受監控的特定運作時間檢查。 在本範例中,標籤欄位 check_id 包含運作時間檢查 ID。

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

詳情請參閱監控篩選器一文。

程序健康狀態政策

如果符合模式的程序數量超過門檻,程序健康狀態政策就會通知您。舉例來說,這個政策可用來告知您,程序已經停止執行。

如果超過 5 分鐘的時間沒有符合 nginx 字串且以使用者 www 身分執行的程序可供使用,這項警告政策就會讓 Monitoring 將通知傳送至指定通知管道:

{
    "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"
            }
        }
    ],
}

詳情請參閱「程序健康狀態」。

指標比率

建議您使用 PromQL 建立以比率為準的快訊政策。雖然 Cloud Monitoring API 支援建構部分以篩選器為準的比例,但 PromQL 提供更靈活且強大的解決方案:

本節說明以篩選器為準的比例。您可以使用 API 建立及查看政策,計算兩個相關指標的比率,並在該比率超過門檻時觸發。相關指標必須具有相同的 MetricKind。舉例來說,如果這兩項指標都是計量指標,您就可以建立以比率為準的警告政策。如要判斷指標類型的 MetricKind,請參閱「指標清單」。

比率條件是指標門檻條件的變體,比率政策中的條件會使用兩個篩選器:一般 filter (做為比率的分子) 和 denominatorFilter (做為比率的分母)。

兩個篩選條件的時間序列必須以相同方式彙整,這樣計算出來的值比率才有意義。當篩選條件的比率違反 duration 欄位定義的時間範圍門檻值時,就會符合警告政策的條件。

下一節將說明如何設定警告政策,監控 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,包含下列兩個標籤:

  • response_code:代表要求 HTTP 狀態碼的 64 位元整數。這項政策會根據這個標籤篩選時間序列資料,因此可以判斷下列事項:
    • 收到的回覆數量。
    • 收到的錯誤回應數量。
    • 錯誤回應與所有回應的比率。
  • loading:布林值,表示要求是否正在載入。loading 標籤與這項警告政策無關。

警告政策會評估 App Engine 應用程式的回應資料,也就是源自受監控資源類型 gae_app 的資料。這個受監控資源有三個標籤:

  • project_id,專案的 ID。 Google Cloud
  • module_id:應用程式中的服務或模組名稱。
  • version_id,即應用程式版本。

如需這些指標和受監控資源類型的參考資訊,請參閱指標清單中的「App Engine 指標」,以及受監控資源清單中的「gae_app」項目。

這項政策的用途

這項條件會計算錯誤回應與回應總數的比率。 如果比率在 5 分鐘的對齊期間內超過 50% (也就是比率大於 0.5),即符合條件。

這項政策會依據這些標籤的值,將每個篩選器中的時間序列分組,擷取違反條件的應用程式模組和版本。

  • 條件中的篩選器會查看 App Engine 應用程式的 HTTP 回應,並選取錯誤範圍 (5xx) 內的這些回覆。這是比率中的分子。
  • 條件中的分母篩選器會查看 App Engine 應用程式的所有 HTTP 回應。

符合條件,且監控服務會立即傳送新快訊的通知;條件中 duration 欄位的允許時間範圍為零秒。這項條件使用 trigger 計數 1,也就是違反條件並觸發快訊的時間序列數量。如果 App Engine 應用程式只有一項服務,trigger 計數為 1 即可。假設您有一個應用程式,內含 20 項服務,且您希望在 3 項以上的服務違反條件時觸發快訊,請使用 trigger 計數 3。

設定比率

分子和分母的篩選器完全相同,但分子中的條件篩選器會比對錯誤範圍內的相應代碼,分母中的條件篩選器則會比對所有相應代碼。下列子句只會出現在分子條件中:

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

否則,分子和分母篩選器會相同。

每個篩選器選取的時間序列必須以相同方式匯總,才能有效計算比率。每個篩選器可能會收集多個時間序列,因為每個標籤值組合都會有不同的時間序列。這項政策會依指定資源標籤將時間序列集分組,將時間序列集劃分為多個群組。每個群組中的部分時間序列符合分子篩選器,其餘則符合分母篩選器。

如要計算比率,符合各個篩選條件的時間序列集必須匯總為單一時間序列。這樣一來,每個群組都會有兩個時間序列,分別代表分子和分母。接著,即可計算每個群組中,分子和分母時間序列的點數比率。

在這項政策中,這兩個篩選器的時間序列會匯總如下:

  • 每個篩選器都會建立多個以 5 分鐘為間隔對齊的時間序列,並計算該 5 分鐘對齊期間的值,以表示 ALIGN_DELTA。這個對齊器會以 64 位元整數形式,傳回該對齊週期內相符的回應數。

  • 每個篩選器中的時間序列也會依據模組和版本的資源標籤值分組,因此每個群組都會包含兩組對齊的時間序列,分別符合分子和分母篩選器。

  • 系統會將每個群組中符合分子或分母篩選條件的時間序列,透過 REDUCER_SUM 跨序列縮減器加總個別時間序列中的值,縮減為單一時間。這會產生一個分子時間序列和一個分母時間序列,分別回報校正期間內所有相符時間序列的回覆數量。

然後,這項政策會計算代表各群組的分子和分母時間序列值比率。當比例超過 50% 時,就會符合警告政策的條件。