Mapeamento de atributos OTLP para tipo de recurso

Este documento descreve as regras que o Google Cloud Observability usa para determinar o tipo de recurso monitorado do Logging para dados de registro ingeridos pela API Telemetry. O recurso monitorado descreve a origem dos dados de registro e, em uma LogEntry, é representado usando rótulos. O Google Cloud Observability determina os valores desses rótulos usando os atributos de recurso OTLP.

Estrutura geral dos dados de registro formatados em OTLP

Quando os dados de registro são enviados para Google Cloud usando a API Telemetry, estes dados precisam estar em um formato consistente com o OTLP. A estrutura geral desses dados é mostrada abaixo:

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

O OpenTelemetry agrupa registros individuais, cada um representado por uma estrutura logRecord, com informações sobre a origem desses registros, que é representada pela estrutura resource.

Quando o Google Cloud Observability recebe um objeto resourceLogs, ele cria um LogEntry para cada logRecord. Ao contrário do OTLP, que agrupa informações de origem com uma coleção de registros individuais, cada estrutura LogEntry contém informações sobre a origem do registro e o próprio registro.

Para saber mais sobre a estrutura dos dados de registro formatados em OTLP, consulte o OpenTelemetry logs.proto.

Definir atributos de recurso OTLP usando o Google Cloud detector de recursos

Para definir atributos de recurso OTLP nos dados de registro OTLP, use um Google Cloud detector de recursos. Esses detectores anexam à telemetria os atributos de recurso OTLP que descrevem a origem da telemetria:

Como os rótulos de recursos são definidos

Cada entrada de registro contém um conjunto de rótulos que identifica a origem da entrada de registro, que é também conhecida como um recurso monitorado do Logging. A seguir, ilustramos os rótulos do 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"
}

Como mostrado, um recurso monitorado tem um campo type e um ou mais labels. No mínimo, os rótulos de um recurso monitorado incluem project_id ou resource_container.

A tabela a seguir descreve as regras que o Google Cloud Observability usa para mapear atributos de recurso OTLP para um recurso monitorado. A tabela está ordenada. Ou seja, se os atributos de recurso incluírem cloud.platform e o valor for gcp_compute_engine, o tipo de recurso monitorado será definido como gce_instance. Para determinar o valor do rótulo de um recurso monitorado, o Google Cloud Observability usa uma lista priorizada de atributos de recurso. O valor de um rótulo é uma string vazia quando nenhum dos atributos de recurso está disponível.

Atributo OTLP
e valor
anexado a um registro de registro
Tipo de recurso monitorado
do Cloud Logging
Valores de rótulo de recurso monitorado
determinados pelos atributos de recurso OTLP, por prioridade
cloud.platform
tem valor
gcp_compute_engine
gce_instance

project_id: consulte Inferir o ID do projeto.

instance_id: instance_id, host.id

zone: zone, cloud.availability_zone

cloud.platform
tem valor
gcp_app_engine
gae_app

project_id: consulte Inferir o ID do projeto.

module_id: gae_module_id, faas.name

version_id: gae_version_id, faas.version

zone: zone, cloud.availability_zone

cloud.platform
tem valor
aws_ec2
aws_ec2_instance

project_id: consulte Inferir o ID do projeto.

instance_id: instance_id, host.id

aws_account: aws_account, cloud.account.id

region: region, cloud.availability_zone, cloud.region

cloud.platform
tem valor
gcp_bare_metal_solution
baremetal instance

resource_container: consulte Inferir o ID de resource_container.

region: region, cloud.availability_zone, cloud.region

instance_id: instance_id, host.id

service.name e
service.instance.id
não estão vazios
generic_task

project_id: consulte Inferir o ID do projeto.

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 e
faas.instance
não estão vazios
generic_task

project_id: consulte Inferir o ID do projeto.

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 e
k8s.container.name
não estão vazios
k8s_container

project_id: consulte Inferir o ID do projeto.

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 e
k8s.pod.name
não estão vazios
k8s_pod

project_id: consulte Inferir o ID do projeto.

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 e
k8s.node.name
não estão vazios
k8s_node

project_id: consulte Inferir o ID do projeto.

location: location, cloud.availability_zone, cloud.region

cluster_name: cluster_name, k8s.cluster.name

node_name: node_name, k8s.node.name

k8s.cluster.name
não está vazio
k8s_cluster

project_id: consulte Inferir o ID do projeto.

location: location, cloud.availability_zone, cloud.region

cluster_name: cluster_name, k8s.cluster.name

Nenhum outro rótulo corresponde generic_node

project_id: consulte Inferir o ID do projeto.

location: location, cloud.availability_zone, cloud.region

namespace: namespace, service.namespace

node_id: node_id, host.id, host_name

Inferir o valor do rótulo do ID do contêiner do projeto ou do recurso

Todos os tipos de recursos monitorados do Logging têm um rótulo project_id ou um rótulo resource_container. O sistema pesquisa os seguintes atributos, em ordem, para determinar o valor desses rótulos:

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