Mappage des attributs OTLP au type de ressource

Ce document décrit les règles que Google Cloud Observability utilise pour déterminer le type de ressource surveillée Logging pour les données de journalisation ingérées par l'API Telemetry. La ressource surveillée décrit la source des données de journalisation. Dans une LogEntry, elle est représentée à l'aide de libellés. Google Cloud Observability détermine les valeurs de ces libellés à l'aide des attributs de ressource OTLP.

Structure générale des données de journalisation au format OTLP

Lorsque des données de journalisation sont envoyées à Google Cloud l'aide de l'API Telemetry, ces données doivent être au format OTLP. La structure générale de ces données est la suivante :

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

Notez qu'OpenTelemetry regroupe les journaux individuels, chacun étant représenté par une structure logRecord, avec des informations sur la source de ces journaux, représentée par la structure resource.

Lorsque Google Cloud Observability reçoit un objet resourceLogs, il crée un LogEntry pour chaque logRecord. Contrairement à OTLP, qui regroupe les informations sur la source avec une collection de journaux individuels, chaque structure LogEntry contient des informations sur la source du journal et le journal lui-même.

Pour en savoir plus sur la structure des données de journalisation au format OTLP, consultez la section logs.proto d'OpenTelemetry.

Définir les attributs de ressource OTLP à l’aide du Google Cloud détecteur de ressources

Pour définir les attributs de ressource OTLP dans vos données de journalisation OTLP, utilisez un Google Cloud détecteur de ressources. Ces détecteurs associent à la télémétrie les attributs de ressource OTLP qui décrivent la source de la télémétrie :

  • Pour l'exportation basée sur un collecteur, configurez la détection des ressources dans le cadre des processeurs du collecteur. Par exemple, votre collecteur peut spécifier deux détecteurs de ressources :

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

    Les documents suivants fournissent des exemples de collecteurs qui exportent des données de métriques ou de trace :

  • Si vous utilisez l'exportation directe, utilisez le détecteur de ressources approprié Google Cloud pour votre langage :

Définir les libellés de ressource

Chaque entrée de journal contient un ensemble de libellés qui identifient la source de l'entrée de journal, également appelée une ressource surveillée Logging. L'illustration suivante présente les libellés de 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"
}

Comme indiqué, une ressource surveillée comporte un champ type et un ou plusieurs labels. Au minimum, les libellés d'une ressource surveillée incluent project_id ou resource_container.

Le tableau suivant décrit les règles que Google Cloud Observability utilise pour mapper les attributs de ressource OTLP à une ressource surveillée. Le tableau est ordonné. Autrement dit, si les attributs de ressource incluent cloud.platform et que la valeur est gcp_compute_engine, le type de ressource surveillée est défini sur gce_instance. Pour déterminer la valeur du libellé d'une ressource surveillée, Google Cloud Observability utilise une liste priorisée d'attributs de ressource. La valeur d'un libellé est une chaîne vide lorsqu'aucun des attributs de ressource n'est disponible.

Attribut OTLP
et valeur
associés à un enregistrement de journal
Cloud Logging
type de ressource surveillée
Valeurs des libellés de ressource surveillée
déterminées à partir des attributs de ressource OTLP, par ordre de priorité
cloud.platform
a la valeur
gcp_compute_engine
gce_instance

project_id : consultez Déduire l'ID de projet.

instance_id: instance_id, host.id

zone: zone, cloud.availability_zone

cloud.platform
a la valeur
gcp_app_engine
gae_app

project_id : consultez Déduire l'ID de projet.

module_id: gae_module_id, faas.name

version_id: gae_version_id, faas.version

zone: zone, cloud.availability_zone

cloud.platform
a la valeur
aws_ec2
aws_ec2_instance

project_id : consultez Déduire l'ID de projet.

instance_id: instance_id, host.id

aws_account: aws_account, cloud.account.id

region: region, cloud.availability_zone, cloud.region

cloud.platform
a la valeur
gcp_bare_metal_solution
baremetal instance

resource_container : consultez Déduire l'ID resource_container.

region: region, cloud.availability_zone, cloud.region

instance_id: instance_id, host.id

service.name et
service.instance.id
ne sont pas vides
generic_task

project_id : consultez Déduire l'ID de projet.

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 et
faas.instance
ne sont pas vides
generic_task

project_id : consultez Déduire l'ID de projet.

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 et
k8s.container.name
ne sont pas vides
k8s_container

project_id : consultez Déduire l'ID de projet.

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 et
k8s.pod.name
ne sont pas vides
k8s_pod

project_id : consultez Déduire l'ID de projet.

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 et
k8s.node.name
ne sont pas vides
k8s_node

project_id : consultez Déduire l'ID de projet.

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'est pas vide
k8s_cluster

project_id : consultez Déduire l'ID de projet.

location: location, cloud.availability_zone, cloud.region

cluster_name: cluster_name, k8s.cluster.name

Aucun autre libellé ne correspond generic_node

project_id : consultez Déduire l'ID de projet.

location: location, cloud.availability_zone, cloud.region

namespace: namespace, service.namespace

node_id: node_id, host.id, host_name

Déduire la valeur du libellé d'ID de projet ou de conteneur de ressources

Tous les types de ressources surveillées Logging comportent un libellé project_id ou un libellé resource_container. Le système recherche les attributs suivants, dans l'ordre, pour déterminer la valeur de ces libellés :

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