OTLP 属性とリソースタイプのマッピング

このドキュメントでは、Telemetry API で取り込まれたログデータの Logging モニタリング対象リソースタイプを判別するために Google Cloud Observability が使用するルールについて説明します。モニタリング対象リソースはログデータの ソースを表し、LogEntryではラベルを使用して表されます。Google Cloud Observability は、OTLP リソース属性を使用してこれらのラベルの値を決定します。

OTLP 形式のログデータの一般的な構造

ログデータが Telemetry API を使用して Google Cloud に送信される場合、この データは OTLP と互換性のある形式である必要があります。このデータの一般的な構造は次のとおりです。

"resourceLogs": [
    {
      "resource": {
        "attributes": [...]
      },
      "scopeLogs": [
        {
          "logRecords": [...]
        }
      ]
    }
]

OpenTelemetry は、個々のログをバッチ処理します。各ログは logRecord 構造で表され、ログのソースに関する情報は resource 構造で表されます。

Google Cloud Observability は、resourceLogs オブジェクトを受信すると、logRecord ごとに 1 つの LogEntry を構築します。個々のログのコレクションでソース情報をバッチ処理する OTLP とは異なり、各 LogEntry 構造にはログのソースとログ自体に関する情報が含まれています。

OTLP 形式のログデータの構造の詳細については、 OpenTelemetry logs.protoをご覧ください。

リソース検出機能を使用して OTLP リソース属性を設定する Google Cloud

OTLP ログデータに OTLP リソース属性を設定するには、 Google Cloud リソース検出を使用します。これらの検出は、テレメトリーのソースを記述する OTLP リソース属性をテレメトリーにアタッチします。

  • コレクタベースのエクスポートの場合は、コレクタのプロセッサの一部としてリソース検出を構成します。たとえば、コレクタで 2 つのリソース検出を指定できます。

    resourcedetection:
        detectors: ["env", "gcp"]
    

    次のドキュメントでは、指標データまたはトレースデータをエクスポートするコレクタの例を示します。

  • 直接エクスポートを使用している場合は、言語に適した Google Cloud リソース検出を使用します。

リソースラベルの設定方法

各ログエントリには、ログエントリのソース( 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 フィールドと 1 つ以上の labels があります。 モニタリング対象リソースのラベルには、少なくとも project_id または resource_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: region, cloud.availability_zone, cloud.region

cloud.platform
の値が
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: 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