本文說明 Google Cloud Observability 用來判斷 Telemetry API 擷取記錄資料的 Logging 受監控資源類型規則。受監控資源說明記錄資料的來源,在 LogEntry 中,受監控資源會以標籤表示。Google Cloud Observability 會使用 OTLP 資源屬性,判斷這些標籤的值。
OTLP 格式記錄資料的一般結構
使用 Telemetry API 將記錄檔資料傳送至 Google Cloud 時,資料格式必須與 OTLP 一致。這類資料的一般結構如下所示:
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"logRecords": [...]
}
]
}
]
請注意,OpenTelemetry 會批次處理個別記錄,每筆記錄都以 logRecord 結構表示,並包含記錄來源的相關資訊,以 resource 結構表示。
Google Cloud Observability 收到 resourceLogs 物件時,會為每個 logRecord 建構一個 LogEntry。與 OTLP 不同,後者會將來源資訊與個別記錄的集合批次處理,而每個 LogEntry 結構都包含記錄來源和記錄本身的相關資訊。
如要進一步瞭解 OTLP 格式記錄資料的結構,請參閱 OpenTelemetry logs.proto。
使用 Google Cloud 資源偵測工具設定 OTLP 資源屬性
如要在 OTLP 記錄資料中設定 OTLP 資源屬性,請使用Google Cloud 資源偵測器。這些偵測器會將 OTLP 資源屬性附加至遙測資料,說明遙測資料的來源:
如要透過收集器匯出,請在收集器的處理器中設定資源偵測功能。舉例來說,您的收集器可能會指定兩個資源偵測器:
resourcedetection: detectors: ["env", "gcp"]下列文件提供匯出指標或追蹤資料的收集器範例:
- 部署及使用收集器: 說明如何將指標資料傳送至 Telemetry API。
- 在 Google Kubernetes Engine 上部署 Google 建構的 OpenTelemetry Collector: 說明在 Google Kubernetes Engine 上執行時,如何收集記錄、指標和追蹤資料。收集器會將追蹤記錄資料傳送至 Telemetry API,並將指標資料傳送至 Prometheus 匯出工具。
如果您使用直接匯出功能,請為您的語言使用適當的 Google Cloud 資源偵測器:
資源標籤的設定方式
每個記錄項目都包含一組標籤,用於識別記錄項目的來源,也就是記錄監控資源。下圖說明 Google Kubernetes Engine 的標籤。
resource: {
labels: {
cluster_name: "my-cluster"
container_name: "server"
location: "us-central1"
namespace_name: "default"
pod_name: "my-pod"
project_id: "my-project"
}
type: "k8s_container"
}
如圖所示,受監控資源具有 type 欄位和一或多個 labels。受監控資源的標籤至少要包含 project_id 或 resource_container。
下表說明 Google Cloud Observability 用來將 OTLP 資源屬性對應至受監控資源的規則。表格已排序。也就是說,如果資源屬性包含 cloud.platform,且值為 gcp_compute_engine,則受監控的資源類型會設為 gce_instance。如要判斷受監控資源標籤的值,Google Cloud Observability 會使用資源屬性的優先順序清單。如果沒有可用的資源屬性,標籤值會是空字串。
| 附加至記錄檔記錄的 OTLP 屬性 和值 |
Cloud Logging 受監控資源類型 |
受監控的資源標籤值 依優先順序從 OTLP 資源屬性判斷 |
|---|---|---|
cloud.platformhas value gcp_compute_engine |
gce_instance |
|
cloud.platformhas value gcp_app_engine |
gae_app |
|
cloud.platformhas value aws_ec2 |
aws_ec2_instance |
|
cloud.platformhas value gcp_bare_metal_solution |
baremetal instance |
|
service.name 和service.instance.id不得為空 |
generic_task |
|
faas.name 和faas.instance不得為空值 |
generic_task |
|
k8s.cluster.name 和 k8s.container.name不得為空 |
k8s_container |
|
k8s.cluster.name 和 k8s.pod.name不得為空 |
k8s_pod |
|
k8s.cluster.name 和 k8s.node.name不得為空 |
k8s_node |
|
k8s.cluster.name不得為空值 |
k8s_cluster |
|
| 沒有其他相符的標籤 | generic_node |
|
推斷專案或資源容器 ID 標籤值
所有 Logging 受監控資源類型都有 project_id 標籤或 resource_container 標籤。系統會依序搜尋下列屬性,判斷這些標籤的值:
project_idgcp.project.idgcp.project_idgcp.dest_project_idgcp.resource.containerresource_containercloud.account.idcloud.account_id