本文件提供快訊政策範例。這些範例是以 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 建立。詳情請參閱「建立快訊政策 (使用者介面)」或「使用 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_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
身分執行的程序可供使用,這個警示政策就會導致監控系統將通知傳送至指定通知管道:
{
"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
: 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%,就會符合警示政策的條件。