JSON 格式的政策範例

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

如需使用 MQL 的快訊政策範例,請參閱下列文件:

如要瞭解如何設定快訊政策欄位,請參閱以下說明:

為現有政策產生 YAML

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

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

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

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

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

為現有政策產生 JSON

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

政策範例

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

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

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

這份文件中的政策在組織時使用的術語,與 Google Cloud 主控台的 Monitoring 使用的術語相同,例如「變更頻率政策」,且有兩種類型的條件:

  • 臨界值條件;UI 中提到的幾乎所有政策類型都是臨界值條件的變化版本
  • 不存在條件

在後續範例中,這些條件會對應至 conditionThresholdconditionAbsent。詳情請參閱 Condition 的參考頁面。

您可以使用 Google Cloud 控制台手動建立許多這類政策,但有些政策只能使用 Monitoring API 建立。詳情請參閱「建立快訊政策 (使用者介面)」或「使用 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-\")"
    }

如要識別您的群組的對等欄位,請使用 project.groups.list 參考資料頁面上的 API Explorer 列出群組詳細資料。

運作時間檢查政策

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

例如,下列 JSON 描述 Google Cloud 網站上的 HTTPS 運作時間檢查。快訊政策會每 5 分鐘檢查一次可用性。

您可以使用 Google Cloud 主控台建立運作時間檢查。這裡的例子是透過使用 Monitoring API 在專案中列出運作時間檢查的方式建立 JSON 表示法;請參閱 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_passedmonitoring.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 身分執行的程序可供使用,這個警示政策就會導致監控系統將通知傳送至指定通知管道:

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

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

指標比

建議您使用 Monitoring Query Language (MQL) 建立以比率為準的警示政策。雖然 Cloud Monitoring API 支援建構部分以篩選器為基礎的比率,但 MQL 提供更靈活且可靠的解決方案:

本節將說明篩選器比率。您可以使用 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:64 位元整數,代表要求的 HTTP 狀態碼。這項政策會篩選這個標籤上的時間序列資料,以便判斷下列事項:
    • 收到的回應數量。
    • 收到的錯誤回應數量。
    • 錯誤回應與所有回應的比率。
  • loading:布林值,表示要求是否正在載入。loading 標籤在這個警告政策中不相關。

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

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

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

這項政策的作用

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

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

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

條件符合時,Monitoring 會立即傳送新事件的通知;條件中 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%,就會符合警示政策的條件。