Mappatura degli attributi OTLP al tipo di risorsa

Questo documento descrive le regole utilizzate da Google Cloud Observability per determinare il tipo di risorsa monitorata Logging per i dati di log importati dall'API Telemetry. La risorsa monitorata descrive l' origine dei dati di log e, in un LogEntry, è rappresentata tramite le etichette. Google Cloud Observability determina i valori di queste etichette utilizzando gli attributi delle risorse OTLP.

Struttura generale dei dati di log in formato OTLP

Quando i dati di log vengono inviati a Google Cloud utilizzando l'API Telemetry, questi dati devono essere in un formato coerente con OTLP. La struttura generale di questi dati è la seguente:

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

Tieni presente che OpenTelemetry raggruppa i singoli log, ognuno dei quali è rappresentato da una struttura logRecord, con informazioni sull'origine di questi log, rappresentata dalla struttura resource.

Quando Google Cloud Observability riceve un oggetto resourceLogs, crea un LogEntry per ogni logRecord. A differenza di OTLP, che raggruppa le informazioni sull'origine con una raccolta di singoli log, ogni struttura LogEntry contiene informazioni sull'origine del log e sul log stesso.

Per saperne di più sulla struttura dei dati di log in formato OTLP, consulta logs.proto di OpenTelemetry.

Impostare gli attributi delle risorse OTLP utilizzando il Google Cloud rilevatore di risorse

Per impostare gli attributi delle risorse OTLP nei dati di log OTLP, utilizza un Google Cloud rilevatore di risorse. Questi rilevatori collegano alla telemetria gli attributi delle risorse OTLP che descrivono l'origine della telemetria:

  • Per l'esportazione basata su agenti di raccolta, configura il rilevamento delle risorse come parte dei processori dell'agente di raccolta. Ad esempio, l'agente di raccolta potrebbe specificare due rilevatori di risorse:

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

    I seguenti documenti forniscono esempi di agenti di raccolta che esportano dati di metriche o tracce:

  • Se utilizzi l'esportazione diretta, utilizza il rilevatore di risorse appropriato Google Cloud per la tua lingua:

Come vengono impostate le etichette delle risorse

Ogni voce di log contiene un insieme di etichette che identifica l'origine della voce di log, che è nota anche come risorsa monitorata Logging. La seguente figura illustra le etichette per 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"
}

Come mostrato, una risorsa monitorata ha un campo type e una o più labels. Come minimo, le etichette per una risorsa monitorata includono project_id o resource_container.

La tabella seguente descrive le regole utilizzate da Google Cloud Observability per mappare gli attributi delle risorse OTLP a una risorsa monitorata. La tabella è ordinata. Ciò significa che, se gli attributi delle risorse includono cloud.platform e il valore è gcp_compute_engine, il tipo di risorsa monitorata viene impostato su gce_instance. Per determinare il valore dell'etichetta di una risorsa monitorata, Google Cloud Observability utilizza un elenco prioritario di attributi delle risorse. Il valore di un'etichetta è una stringa vuota quando non è disponibile nessuno degli attributi delle risorse.

Attributo OTLP
e valore
allegati a un record di log
Tipo di risorsa monitorata Cloud Logging
Valori delle etichette delle risorse monitorate
determinati dagli attributi delle risorse OTLP, per priorità
cloud.platform
ha valore
gcp_compute_engine
gce_instance

project_id: vedi Inferire l'ID progetto.

instance_id: instance_id, host.id

zone: zone, cloud.availability_zone

cloud.platform
ha valore
gcp_app_engine
gae_app

project_id: vedi Inferire l'ID progetto.

module_id: gae_module_id, faas.name

version_id: gae_version_id, faas.version

zone: zone, cloud.availability_zone

cloud.platform
ha valore
aws_ec2
aws_ec2_instance

project_id: vedi Inferire l'ID progetto.

instance_id: instance_id, host.id

aws_account: aws_account, cloud.account.id

region: region, cloud.availability_zone, cloud.region

cloud.platform
ha valore
gcp_bare_metal_solution
baremetal instance

resource_container: vedi Inferire l'ID resource_container.

region: region, cloud.availability_zone, cloud.region

instance_id: instance_id, host.id

service.name e
service.instance.id
non sono vuoti
generic_task

project_id: vedi Inferire l'ID progetto.

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
non sono vuoti
generic_task

project_id: vedi Inferire l'ID progetto.

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
non sono vuoti
k8s_container

project_id: vedi Inferire l'ID progetto.

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
non sono vuoti
k8s_pod

project_id: vedi Inferire l'ID progetto.

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
non sono vuoti
k8s_node

project_id: vedi Inferire l'ID progetto.

location: location, cloud.availability_zone, cloud.region

cluster_name: cluster_name, k8s.cluster.name

node_name: node_name, k8s.node.name

k8s.cluster.name
non è vuoto
k8s_cluster

project_id: vedi Inferire l'ID progetto.

location: location, cloud.availability_zone, cloud.region

cluster_name: cluster_name, k8s.cluster.name

Nessun'altra etichetta corrisponde generic_node

project_id: vedi Inferire l'ID progetto.

location: location, cloud.availability_zone, cloud.region

namespace: namespace, service.namespace

node_id: node_id, host.id, host_name

Inferire il valore dell'etichetta ID progetto o contenitore di risorse

Tutti i tipi di risorsa monitorata Logging hanno un'etichetta project_id o resource_container. Il sistema cerca i seguenti attributi, in ordine, per determinare il valore di queste etichette:

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