這份文件提供快訊政策範例。這些範例以 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 表示法,請執行下列任一操作:
將
--format="json"
旗標新增至「為現有政策產生 YAML」一節所述的gcloud
CLI 指令。舉例來說,如要列出政策,請執行下列指令:gcloud alpha monitoring policies list --format=json
在每個 API 方法的參考資料頁面上,請使用 API Explorer 小工具:
如要瞭解快訊政策,請參閱
alertPolicies.list
和alertPolicies.get
方法。如要瞭解通知管道,請參閱
notificationChannels.list
和notificationChannels.get
方法。
詳情請參閱 API Explorer。
政策範例
如備份/還原範例所示,您可以使用已儲存的政策來建立新政策。
您可以利用儲存在某個專案中的政策,在另一個專案中建立全新或類似的政策。但是,您必須在儲存政策的副本中先進行下列變更:
- 從任何通知管道移除下列欄位:
name
verificationStatus
- 建立通知管道,然後在快訊政策中參照這些通知管道 (您需要新的管道 ID)。
- 從任何重新建立的快訊政策中移除下列欄位:
name
condition.name
creationRecord
mutationRecord
這份文件中的政策在組織時使用的術語,與 Google Cloud 主控台中的 Monitoring 服務使用的術語相同,例如「變更頻率政策」,且有兩種類型的條件:
- 臨界值條件;UI 中提到的幾乎所有政策類型都是臨界值條件的變因
- 不存在條件
在下列範例中,這些條件分別對應至 conditionThreshold
和 conditionAbsent
。詳情請參閱 Condition
的參考頁面。
您可以使用 Google Cloud 控制台手動建立許多這類政策,但部分政策只能透過 Monitoring API 建立。詳情請參閱「建立快訊政策 (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-\")"
}
如要識別群組的對等欄位,請使用 project.groups.list 參考資料頁面上的 APIs 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
欄位的最後一個元件,並在使用者介面中顯示為設定摘要中的 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"
}
}
],
}
詳情請參閱「程序健康狀態」。
指標比率
建議您使用 Monitoring Query Language (MQL) 建立以比率為基礎的快訊政策。雖然 Cloud Monitoring API 支援建構部分以篩選器為準的比例,但 MQL 提供更彈性且穩健的解決方案:
- 如需以 MQL 為基礎的比率政策範例,請參閱 MQL 快訊政策範例。
- 如要瞭解如何使用 MQL 建立快訊政策,請參閱「使用 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
,專案的 ID。 Google Cloudmodule_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 項以上的服務違反條件時引發事件,則請使用 3 的 trigger
計數。
設定比率
分子和分母篩選器完全相同,但分子中的條件篩選器會比對錯誤範圍中的回應代碼,分母中的條件篩選器則會比對所有回應代碼。下列子句只會出現在分子條件中:
metric.label.response_code>=\"500\" AND
metric.label.response_code<\"600\"
否則,分子和分母篩選器會相同。
每個篩選器選取的時間序列必須以相同方式匯總,才能有效計算比率。每個篩選器可能會收集多個時間序列,因為每個標籤值組合都會有不同的時間序列。這項政策會依據指定的資源標籤將時間序列集分組,將時間序列集劃分為一組群組。每個群組中的部分時間序列符合分子篩選條件,其餘則符合分母篩選條件。
如要計算比率,必須先將符合各篩選條件的時間序列集匯總為單一時間序列。這樣一來,每個群組都會有兩個時間序列,分別代表分子和分母。接著,即可計算每個群組中,分子和分母時間序列的點數比率。
在這項政策中,這兩個篩選器的時間序列會依下列方式匯總:
每個篩選器都會建立多個以 5 分鐘為間隔對齊的時間序列,並以計算該 5 分鐘對齊期間內的值來表示值。
ALIGN_DELTA
這個對齊器會以 64 位元整數形式,傳回該對齊週期內相符的回應數。每個篩選器中的時間序列也會依據模組和版本的資源標籤值分組,因此每個群組都會包含兩組對齊的時間序列,分別是符合分子篩選條件和分母篩選條件的時間序列。
系統會使用
REDUCER_SUM
跨序列縮減器,將每個群組中符合分子或分母篩選條件的時間序列,匯總為單一時間序列,方法是加總個別時間序列中的值。這樣一來,分子和分母都會有專屬的時間序列,分別回報校正期間內所有相符時間序列的回覆次數。
接著,這項政策會計算代表各群組的分子和分母時間序列值比率。當比率大於 50% 時,就會符合警告政策的條件。