OTLP 属性到资源类型的映射

本文档介绍了 Google Cloud Observability 如何使用规则来确定 Logging 受监控的资源类型,以用于 由 Telemetry API 注入的日志数据。受监控的资源描述了 日志数据的来源,在 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 资源属性附加到遥测数据:

资源标签的设置方式

每个日志条目都包含一组标签,用于标识日志条目的来源,也称为 Logging 受监控的资源。 以下示例展示了 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
的值为
gcp_compute_engine
gce_instance

project_id:请参阅推断项目 ID

instance_id:instance_id、host.id

zone:zone、cloud.availability_zone

cloud.platform
的值为
gcp_app_engine
gae_app

project_id:请参阅推断项目 ID

module_id:gae_module_id、faas.name

version_id:gae_version_id、faas.version

zone:zone、cloud.availability_zone

cloud.platform
的值为
aws_ec2
aws_ec2_instance

project_id:请参阅推断项目 ID

instance_id:instance_id、host.id

aws_account:aws_account、cloud.account.id

region:区域、cloud.availability_zone、cloud.region

cloud.platform
的值为
gcp_bare_metal_solution
baremetal instance

resource_container:请参阅推断 resource_container ID

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:namespace、service.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:namespace、service.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:namespace、service.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