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 ごとに 1 つの LogEntry が作成されます。個々のログのコレクションでソース情報をバッチ処理する OTLP とは異なり、各 LogEntry 構造には、ログのソースとログ自体に関する情報が含まれています。

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

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

OTLP ログデータで OTLP リソース属性を設定するには、Google Cloud リソース検出機能を使用します。これらの検出機能は、テレメトリーの送信元を記述する OTLP リソース属性をテレメトリーに付加します。

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

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

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

  • 直接エクスポートを使用している場合は、言語に適した 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 フィールドと 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