使用 Cloud Monitoring API 建立使用者定義的指標 (也稱為「自訂指標」),即可擷取應用程式專屬的測量結果,並像內建 Cloud Monitoring 指標一樣,建立圖表或快訊。與內建指標一樣,每個使用者定義指標都會結合資料點、定義資料點代表意義的指標類型,以及識別資料來源的受監控資源。
如要檢測應用程式,建議您使用開放原始碼、不限供應商的檢測架構,例如 OpenTelemetry,而非供應商和產品專屬的 API 或用戶端程式庫。如要瞭解這些架構,請參閱「 應用程式開發人員觀測能力」和「選擇檢測方法」。
您無法使用 Monitoring API 建立記錄指標,因為這類指標是從記錄項目衍生指標資料。Cloud Logging 會建立指標結構,並將資料傳送至 Cloud Monitoring。詳情請參閱「建立計數器指標」和「建立分布指標」。使用者定義指標是 Cloud Monitoring 的收費功能。如要瞭解定價詳情,請參閱「Google Cloud Observability 定價」頁面的 Cloud Monitoring 部分。
事前準備
如要瞭解所有指標的基礎結構,請參閱「指標、時間序列和資源」。
如要使用 Cloud Monitoring,您必須擁有已啟用計費功能的 Google Cloud 專案。必要時,請按照下列步驟操作:
-
在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
選取或建立專案所需的角色
- 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
-
建立專案:如要建立專案,您必須具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
- 確認已啟用 Monitoring API。詳情請參閱「啟用 Monitoring API」。
- 如果應用程式在 Google Cloud以外執行, Google Cloud 專案必須使用本機應用程式預設憑證 (ADC) 驗證應用程式。詳情請參閱「為地端部署或其他雲端服務供應商設定 ADC」。
建立使用者定義的指標類型
如要建立使用者定義的指標,您可以定義 MetricDescriptor 物件,指定指標的各種資訊,也可以寫入指標資料。寫入指標資料時,Monitoring 會根據您提供的資料結構,為您建立指標描述元。如要瞭解如何設計指標描述元,請參閱「使用者定義指標的指標描述元」。
自動建立指標描述元
如果您在使用者定義指標的指標描述元尚不存在時寫入指標資料,系統會自動建立指標描述元。不過,這個新的指標描述元可能不完全符合您的需求;自動建立指標描述元時,會涉及一些假設和預設值。
當呼叫 timeSeries.create 時,如果包含的 TimeSeries 物件參照了指定不存在指標類型名稱的 Metric 物件,Cloud Monitoring 會建立新的 MetricDescriptor。Cloud Monitoring 會使用下列規則填入 MetricDescriptor:
type:類型是從Metric物件的type欄位複製而來。name:名稱是根據方法呼叫中的專案 ID,以及Metric物件中的type值建立。labels:Metric物件中顯示的標籤。新指標描述元中的每個標籤描述元都包含下列欄位:key:Metric物件中的標籤鍵。valueType:STRINGdescription:未設定
metricKind:除非您指定TimeSeries物件的metricKind參數,否則指標種類會設為GAUGE。指定metricKind時,新指標會採用該類型。您只能指定GAUGE和CUMULATIVE種類。valueType:值類型取自寫入的Point類型值。值類型必須是BOOL、INT64、DOUBLE或DISTRIBUTION。在TimeSeries的valueType欄位中指定值類型時,該類型必須與Point的類型相符。unit:未設定description:"Auto created custom metric.".displayName:未設定
在單一 timeSeries.create 呼叫中,您可以加入多個參照相同不存在指標類型的 TimeSeries 物件。在這種情況下,新指標描述元中的標籤,會由這次呼叫 create 時,所有時間序列中 Metric 物件的所有標籤聯集組成。
後續步驟:請參閱「寫入使用者定義指標」。
手動建立指標描述元
如要建立指標描述元,請按照下列步驟操作:
決定要寫入指標資料的受監控資源。請從下列清單中選擇:
aws_ec2_instance:Amazon EC2 執行個體。dataflow_job:Dataflow 工作。gae_instance:App Engine 執行個體。gce_instance:Compute Engine 執行個體。generic_node:使用者指定的運算節點。generic_task:使用者定義的工作。gke_container:GKE 容器執行個體。global:如果沒有其他適合的資源類型,請使用這項資源。在多數情況下,generic_node或generic_task是比global更好的選擇。k8s_cluster:Kubernetes 叢集。k8s_container:Kubernetes 容器。k8s_node:Kubernetes 節點。k8s_pod:Kubernetes Pod。
建立
MetricDescriptor物件,然後將其做為引數傳遞至metricDescriptors.create方法的呼叫。
使用與現有指標描述元相同的類型名稱呼叫 metricDescriptors.create 通常會發生錯誤。不過,如果新 MetricDescriptor 物件的所有欄位與現有描述元的欄位完全相符,則不會發生錯誤,但不會有任何效果。
在以下範例中,您將建立測量指標。
通訊協定
如要建立指標描述元,請使用 metricDescriptors.create 方法。您可以在方法參考頁面上,使用 APIs Explorer 小工具執行這個方法。詳情請參閱「APIs Explorer」。
以下是 metricDescriptors.create 的參數範例:
- 名稱 (網址):
projects/[PROJECT_ID] 要求主體:提供
MetricDescriptor物件,例如:{ "name": "", "description": "Daily sales records from all branch stores.", "displayName": "Sales", "type": "custom.googleapis.com/stores/sales", "metricKind": "GAUGE", "valueType": "DOUBLE", "unit": "{USD}", "labels": [ { "key": "store_id", "valueType": "STRING", "description": "The ID of the store." }, ], }
將這些值提供給小工具中的欄位,並使用專案 ID 取代 [PROJECT_ID]:
按一下 [Execute] (執行) 按鈕來執行這個方法。
建立新指標時,系統會忽略 MetricDescriptor 中的 name 欄位,因此可以省略。create 方法會傳回新的指標描述元,並填入 name 欄位,在本範例中如下所示:
"name": "projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales"
舉例來說,如要取得指標的描述元,請使用這個名稱。
C#
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Ruby
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如果遇到問題,請參閱「排解 API 呼叫問題」。
後續步驟:請參閱「寫入使用者定義指標」。
寫入使用者定義的指標
您只能將資料寫入使用者定義指標的指標類型。如要寫入資料,請使用 timeSeries.create 方法。如果時間序列存在,這個方法會將新的資料點附加至現有的時間序列。如果時間序列不存在,這個方法會建立時間序列並附加資料。
如要寫入資料點,請將 TimeSeries 物件清單傳遞至 timeSeries.create。清單大小最多 200 筆,且清單中每個物件都必須指定不同的時間序列。
metric和resource欄位的值可識別特定TimeSeries物件。這些欄位代表資料的指標類型,以及收集資料的受監控資源。- 省略
metricKind和valueType欄位;寫入資料點時,系統會忽略這些欄位。 每個
TimeSeries物件只能包含一個Point物件:- 資料點的值與時間間隔必須與指標類型的定義保持一致。如要瞭解不同指標類型的時間間隔,請參閱
TimeInterval。 - 資料點的時間間隔必須晚於已在時間序列中的任何資料點。
- 間隔的結束時間不得超過過去 25 小時,或未來 5 分鐘。
- 資料點的值與時間間隔必須與指標類型的定義保持一致。如要瞭解不同指標類型的時間間隔,請參閱
如要將多個資料點寫入同一個時間序列,請針對每個資料點分別呼叫
timeSeries.create方法。寫入單一時間序列的資料速度,不得超過每 5 秒一個資料點。將資料點新增至不同的時間序列時,則沒有頻率限制。
通訊協定
如要寫入指標資料,請使用 timeSeries.create 方法。您可以在方法參考頁面上,使用 APIs Explorer 小工具執行這個方法。詳情請參閱「APIs Explorer」。
如要將資料點寫入手動建立指標描述元中建立的 stores/daily_sales 指標,請執行下列操作:
- 前往
timeSeries.create的參考資料頁面。 - 請在 APIs Explorer 小工具中提供下列參數。
- 按一下 [Execute] (執行) 按鈕。
使用下列範例參數:
- name:
projects/[PROJECT_ID] 要求主體:包含
TimeSeries物件清單。以下範例的清單中只有一個時間序列。{ "timeSeries": [ { "metric": { "type": "custom.googleapis.com/my_metric", "labels": { "my_label": "my_value" } }, "resource": { "type": "gce_instance", "labels": { "project_id": "[PROJECT_ID]", "instance_id": "1234567890123456789", "zone": "us-central1-f" } }, "points": [ { "interval": { "endTime": "2018-06-01T10:00:00-04:00" }, "value": { "doubleValue": 123.45 } } ] } ] }
C#
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Ruby
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如果遇到問題,請參閱「排解 API 呼叫問題」。
刪除使用者定義的指標
如要刪除使用者定義指標,請刪除其指標描述元。您無法刪除儲存在 Google Cloud 專案中的時間序列資料,但刪除指標描述元後,就無法存取這些資料。資料會根據資料保留政策到期並刪除。
您無法刪除內建指標的指標描述元。
如要刪除指標描述元,請呼叫 metricDescriptors.delete 方法。
通訊協定
如要刪除指標描述元,請使用 metricDescriptors.delete 方法。您可以在方法參考頁面上,使用 APIs Explorer 小工具執行這個方法。詳情請參閱「APIs Explorer」。
如要刪除在「手動建立指標描述元」中建立的 stores/daily_sales 指標,請按照下列步驟操作:
- 前往
metricDescriptors.delete的參考頁面。 在 APIs Explorer 小工具中輸入指標描述元的名稱:
name:
projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales按一下 [Execute] (執行) 按鈕。
C#
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Ruby
如要向 Monitoring 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如果遇到問題,請參閱「排解 API 呼叫問題」。
修改使用者定義的指標
如要修改使用者定義的指標,您必須更新定義指標的 MetricDescriptor 物件。唯一支援的修改方式是新增標籤。
如要為現有的使用者定義指標新增標籤,請使用 timeSeries.create 方法,並將新標籤加入時間序列資料。如果您嘗試寫入的標籤有效,且標籤總數少於 30 個,系統就會將標籤新增至指標描述元。
接著,系統會寫入時間序列資料,就像標籤從一開始就存在一樣。
如要執行新增標籤以外的操作,則必須刪除並重新建立指標描述元。在這種情況下,您會遺失先前為舊指標描述元收集的所有時間序列資料。詳情請參閱「刪除使用者定義的指標」。
無法重新命名指標。