OTLP 屬性至資源類型對應

本文說明 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 資源屬性附加至遙測資料,說明遙測資料的來源:

資源標籤的設定方式

每個記錄項目都包含一組標籤,用於識別記錄項目的來源,也就是記錄監控資源。下圖說明 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_idresource_container

下表說明 Google Cloud Observability 用來將 OTLP 資源屬性對應至受監控資源的規則。表格已排序。也就是說,如果資源屬性包含 cloud.platform,且值為 gcp_compute_engine,則受監控的資源類型會設為 gce_instance。如要判斷受監控資源標籤的值,Google Cloud Observability 會使用資源屬性的優先順序清單。如果沒有可用的資源屬性,標籤值會是空字串。

附加至記錄檔記錄的 OTLP 屬性
和值
Cloud Logging
受監控資源類型
受監控的資源標籤值
依優先順序從 OTLP 資源屬性判斷
cloud.platform
has value
gcp_compute_engine
gce_instance

project_id:請參閱「推斷專案 ID」。

instance_id:instance_id、host.id

zone:區域、cloud.availability_zone

cloud.platform
has value
gcp_app_engine
gae_app

project_id:請參閱「推斷專案 ID」。

module_id:gae_module_id、faas.name

version_id:gae_version_id、faas.version

zone:區域、cloud.availability_zone

cloud.platform
has value
aws_ec2
aws_ec2_instance

project_id:請參閱「推斷專案 ID」。

instance_id:instance_id、host.id

aws_account:aws_account、cloud.account.id

region:region、cloud.availability_zone、cloud.region

cloud.platform
has value
gcp_bare_metal_solution
baremetal instance

resource_container:請參閱「推斷 resource_container ID」。

region:region、cloud.availability_zone、cloud.region

instance_id:instance_id、host.id

service.name
service.instance.id
不得為空
generic_task

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

namespace:命名空間、服務命名空間

job_name:job、service.name、faas.name

task_id:task_id、service.instance.id、faas.instance

faas.name
faas.instance
不得為空值
generic_task

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

namespace:命名空間、服務命名空間

job_name:job、service.name、faas.name

task_id:task_id、service.instance.id、faas.instance

k8s.cluster.name
k8s.container.name
不得為空
k8s_container

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

cluster_name:cluster_name、k8s.cluster.name

namespace_name:namespace_name、k8s.namespace_name

pod_name:pod_name、k8s.pod.name

container_name:container_name、k8s.container.name

k8s.cluster.name
k8s.pod.name
不得為空
k8s_pod

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

cluster_name:cluster_name、k8s.cluster.name

namespace_name:namespace_name、k8s.namespace_name

pod_name:pod_name、k8s.pod.name

k8s.cluster.name
k8s.node.name
不得為空
k8s_node

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

cluster_name:cluster_name、k8s.cluster.name

node_name:node_name、k8s.node.name

k8s.cluster.name
不得為空值
k8s_cluster

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

cluster_name:cluster_name、k8s.cluster.name

沒有其他相符的標籤 generic_node

project_id:請參閱「推斷專案 ID」。

location:location、cloud.availability_zone、cloud.region

namespace:命名空間、服務命名空間

node_id:node_id、host.id、host_name

推斷專案或資源容器 ID 標籤值

所有 Logging 受監控資源類型都有 project_id 標籤或 resource_container 標籤。系統會依序搜尋下列屬性,判斷這些標籤的值:

  • project_id
  • gcp.project.id
  • gcp.project_id
  • gcp.dest_project_id
  • gcp.resource.container
  • resource_container
  • cloud.account.id
  • cloud.account_id