Vous pouvez migrer des applications Java, Go, Python et Node.js instrumentées manuellement d'un exportateur de traces Google Cloud vers un exportateur OTLP OpenTelemetry en cours de traitement. L'exportateur OTLP envoie les données de trace directement à l'API Telemetry (OTLP) de votre projet Google Cloud à l'aide des protocoles d'exportation compatibles (gRPC ou http/protobuf).
Cette configuration n'exporte que les données de trace et ne s'applique qu'aux exportateurs en cours de traitement. Si votre application utilise un collecteur OpenTelemetry, consultez Exemples d'instrumentation basée sur un collecteur et Collecteur OpenTelemetry conçu par Google.
Pourquoi migrer ?
Les SDK OpenTelemetry génèrent des données de journaux, de métriques et de traces dans un format généralement cohérent avec les fichiers proto définis par le protocole OpenTelemetry. Toutefois, les champs peuvent être convertis d'un type de données spécifique à OpenTelemetry en un type de données JSON avant le stockage.
Lorsqu'une application exporte ces données vers un projet Google Cloud à l'aide d'un exportateur Google Cloud , cet exportateur effectue les étapes suivantes :
- Transforme les données enregistrées du format OTLP en un format propriétaire défini par l'API Cloud Logging, l'API Cloud Monitoring ou l'API Cloud Trace.
- Envoie les données transformées à l'API appropriée, qui sont ensuite stockées dans votre projet Google Cloud .
Pour les données de trace, nous vous recommandons de migrer votre application afin d'utiliser l'API Telemetry (OTLP) pour exporter les données, car cette exportation ne nécessite pas de transformation des données. La transformation des données peut entraîner la perte de certaines données. Par exemple, le format propriétaire peut avoir des limites inférieures pour certains champs, ou certains champs OTLP peuvent ne pas correspondre à un champ du format propriétaire.
Échantillons disponibles
Les exemples d'applications référencés sur cette page sont disponibles sur GitHub. La plupart des applications sont configurées pour exporter des données de trace à l'aide de gRPC, ce qui signifie qu'elles envoient des données encodées en protobuf au format filaire gRPC via des connexions HTTP/2. Un exemple de code est également fourni pour les applications configurées pour exporter des données de trace en tant que données encodées en protobuf via des connexions HTTP :
-
L'exemple d'application est configuré pour exporter des traces sous forme de données encodées en protobuf via des connexions HTTP. Si vous préférez utiliser gRPC, l'instrumentation de cet exemple est applicable. Toutefois, vous devez modifier les propriétés système utilisées par le module de configuration automatique. L'exemple d'application spécifie l'exportateur
http/protobuf. Pour utiliser gRPC, définissez ce paramètre surgrpc.Nous vous recommandons d'utiliser le module de configuration automatique du SDK OpenTelemetry pour configurer le SDK dans vos applications Java, comme l'application exemple.
Application Go utilisant gRPC et Application Go utilisant HTTP
Il existe deux dépôts Go. Dans un dépôt, l'exemple d'application utilise gRPC. L'exemple de l'autre dépôt utilise des données encodées en protobuf sur des connexions HTTP.
-
Ce dépôt contient deux exemples : un pour gRPC et un autre qui utilise des données encodées en protobuf sur des connexions HTTP.
-
Ce dépôt contient deux exemples : un pour gRPC et un autre qui utilise des données encodées en protobuf sur des connexions HTTP.
Avant de commencer
Avant de migrer votre application pour envoyer des données de trace au point de terminaison OTLP, activez l'API Telemetry et assurez-vous de disposer des rôles IAM (Identity and Access Management) requis. Vous devrez peut-être aussi attribuer des rôles IAM à un compte de service.
Activer la facturation et l'API Telemetry
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Configurer les autorisations
-
Pour vous assurer que le compte de service utilisé par votre application dispose des autorisations nécessaires pour écrire des données de journaux, de métriques et de traces, demandez à votre administrateur d'accorder les rôles IAM suivants au compte de service utilisé par votre application :
- Rédacteur de journaux (
roles/logging.logWriter) sur votre projet - Rédacteur de métriques Monitoring (
roles/monitoring.metricWriter) sur votre projet - Rédacteur de traces de télémétrie cloud (
roles/telemetry.tracesWriter) sur votre projet - Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer) sur votre projet de quota
Pour savoir comment configurer un projet de quota, consultez Définir le projet de quota.
Pour en savoir plus sur les Identifiants par défaut de l'application (ADC), consultez Fonctionnement des identifiants par défaut de l'application et Configurer les Identifiants par défaut de l'application (ADC) pour un environnement de développement local.
- Rédacteur de journaux (
-
Pour obtenir les autorisations nécessaires pour afficher vos données de journaux, de métriques et de traces, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
- Visionneuse de journaux (
roles/logging.viewer) - Lecteur Monitoring (
roles/monitoring.viewer) -
Utilisateur Cloud Trace (
roles/cloudtrace.user)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
- Visionneuse de journaux (
Guide de migration pour l'instrumentation manuelle
Cette section explique comment modifier votre application pour qu'elle envoie vos données de trace à votre projet Google Cloud à l'aide de l'API Telemetry.
Ajouter des dépendances
La première étape consiste à ajouter des dépendances pour l'exportateur de traces OTLP d'OpenTelemetry dans votre application. Sélectionnez les versions de dépendance appropriées pour votre application et votre système de compilation.
Java
Pour une application Java, ajoutez les dépendances suivantes dans votre script build.gradle :
Go
Cette section illustre les modifications que vous devez apporter à vos dépendances lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, incluez le package otlptracehttp en tant que dépendance. Pour en savoir plus, consultez Application Go utilisant HTTP.
Pour une application Go qui utilise gRPC pour l'exportation, mettez à jour le fichier go.mod pour inclure la dépendance suivante :
Python
Cette section illustre les modifications que vous devez apporter à vos dépendances lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, incluez le package opentelemetry-exporter-otlp-proto-http comme exigence. Pour en savoir plus, consultez le dépôt Python.
Pour une application Python qui utilise gRPC pour l'exportation, installez les dépendances suivantes ou mettez à jour le fichier requirements.txt :
Node.js
Cette section illustre les modifications que vous devez apporter à vos dépendances lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, incluez le package @opentelemetry/exporter-trace-otlp-proto en tant que dépendance. Pour en savoir plus, consultez Application Node.js.
Pour une application Node.js qui exporte des données de trace à l'aide de gRPC, ajoutez les dépendances suivantes :
"@opentelemetry/exporter-trace-otlp-grpc": "0.221.0",
"@grpc/grpc-js": "1.14.4"
Remplacer l'utilisation des exportateurs Google Cloud par des exportateurs OTLP
Mettez à jour le code de votre application de sorte que le SDK OpenTelemetry soit configuré pour utiliser les exportateurs OTLP OpenTelemetry au lieu d'un exportateur de traces Google Cloud . Les modifications requises sont spécifiques à chaque langage.
Java
Pour une application Java, procédez comme suit :
Ajoutez les instructions d'importation suivantes :
Mettez à jour le code de l'application pour utiliser le module de configuration automatique du SDK OpenTelemetry afin de configurer le SDK :
Configurez les propriétés système que le module de configuration automatique utilise au moment de l'exécution. Ce module utilise ces propriétés pour amorcer le SDK. Vous pouvez également utiliser des variables d'environnement au lieu de propriétés système. Pour en savoir plus, consultez Variables d'environnement et propriétés système.
L'exemple d'application définit les propriétés système dans le script
build.gradle:Transmettez également la configuration en tant qu'arguments JVM :
Si vous préférez exporter les données de trace à l'aide de gRPC, définissez le protocole OTLP sur
grpcau lieu dehttp/protobuf.
Go
Cette section illustre les modifications que vous devez apporter lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, vous devez importer le package otlptracehttp et configurer l'exportateur avec les options correspondantes. Pour en savoir plus, consultez Application Go qui utilise HTTP.
Pour une application Go qui utilise gRPC pour l'exportation, ajoutez les instructions d'importation suivantes :
Mettez également à jour le code d'initialisation pour configurer TraceProvider avec l'exportateur gRPC :
Python
Cette section illustre les modifications que vous devez apporter lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, vous devez importer à partir du package opentelemetry.exporter.otlp.proto.http et configurer l'exportateur avec les options correspondantes. Pour en savoir plus, consultez le dépôt Python.
Pour une application Python qui utilise gRPC pour l'exportation, ajoutez les importations suivantes :
Mettez également à jour le code d'initialisation pour configurer TraceProvider avec l'exportateur gRPC :
Node.js
Cette section illustre les modifications que vous devez apporter lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, importez le package @opentelemetry/exporter-trace-otlp-proto.
Pour en savoir plus, consultez Application Node.js.
Pour une application Node.js qui utilise gRPC pour l'exportation, ajoutez les importations suivantes :
Mettez également à jour le code d'initialisation pour configurer TraceProvider avec l'exportateur gRPC :
Configurer l'authentification
Avec les modifications précédentes apportées à la configuration du SDK OpenTelemetry, votre application est configurée pour exporter des traces avec les exportateurs OTLP OpenTelemetry à l'aide de gRPC ou de HTTP. Vous devez ensuite configurer les exportateurs pour qu'ils envoient ces traces à votre projet Google Cloud .
Pour configurer l'authentification, procédez comme suit :
- Configurez les en-têtes d'authentification pour les appels d'exportation.
- Configurez les attributs de ressource OpenTelemetry et les en-têtes OTLP requis.
- Configurez le point de terminaison de l'exportateur.
Cette section détaille chacune de ces étapes.
Configurer les en-têtes d'authentification pour les appels d'exportation
Pour configurer l'exportateur avec vos identifiants par défaut de l'application (ADC) Google Cloud, ajoutez une bibliothèque d'authentification Google spécifique au langage.
Java
Pour une application Java qui utilise le module de configuration automatique du SDK OpenTelemetry, nous vous recommandons d'utiliser également l'extension d'authentification Google Cloud.
Go
Pour une application Go qui utilise gRPC pour l'exportation, mettez à jour le fichier go.mod pour inclure la dépendance suivante :
Pour une application Go qui utilise HTTP pour l'exportation, mettez à jour le fichier go.mod pour inclure la dépendance suivante :
Python
Pour une application Python, ajoutez les dépendances suivantes à votre fichier requirements.txt :
Node.js
Pour une application Node.js, ajoutez la dépendance suivante :
"google-auth-library": "10.5.0"
Ensuite, mettez à jour le code de l'application qui crée l'exportateur de segments OTLP afin qu'il ajoute aux en-têtes les jetons d'autorisation récupérés à partir de la bibliothèque. Cette étape est spécifique au langage, mais l'implémentation est semblable pour tous les langages.
Java
Lorsque vous disposez d'une application Java qui utilise le module de configuration automatique du SDK OpenTelemetry et l'extension d'authentification Google Cloud, vous n'avez pas besoin d'effectuer d'étapes spéciales lors de l'initialisation de votre application. Le module autoconfigure effectue automatiquement les étapes nécessaires pour configurer les ADC.
Go
Cette section illustre les modifications que vous devez apporter lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, vous devez importer le package otlptracehttp et configurer l'exportateur en tant qu'objet otlptracehttp. Pour en savoir plus, consultez Application Go qui utilise HTTP.
Pour une application Go qui utilise gRPC pour l'exportation, ajoutez les instructions d'importation suivantes :
Mettez également à jour le code d'initialisation pour configurer ADC avant d'instancier l'exportateur gRPC :
Python
Cette section illustre les modifications que vous devez apporter lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, utilisez les identifiants par défaut. Vous devez également transmettre ces identifiants lorsque vous instanciez BatchSpanProcessor. Pour en savoir plus, consultez le dépôt Python.
Pour une application Python qui utilise gRPC pour l'exportation, ajoutez les importations suivantes :
Mettez également à jour le code d'initialisation pour configurer ADC avant d'instancier l'exportateur gRPC :
Node.js
Cette section illustre les modifications que vous devez apporter lorsque vous utilisez gRPC pour l'exportation. Si vous utilisez des données encodées en protobuf sur des connexions HTTP pour l'exportation, les modifications à apporter sont légèrement différentes de celles décrites ici.
Pour en savoir plus, consultez le fichier app-http-proto-export.ts inclus dans l'application Node.js.
Pour une application Node.js qui utilise gRPC pour l'exportation, ajoutez les importations suivantes :
Mettez également à jour le code d'initialisation pour configurer ADC avant d'instancier l'exportateur gRPC :
Configurer les attributs de ressource OpenTelemetry requis
Ajoutez à la variable d'environnement OTEL_RESOURCE_ATTRIBUTES la paire clé-valeur qui spécifie votre projet. Pour la clé, utilisez gcp.project_id.
Pour la valeur, utilisez l'ID de votre projet Google Cloud .
Exemple :
export OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=PROJECT_ID"
Si vous utilisez Java et configurez votre application pour utiliser l'extension d'authentification Google Cloud, comme le fait l'exemple d'application Java, vous n'avez pas besoin de définir l'ID du projet dans les attributs de ressource OpenTelemetry. Toutefois, la définition de cet attribut n'est pas nuisible.
Pour en savoir plus sur les variables d'environnement OpenTelemetry, consultez Configuration générale du SDK.
Définir l'ID du projet de quota
Le projet de quota est le projet Google Cloud qui suit votre utilisation des requêtes API. Comme l'API Telemetry est une API basée sur le client, la façon dont vous vous authentifiez détermine si le projet de quota est automatiquement identifié. Par exemple, vous n'avez pas besoin de spécifier le projet de quota lorsque vous utilisez un compte de service pour l'authentification. Toutefois, vous devez spécifier le projet de quota lorsque des identifiants utilisateur sont utilisés pour l'authentification.
Vous pouvez définir un projet de quota à l'aide d'une variable d'environnement. Pour déterminer la variable d'environnement à définir pour votre langage de programmation, consultez Définir le projet de quota à l'aide d'une variable d'environnement.
Par exemple, pour Go, vous pouvez définir le projet de quota comme suit :
export GOOGLE_CLOUD_QUOTA_PROJECT="QUOTA_PROJECT_ID"
Pour savoir comment résoudre les erreurs d'authentification, consultez Les identifiants utilisateur ne fonctionnent pas.
Configurer le point de terminaison de l'exportateur
Définissez la valeur de la variable d'environnement OTEL_EXPORTER_OTLP_ENDPOINT sur le point de terminaison OTLP pour Google Cloud.
Exemple :
export OTEL_EXPORTER_OTLP_ENDPOINT=https://telemetry.googleapis.com
Si vous utilisez Java et le module de configuration automatique, vous pouvez définir le point de terminaison de l'exportateur à l'aide des propriétés système, comme le fait l'exemple d'application Java. Vous n'avez pas besoin de définir la variable d'environnement de l'exportateur pour cette configuration.
Pour en savoir plus sur les variables d'environnement OpenTelemetry, consultez Configuration générale du SDK.