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를 참고하세요.

리소스 감지기를 사용하여 OTLP 리소스 속성 설정 Google Cloud

OTLP 로그 데이터에서 OTLP 리소스 속성을 설정하려면 Google Cloud 리소스 감지기를 사용하세요. 이러한 감지기는 원격 분석의 소스를 설명하는 OTLP 리소스 속성을 원격 분석에 연결합니다.

  • 수집기 기반 내보내기의 경우 수집기 프로세서의 일부로 리소스 감지를 구성합니다. 예를 들어 수집기에서 두 개의 리소스 감지기를 지정할 수 있습니다.

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

    다음 문서에서는 측정항목 또는 trace 데이터를 내보내는 수집기의 예를 제공합니다.

  • 직접 내보내기를 사용하는 경우 언어에 적합한 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 필드와 하나 이상의 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