Vous pouvez ingérer des données de journaux, de métriques et de traces au format OTLP dans Google Cloud Observability à l'aide de l'API Telemetry (OTLP), qui implémente le protocole OpenTelemetry. Cette API vous permet de collecter des données de télémétrie neutres du point de vue du fournisseur à partir des SDK et collecteurs OpenTelemetry sans utiliser d'exportateurs Google Cloud personnalisés.
Lorsque vous envoyez des données de télémétrie à votre projet à l'aide de l'API Telemetry, Google Cloud Observability traite chaque signal comme suit :
- Données de journaux : convertit les enregistrements de journaux OTLP en entrées de journaux et les achemine pour le stockage.
- Données de métriques : mappe les données de métriques aux séries temporelles Prometheus dans Cloud Monitoring.
- Données de trace : stockent les traces distribuées dans un format généralement compatible avec OTLP.
Si vous exécutez des charges de travail sur Google Kubernetes Engine, vous pouvez utiliser Managed OpenTelemetry pour GKE au lieu de déployer et de gérer manuellement un collecteur OpenTelemetry.
Compatibilité avec le protocole
Le point de terminaison OTLP est compatible avec tous les protocoles de transport et de sérialisation OTLP, y compris http/protobuf, http/json et grpc. Lorsque vous exportez directement des applications à l'aide de SDK, nous vous recommandons d'utiliser l'exportateur gRPC OTLP plutôt que les exportateurs HTTP, car la plupart des exportateurs de SDK ne sont pas compatibles avec l'actualisation dynamique des jetons.
Authentification
Vous devez configurer vos exportateurs avec les identifiants nécessaires pour envoyer des données à votre projet Google Cloud . Par exemple, lorsque vous utilisez des collecteurs, vous utilisez généralement l'extension googleclientauth pour vous authentifier avec les identifiants Google.
Pour obtenir un exemple d'authentification lors de l'exportation directe des données de trace, consultez Configurer l'authentification. Cet exemple montre comment configurer l'exportateur avec vos Google Cloud identifiants par défaut de l'application (ADC) et comment ajouter une bibliothèque d'authentification Google spécifique à une langue à votre application.
Pour envoyer des données de télémétrie à votre projet Google Cloud à l'aide de l'API Telemetry, vous devez également effectuer les opérations suivantes :
Configurer un projet de quota Pour en savoir plus, consultez Définir le projet de quota.
Attribuez les rôles IAM (Identity and Access Management) suivants à l'utilisateur ou au compte de service utilisé par l'application :
- Rôle Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer) sur le projet de quota. - Le rôle Rédacteur de télémétrie cloud (
roles/telemetry.writer) sur le projet. Ce rôle permet à votre application d'écrire des données de journaux, de métriques et de traces.
- Rôle Consommateur Service Usage (
Ingestion OTLP
Cette section décrit comment vos données de journaux, de métriques et de traces sont converties d'OTLP en structures de données Google Cloud Observability.
Ingestion de données de journaux
Lorsque vous utilisez l'API Telemetry pour ingérer des journaux au format OTLP, vos données de journaux sont converties en entrées de journal Cloud Logging. Une requête de journal au format OTLP entrant en JSON a la structure générale suivante :
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"scope": { ...}
"logRecords": [...]
}
]
}
]
Chaque élément de chaque tableau logRecords devient une entrée de journal Cloud Logging unique. Les attributs resource déterminent la ressource surveillée dans le LogEntry résultant. Pour en savoir plus sur les attributs requis pour l'ingestion de journaux au format OTLP, consultez Mappage des attributs OTLP aux types de ressources.
Pour prendre en charge l'ingestion de journaux au format OTLP, la structure LogEntry de Cloud Logging contient un champ supplémentaire, otel. Étant donné que les modèles de données OTLP et Cloud Logging diffèrent en termes de structure, le champ otel conserve une copie des métadonnées de ressource, de champ d'application et d'entité de la requête OTLP entrante.
Par exemple, si vous envoyez une charge utile OTLP resourceLogs comme suit à l'API Telemetry, chaque entrée de journal résultante contient un champ resource (pour la ressource surveillée) et un champ otel, comme indiqué dans les autres onglets :
resourceLogs
{
"resourceLogs": [
{
"resource": {
"attributes": [
{
"key": "gcp.project_id",
"value": { "stringValue": "PROJECT_ID" }
},
{
"key": "gcp.resource_type",
"value": { "stringValue": "global" }
}
]
},
"scopeLogs": [
{
"scope": {
"name": "my.library",
"version": "1.0.0",
"attributes": [
{
"key": "my.scope.attribute",
"value": { "stringValue": "some scope attribute" }
}
]
},
"logRecords": [ ... ]
}
]
}
]
}
resource
{
...
"resource": {
"labels": {
"project_id": "PROJECT_ID"
},
"type": "global"
},
...
}
otel
{
...
"otel": {
"resource": {
"attributes": {
"gcp.project_id": "PROJECT_ID",
"gcp.resource_type": "global"
}
},
"scope": {
"attributes": {
"my.scope.attribute": "some scope attribute"
},
"name": "my.library",
"version": "1.0.0"
}
},
...
}
Étant donné que les entrées de journal Cloud Logging sont autonomes et ne sont pas associées à des schémas de ressources externes, toutes les métadonnées OTLP de ressource, de champ d'application et d'entité sont copiées dans chaque entrée de journal.
Ingestion de données de métriques
OTLP pour les métriques Prometheus ne fonctionne que lorsque vous utilisez le collecteur OpenTelemetry version 0.140.0 ou ultérieure.
Lorsque des métriques sont ingérées dans Cloud Monitoring à l'aide d'un collecteur OpenTelemetry et de l'exportateur otlphttp, ou envoyées directement à l'aide d'un SDK OpenTelemetry, les métriques OTLP sont mappées sur les structures de métriques Cloud Monitoring. Pour en savoir plus sur ces mappages, consultez les pages suivantes :
- Mappage entre les ressources OTLP et les ressources surveillées Cloud Monitoring
- Mappage entre les métriques OTLP et les métriques Cloud Monitoring.
Google Cloud Observability convertit les métriques au format de série temporelle Prometheus. Les noms de métriques ne doivent pas comporter de domaine ou doivent comporter le domaine prometheus.googleapis.com.
Après la conversion, le nom de la métrique inclut le préfixe prometheus.googleapis.com et un suffixe supplémentaire, basé sur le type de point OTLP. La métrique Cloud Monitoring obtenue présente la structure suivante :
prometheus.googleapis.com/{metric_name}/{suffix}
De plus, pour chaque ressource OpenTelemetry unique, la conversion ajoute une métrique target_info qui contient tous les attributs de ressource, à l'exception de service.name, service.instance.id et service.namespace.
Étant donné que les noms de métriques et les clés de libellés dans Cloud Monitoring ne sont pas entièrement compatibles avec l'UTF-8, les données de métriques peuvent être refusées :
- Les noms de métriques qui ne respectent pas l'expression régulière
[a-zA-Z][a-zA-Z0-9_:./-]*sont refusés. Les seuls caractères spéciaux autorisés dans les noms de métriques sont ceux de l'ensemble_:./-. - Les points de données contenant des attributs (c'est-à-dire des clés de libellé) qui ne respectent pas l'expression régulière
[a-zA-Z_][a-zA-Z0-9_.]*sont refusés. Les seuls caractères spéciaux autorisés dans les clés de libellé appartiennent à l'ensemble_.. Tous les caractères spéciaux sont autorisés dans les valeurs de libellé.
Pour éviter que vos métriques ne soient refusées pour ces raisons, utilisez la fonction replace_pattern pour transformer vos noms et attributs de métriques.
Ingestion de données de trace
Que vous utilisiez l'API Telemetry ou l'API Cloud Trace, les données de trace entrantes sont stockées dans un format compatible avec OTLP. Toutefois, nous vous recommandons d'utiliser l'API Telemetry, car elle offre des quotas d'ingestion plus élevés que l'API Cloud Trace.
Voici un exemple de données de trace qui peuvent être envoyées d'une application à votre projet Google Cloud :
{
"resourceSpans": [
{
"resource": {
"attributes": [...]
},
"scopeSpans": [
{
"scope": { ...},
"spans": [...]
}
]
}
]
}
Chaque élément de chaque tableau scopeSpans.spans devient une seule étendue stockée :
- Le champ
resourcede chaque span contient une copie des donnéesresourceSpans.resource.attributes. - Le champ
instrumentation_scopede chaque span contient une copie des donnéesscopeSpans.scope. - Chaque span correspond à une entrée dans le tableau
scopeSpans.spans. Les champs tels quetraceId,spanIdetkindsont mappés dans des champs portant un nom similaire dans le schéma de trace.
Pour en savoir plus, consultez les documents suivants :
Facturation
La facturation des données de journaux, de métriques et de trace ingérées à l'aide de l'API Telemetry dépend du signal de télémétrie. Pour en savoir plus, consultez la page Facturation.
Facturation des données de journaux
Lorsque vous utilisez l'API Telemetry pour ingérer des journaux, vous pouvez constater une modification des valeurs de stockage et de facturation de Cloud Logging en raison d'un changement du volume de journaux.
Les plus grands changements apportés au stockage et à la facturation de votre projet Google Cloud se produisent lorsque les deux conditions suivantes sont remplies :
- Le champ
resourcecontient des attributs à cardinalité élevée ou un grand nombre d'attributs. Ces attributs de ressource déterminent la ressource surveillée dans leLogEntryrésultant. - Le champ
scopeLogscontient un grand nombre d'éléments dans les tableauxlogRecords. Les champsscopeLogs.scopesont copiés dans le champotelpour chaque entrée de journal individuelle.
Étant donné que ces métadonnées de ressources et de portée sont copiées dans chaque entrée de journal individuelle, le volume de journaux stockés peut augmenter.
Pour minimiser le volume de stockage, nous vous recommandons de procéder comme suit :
- Utilisez un processeur OpenTelemetry Collector, tel qu'un processeur
transform, pour supprimer les attributs de ressource ou de portée inutiles avant d'exporter les données. - Si vous n'avez pas besoin de conserver les métadonnées supplémentaires dans le champ
otel, utilisez l'ancienne option de mappage,gcp.use_legacy_mapping, qui empêche le champoteld'être renseigné.
Facturation des données de métriques
La facturation des métriques OTLP est comptabilisée sous le SKU "Échantillons Prometheus ingérés", qui est le même que celui utilisé pour les métriques de Google Cloud Managed Service pour Prometheus.
Facturation des données de trace
L'API que vous utilisez pour envoyer des données de trace à votre projet n'a aucune incidence sur le calcul des frais pour ces données.
Interroger les données de vos journaux, métriques et traces
Vous pouvez utiliser les pages de l'explorateur (Explorateur de journaux, Explorateur de métriques et Explorateur de traces) pour interroger vos données de journaux, de métriques et de traces. Vous pouvez également utiliser la page "Observability Analytics" pour analyser vos données de journaux et de traces à l'aide de SQL.
Les conseils suivants peuvent vous être utiles lorsque vous interrogez vos données de métriques à l'aide de l'explorateur de métriques :
Important : Pour interroger des noms de métriques et des clés de libellés contenant des caractères spéciaux autres que le deux-points (
:) et le trait de soulignement (_), vous devez les placer entre accolades ({}) et guillemets ("), conformément à la spécification UTF-8 de PromQL. Par exemple, les requêtes suivantes sont valides :{"my.metric.name"}{"my.metric.name", "label.key.KEY"="value"}
Conserver le libellé
lelorsque vous interrogez des histogrammes exponentiels peut renvoyer des résultats inattendus. Les requêteshistogram_quantile(.99, sum by (le) (metric))plus classiques devraient fonctionner.Il est possible que les métriques delta ne soient pas correctement interrogées dans certaines circonstances, par exemple lorsque les deltas sont très clairsemés.
Limites et quotas
Les limites de l'API Telemetry s'appliquent à tous les types de signaux.
Les quotas et limites suivants s'appliquent également :
- Données de journaux : les quotas et limites de l'API Cloud Logging s'appliquent.
Données de métriques : les quotas et limites de l'API Cloud Monitoring s'appliquent. Par exemple, les métriques ne peuvent pas comporter plus de 200 libellés.
Le quota par défaut pour les métriques ingérées par l'API Telemetry est de 60 000 requêtes par minute. Avec une taille de lot maximale de 200 points par requête, ce quota correspond à un quota par défaut effectif de 200 000 échantillons par seconde. Vous pouvez demander une augmentation de quota.
Données de trace : aucune limite ni aucun quota supplémentaire ne s'appliquent.
Étapes suivantes
- Pour savoir comment migrer vers l'exportateur
otlphttpdepuis un autre exportateur, consultez Migrer vers l'exportateur OTLP. - Pour savoir comment déployer et utiliser le collecteur OpenTelemetry avec l'API Telemetry, consultez Déployer et utiliser le collecteur.
- Pour savoir comment écrire des journaux au format OTLP dans l'API Telemetry, consultez Écrire des journaux au format OTLP dans l'API Telemetry.
- Pour savoir comment envoyer des métriques à l'API Telemetry à partir d'applications qui utilisent des SDK, consultez Utiliser des SDK pour envoyer des métriques à partir d'applications.
- Pour savoir comment utiliser un collecteur OpenTelemetry et l'API Telemetry avec l'instrumentation OpenTelemetry sans code, consultez Utiliser l'instrumentation OpenTelemetry sans code pour Java.