本文說明如何將使用 Telemetry (OTLP) API 傳送至 Google Cloud 專案的指標資料,對應至 Cloud Monitoring 結構。這個 API 會實作 OpenTelemetry OTLP 通訊協定。使用 otlphttp 匯出工具和 OpenTelemetry Collector 檢測應用程式,或使用 OpenTelemetry SDK 時,您可以將資料傳送至這個 API。
OpenTelemetry 是 Google Cloud支援的開放原始碼專案, Google Cloud有專責工程師確保支援擷取及顯示遙測資料。
Cloud Monitoring 中的 OTLP 指標
使用 OpenTelemetry Collector 和 otlphttp 匯出工具將指標擷取至 Cloud Monitoring,或使用 OpenTelemetry SDK 直接傳送指標時,OTLP 指標會對應至 Cloud Monitoring 指標結構。本節說明下列事項:
受監控資源對應
所有指標點都會使用 Prometheus 對應,以 Google Cloud Managed Service for Prometheus 的形式寫入。
Prometheus 對應
Prometheus 指標必須使用受監控的資源類型 prometheus_target。
prometheus_target 資源類型上的下列標籤可用於架構化 Monarch 內的資料,並有效率地儲存資料。您為這些屬性指定的值越精確,查詢能力和擴充性就越好。
強烈建議您盡可能明確設定這些標籤的值,雖然我們已實作備用邏輯,可在沒有明確值的情況下使用。
下表依優先順序列出標籤的值來源:
「prometheus-target」標籤 |
使用的值 (依優先順序) |
|---|---|
location (必要元素) |
|
cluster |
|
namespace |
|
job |
|
instance如果為空白,則拒絕該點 |
|
指標對應
指標會轉換為 Prometheus 時間序列格式。指標名稱不得有網域,或只能有prometheus.googleapis.com 網域。轉換後,指標名稱會包含 prometheus.googleapis.com 前置字串和額外後置字串,具體取決於 OTLP 點類型。產生的 Cloud Monitoring 指標結構如下:
prometheus.googleapis.com/{metric_name}/{suffix}
此外,對於每個不重複的 OpenTelemetry 資源,轉換會新增 target_info 指標,其中包含 service.name、service.instance.id 和 service.namespace 以外的所有資源屬性。
所有 OTLP INT64 指標都會在 Cloud Monitoring 中轉換為 DOUBLE 值類型,即使收集器將值類型指定為 INT64 也是如此。進行這項變更的原因是,時間序列進入 Monarch 後,您就無法變更值類型。支援 INT64 值最常見的後果是發生衝突,而解決衝突的唯一方法是刪除指標。
Prometheus 指標對應
指標類型對應如下:
- OTLP Gauge 會對應至 Cloud Monitoring Gauge。
- OTLP Sum 對應如下:
- OTLP 直方圖會對應至 Cloud Monitoring distribution,並根據
aggregation_temporality的值,採用累計或差異指標類型。 - OTLP 摘要指標會擴展為每個元件的個別時間序列:
count、sum和每個quantile。- 計數和總和指標的名稱分別會加上
_count或_sum後置字元,並以 DOUBLE 類型的 Cloud Monitoring cumulative 指標形式寫入。 - 每個分位數都會成為 gauge 類型的專屬時間序列 DOUBLE,並附上
quantile標籤。
- 計數和總和指標的名稱分別會加上
下表彙整指標對應:
| OTLP 點類型 | 監控 指標類型 | 監控 值類型 | 字尾 | 附註 |
|---|---|---|---|---|
| GAUGE | GAUGE | DOUBLE | /gauge | |
| GAUGE (metric.metadata["prometheus.type"]="unknown") | GAUGE | DOUBLE | /unknown | Prometheus Unknowns 會由 OpenTelemetry Collector 分成計數器和計量表。 |
| SUM (monotonic, CUMULATIVE) | 累計 | DOUBLE | /counter | |
| SUM (monotonic, CUMULATIVE, metric.metadata["prometheus.type"]="unknown") | 累計 | DOUBLE | /unknown:counter | Prometheus Unknowns 會由 OpenTelemetry Collector 分成計數器和計量表。 |
| SUM (monotonic, DELTA) | DELTA | DOUBLE | /delta | |
| SUM (非單調遞增,CUMULATIVE) | GAUGE | DOUBLE | /gauge | |
| 直方圖 (累計) | 累計 | DISTRIBUTION with explicit buckets | /histogram | |
| 指數直方圖 (累計) | 累計 | DISTRIBUTION with exponential buckets | /histogram | |
| 直方圖 (差異) | DELTA | DISTRIBUTION with explicit buckets | /histogram:delta | |
| 指數直方圖 (差異) | DELTA | DISTRIBUTION with exponential buckets | /histogram:delta | |
| SUMMARY (sum, count, quantile) |
累積 累積 量表 |
DOUBLE DOUBLE DOUBLE |
_sum/summary:counter _count/summary /summary |
摘要資料點會寫入多個時間序列,分別代表計數、總和和每個計算出的分位數。系統也會產生附有 quantile 標籤的分位數指標。 |
googlemanagedprometheus 匯出工具與 Telemetry API 的差異
Telemetry API (telemetry.googleapis.com) 處理指標的方式與 googlemanagedprometheus 匯出工具不同:
Telemetry API 允許在指標名稱中使用半形句號 (
.) 和斜線 (/) 字元。googlemanagedprometheus匯出工具會將所有這類字元例項轉換為底線 (_) 字元。舉例來說,名為prometheus.googleapis.com/foo.bar/gauge的 OTLP 指標會由 OTLP 匯出工具逐字匯出,但會由googlemanagedprometheus匯出工具匯出為prometheus.googleapis.com/foo_bar/gauge。指標擷取完畢後,Cloud Monitoring 會根據名稱建立指標描述元。由於擷取路徑處理句號 (
.) 和斜線 (/) 字元的方式不同,因此使用googlemanagedprometheus匯出工具擷取的指標,與使用otlphttp匯出工具擷取的指標,其產生的指標描述元也會有所不同。如果您同時使用這兩種擷取路徑,就會有兩組指標;如要在查詢時取得完整結果,您必須手動合併 Prometheus 和 OTLP 版本的指標結果。如果指標名稱包含單位,Telemetry API 不會附加單位;如果指標是計數器,Telemetry API 也不會附加
_total後置字元。因此,使用 Telemetry API 匯出的指標為prometheus.googleapis.com/foo/counter,但googlemanagedprometheus匯出工具匯出的指標為prometheus.googleapis.com/foo_seconds_total/counter。這項差異也適用於_total和_ratio後置字元。API 會合成
sum_of_squared_deviation值,以用於從指數直方圖衍生而來的分佈值。匯出工具不會為指數直方圖設定這個欄位。googlemanagedprometheusAPI 會將所有整數點值轉換為 Prometheus 指標的雙精度值。
如果
scope_version或scope_name標籤的值為空白,API 就不會設定這些標籤。
查看擷取資料的位置
透過 Telemetry API 擷取的指標資料,可使用 Metrics Explorer 頁面查看。如要瞭解如何查看指標資料並繪製成圖表,請參閱「使用 Metrics Explorer 建立圖表」一文。