L'API Telemetry (OTLP) est une implémentation du
protocole OpenTelemetry. La prise en charge d'OTLP vous permet d'ajouter des exportateurs génériques otlphttp et otlp_grpc/otlp_logs à la configuration de votre collecteur, en évitant les exportateurs spécifiques à un fournisseur. Les applications peuvent envoyer des données de journal, de métriques et de traces à l'API Telemetry.
Ce guide s'applique à vous si la configuration de votre collecteur utilise l'
googlecloud exportateur ou l'
googlemanagedprometheus exportateur :
Données de journal : migrez de l'
googlecloudexportateur vers l'otlp_grpc/otlp_logsexportateur.Données de métriques : migrez de l'exportateur
googlemanagedprometheusvers l'exportateurotlphttp.Données de trace : migrez de l'
googlecloudexportateur vers l'otlphttpexportateur.
Pour migrer vers les exportateurs OTLP, procédez comme suit :
- Activer l'API Telemetry
- Autoriser le compte de service du collecteur
- Définir la variable d'environnement
GOOGLE_CLOUD_PROJECT - Ajouter l'extension
googleclientauth - Ajouter les exportateurs
otlphttpetotlp_grpc/otlp_logs - Ajouter des processeurs
- Mettre à jour les pipelines de service
- Valider votre configuration
- Migrer les tableaux de bord et les règles d'alerte
- Supprimer les exportateurs spécifiques à un fournisseur
Activer l'API Telemetry
Les exportateurs OTLP écrivent dans l'API Telemetry. Vous devez donc activer cette API dans votre projet. Pour activer l'API Telemetry, exécutez la commande suivante :
gcloud services enable telemetry.googleapis.com
Autoriser le compte de service du collecteur
Le collecteur s'authentifie auprès des Google Cloud API à l'aide de l'identité de l' environnement dans lequel il s'exécute. Le compte de service qui exécute votre collecteur doit être autorisé à utiliser l'API Telemetry pour écrire des données de journal, de métriques et de traces. De plus, comme l'API Telemetry est une API consommateur, vous devez spécifier explicitement le Google Cloud projet dont le quota est consommé par les appels d'API et accorder au compte de service les autorisations nécessaires pour consommer le quota de ce projet.
Rôles requis
Pour vous assurer que le compte de service qui exécute votre collecteur dispose des autorisations nécessaires pour envoyer des données de journal, de métriques et de traces, demandez à votre administrateur d'accorder les rôles IAM suivants au compte de service qui exécute votre collecteur sur votre projet :
- Rédacteur de télémétrie Cloud (
roles/telemetry.writer) - Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer)
Ces rôles prédéfinis contiennent les autorisations requises pour envoyer des données de journal, de métriques et de traces. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour envoyer des données de journal, de métriques et de traces :
-
logging.logEntries.create -
monitoring.timeSeries.create -
telemetry.traces.write -
serviceusage.services.use
Compte de service Kubernetes
Si vous déployez le collecteur sur Google Kubernetes Engine (GKE) à l'aide de Workload Identity Federation for GKE, accordez les rôles requis à votre compte de service Kubernetes.
Vous pouvez utiliser les commandes suivantes pour accorder les rôles requis si votre quota d'API est extrait du même Google Cloud projet que celui qui est la destination des appels d'API Telemetry. Avant d'exécuter les commandes, remplacez PROJECT_ID par l' ID de votre projet. Toutefois, si vous utilisez un projet de quota distinct, remplacez PROJECT_ID dans la deuxième commande par l'ID de votre projet de quota :
export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/telemetry.writer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/opentelemetry/sa/opentelemetry-collector \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/serviceusage.serviceUsageConsumer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/opentelemetry/sa/opentelemetry-collector \
--condition=None
Compte de service pour Workload Identity Federation for GKE
Si vous avez configuré un compte de service pour Workload Identity Federation for GKE, vous pouvez utiliser la commande de la documentation Google Cloud Managed Service pour Prometheus pour autoriser le compte de service, en apportant les modifications suivantes :
- Remplacez
gmp-test-sapar le nom de votre compte de service. - Exécutez la commande pour accorder les rôles requis afin d'écrire des données de journal, de métriques et de traces.
Autre compte de service
Si vous exécutez le collecteur sur une VM Compute Engine ou en dehors de GKE, accordez les rôles requis au Google Cloud compte de service utilisé par votre déploiement.
Définir la variable d'environnement GOOGLE_CLOUD_PROJECT
Définissez la variable d'environnement GOOGLE_CLOUD_PROJECT dans le déploiement de votre collecteur. Le résultat ressemble à ceci :
env:
- name: GOOGLE_CLOUD_PROJECT
value: PROJECT_ID
Ajouter l'extension googleclientauth
Ajoutez l'extension googleclientauth à la configuration de votre collecteur.
L'API Telemetry est une API consommateur et nécessite que vous spécifiiez à la fois
votre Google Cloud projet et votre projet de quota. Le résultat doit ressembler à ce qui suit :
extensions:
googleclientauth:
project: ${GOOGLE_CLOUD_PROJECT}
quota_project: ${GOOGLE_CLOUD_PROJECT}
Ajouter les exportateurs otlphttp et otlp_grpc/otlp_logs
Utilisez l'exportateur otlphttp pour envoyer des données de métriques et de traces au format OTLP à votre projet, et l'exportateur otlp_grpc/otlp_logs pour envoyer des données de journal.
Veillez à configurer les deux exportateurs avec l'extension googleclientauth.
Le résultat doit ressembler à ce qui suit :
exporters:
# ... existing content ...
otlphttp:
encoding: proto
endpoint: https://telemetry.googleapis.com
auth:
authenticator: googleclientauth
otlp_grpc/otlp_logs:
auth:
authenticator: googleclientauth
balancer_name: pick_first
endpoint: telemetry.googleapis.com:443
Pour l'exportateur otlp_grpc/otlp_logs, le champ endpoint doit être spécifié au format host:port.
Ajouter des processeurs
Cette section liste les processeurs que vous devez ajouter à votre collecteur. Vous pouvez également utiliser d'autres processeurs. Par exemple, les configurations de collecteur Google-Built OpenTelemetry Collector incluent généralement le processeur memory_limiter et un processeur qui transforme les données de métriques. Pour obtenir un exemple, consultez
Google-Built OpenTelemetry Collector sur GKE.
Ajouter le processeur resource/gcp_project_id
Ajoutez un processeur resource qui capture des informations sur votre
Google Cloud projet.
resource/gcp_project_id:
attributes:
- action: insert
value: ${GOOGLE_CLOUD_PROJECT}
key: gcp.project_id
Ajouter le processeur resourcedetection
Si vous exécutez sur Google Cloud, envisagez d'ajouter le
resourcedetection processeur. Ce processeur peut découvrir automatiquement des informations sur votre architecture.
La configuration suivante recherche les variables d'environnement OpenTelemetry standards, puis interroge le Google Cloud serveur de métadonnées pour collecter des informations sur votre infrastructure :
resourcedetection:
detectors: ["env", "gcp"]
Ajouter le processeur batch
Pour envoyer plus efficacement votre télémétrie à votre Google Cloud projet, nous vous recommandons
d'utiliser le batch processeur.
Par exemple, le collecteur Google-Built OpenTelemetry Collector utilise la configuration suivante pour le processeur de lot :
batch:
send_batch_max_size: 200
send_batch_size: 200
timeout: 5s
Ajouter le processeur metricstarttime
Ajoutez le processeur metricstarttime à la configuration. Ce processeur s'assure que les métriques cumulatives incluent à la fois une heure de début et une heure d'observation. Par défaut, les métriques Prometheus n'incluent qu'une heure actuelle.
Par conséquent, si vous omettez ce processeur et que votre application génère des métriques Prometheus, vos données de métriques peuvent être rejetées ou vous pouvez constater des pics de données.
Vous devez ajouter ce processeur si votre collecteur reçoit des métriques Prometheus.
processors:
# This processor ensures the start time is set for Prometheus metrics.
# Set in the pipeline before the k8sattributes processor, if used.
# No-op for OTLP metrics.
metricstarttime:
strategy: subtract_initial_point
Ajouter le processeur de transformation
Pour conserver la source et la version de l'instrumentation dans vos données de journal, ajoutez le processeur transform suivant :
transform/otlp_grpc/preserve_instrumentation_source_version:
error_mode: ignore
log_statements:
- context: log
statements:
- set(attributes["instrumentation_source"], instrumentation_scope.name) where instrumentation_scope.name != ""
- set(attributes["instrumentation_version"], instrumentation_scope.version) where instrumentation_scope.version != ""
- set(attributes["service.name"], resource.attributes["service.name"]) where resource.attributes["service.name"] != nil
- set(attributes["service.namespace"], resource.attributes["service.namespace"]) where resource.attributes["service.namespace"] != nil
- set(attributes["service.instance.id"], resource.attributes["service.instance.id"]) where resource.attributes["service.instance.id"] != nil
Mettre à jour les pipelines de service
Ensuite, mettez à jour les pipelines de votre collecteur pour utiliser les exportateurs otlp_grpc/otlp_logs et otlphttp. Pour les données de journal et de trace, ces instructions remplacent votre exportateur actuel par l'exportateur OTLP approprié. Pour vos données de métriques, ces instructions entraînent une double écriture. Cette approche vous permet de vérifier que l'exportateur OTLP est
envoie des données de métriques à votre Google Cloud projet. Elle vous permet également de mettre à jour les graphiques et les règles d'alerte avant de désactiver les flux de données de l'exportateur d'origine.
Apportez les modifications suivantes aux configurations de pipeline de votre collecteur :
- Ajoutez l'extension
googleclientauthà l'entréeservice. Pour votre pipeline de journaux, remplacez
googlecloud/loggingparotlp_grpc/otlp_logs, puis ajoutez les processeurs suivants à la liste des processeurs du pipeline :resource/gcp_project_idtransform/otlp_grpc/preserve_instrumentation_source_versionresourcedetection(si vous avez ajouté ce processeur)batch
Cette configuration effectue une seule écriture des données de journal. Si vous souhaitez écrire vos données de journal deux fois, ajoutez l'exportateur
otlp_grpc/otlp_logsà la liste des exportateurs.Pour votre pipeline de métriques, ajoutez l'exportateur
otlphttpà la liste des exportateurs du pipeline à côté de l'exportateurgooglemanagedprometheus, puis ajoutez les processeurs suivants :resource/gcp_project_idmetricstarttimeresourcedetection(si vous avez ajouté ce processeur)batch
Cette configuration effectue une double écriture des données de métriques. Une fois que vous avez validé le flux de données de métriques et mis à jour les graphiques et les règles d'alerte, supprimez l'exportateur Prometheus.
Pour votre pipeline de traces, remplacez votre exportateur actuel par l'exportateur
otlphttp, puis ajoutez les processeurs suivants :resource/gcp_project_idresourcedetection(si vous avez ajouté ce processeur)batch
Cette configuration effectue une seule écriture des données de trace.
Le résultat de ces modifications est semblable à ce qui suit :
service:
extensions: ["googleclientauth"]
pipelines:
logs:
receivers: ["otlp"]
processors:
- resourcedetection
- resource/gcp_project_id
- transform/otlp_grpc/preserve_instrumentation_source_version
- batch
exporters: ["otlp_grpc/otlp_logs"]
metrics:
receivers: ["otlp"]
processors:
- resourcedetection
- resource/gcp_project_id
- metricstarttime
- batch
exporters: ["googlemanagedprometheus", "otlphttp"]
traces:
receivers: ["otlp"]
processors:
- resourcedetection
- resource/gcp_project_id
- batch
exporters: ["otlphttp"]
L'extrait précédent utilise le récepteur OTLP pour vos données de journal, de métriques et de traces. La configuration de votre collecteur peut être différente. Par exemple, si vous disposez d'une application qui écrit des données de journal structurées, le récepteur filelog est approprié.
Valider votre configuration
Redémarrez votre déploiement, puis vérifiez que vos otlphttp et
otlp_grpc/otlp_logs exportateurs envoient des données à votre Google Cloud projet.
Pour vérifier votre configuration, procédez comme suit :
- Interrogez vos entrées de journal pour détecter les erreurs liées à l'écriture de données de télémétrie.
- Affichez les taux d'erreur pour l'API Cloud Logging, l'API Cloud Monitoring et l'API Telemetry.
- Affichez les séries temporelles à l'aide de l'explorateur de métriques.
Migrer les tableaux de bord et les règles d'alerte
Mettez à jour vos graphiques et tableaux de bord comme suit :
Si vous surveillez l'utilisation de l'API Cloud Logging ou de l'API Cloud Monitoring à l'aide de graphiques ou de règles d'alerte, créez des graphiques ou des règles d'alerte supplémentaires pour surveiller l'utilisation de l'API Telemetry.
Si les récepteurs de métriques incluent un récepteur
otlpou si votre collecteur récupère des métriques Prometheus avec des caractères UTF-8, mettez à jour vos graphiques et tableaux de bord. L'exportateurotlphttpgénère des métriques différentes de l'exportateurgooglemanagedprometheus. Pour en savoir plus, consultez la section Différences dans le format des métriques exportées.Vous n'avez pas besoin de mettre à jour vos graphiques et tableaux de bord si votre collecteur ne reçoit que des données de métriques Prometheus.
Si vos pipelines de métriques incluent un
prometheusrécepteur, alors des conflits de flux de données se produiront entre les métriques générées par lesotlphttpetgooglemanagedprometheusexportateurs. Pour résoudre ces conflits, supprimez l'exportateurgooglemanagedprometheus.
Différences dans le format des métriques exportées
Les mises à jour des graphiques et des règles d'alerte basés sur les métriques sont nécessaires en raison des différences suivantes entre les métriques exportées par les exportateurs OTLP et googlemanagedprometheus :
L'API Telemetry autorise les caractères point (
.) et barre oblique (/) avec dans les noms de métriques. L'exportateurgooglemanagedprometheusconvertit toutes les instances de ces caractères en trait de soulignement (_). Par exemple, une métrique OTLP appeléeprometheus.googleapis.com/foo.bar/gaugeest exportée telle quelle par l'exportateur OTLP, mais est exportée en tant queprometheus.googleapis.com/foo_bar/gaugepar l'exportateurgooglemanagedprometheus.Lorsque les métriques sont ingérées, Cloud Monitoring crée des descripteurs de métriques basés sur les noms. La différence dans la façon dont les caractères point (
.) et barre oblique (/) sont gérés par les chemins d'ingestion signifie que les descripteurs de métriques résultants diffèrent entre les métriques ingérées à l'aide de l'exportateurgooglemanagedprometheuset celles ingérées à l'aide de l'exportateurotlphttp. Si vous utilisez les deux chemins d'ingestion, vous disposez de deux ensembles de métriques. Pour obtenir des résultats complets lors de l'interrogation, vous devez unir manuellement les résultats des versions Prometheus et OTLP des métriques.L'API Telemetry n'ajoute pas d'unité à un nom de métrique lorsqu'une unité est présente, et n'ajoute pas de suffixe
_totalaux compteurs. Ainsi, une métrique exportée en tant queprometheus.googleapis.com/foo/counterlors de l'utilisation de l'API Telemetry est exportée en tant queprometheus.googleapis.com/foo_seconds_total/counterpar l'exportateurgooglemanagedprometheus. Cette différence s'applique également aux suffixes_totalet_ratio.
Pour en savoir plus sur les différences entre les métriques, consultez la section
Différences entre l'exportateur googlemanagedprometheus et
l'API Telemetry.
Les règles de transformation ne s'appliquent pas aux métriques avec des caractères UTF-8. Par conséquent, vous devez réécrire vos tableaux de bord et vos règles d'alerte pour utiliser les nouveaux noms de métriques ou utiliser des requêtes qui combinent les anciens et les nouveaux noms de métriques.
Nous vous déconseillons d'écrire des règles de processeur pour recréer ces
transformations afin de continuer à écrire des métriques UTF-8 comme si elles étaient
collectées par l'exportateur googlemanagedprometheus. Cela préserve la rétrocompatibilité, mais sacrifie la compatibilité ascendante, et vous ne pourrez pas utiliser les assets Open Source qui font référence aux noms de métriques UTF-8.
Supprimer les exportateurs spécifiques à un fournisseur
Une fois que vous avez validé les nouveaux flux de données et mis à jour vos tableaux de bord et vos règles d'alerte, supprimez les exportateurs googlecloud/logging et googlemanagedprometheus de la configuration de votre collecteur. Vous devrez peut-être également supprimer les processeurs qui n'étaient utilisés que par les exportateurs qui ont été supprimés de la configuration.
Vous devez mettre à jour à la fois la liste des exportateurs et les pipelines de service.
exporters:
otlphttp: [...]
otlp_grpc/otlp_logs: [...]
...
service:
extensions: ["googleclientauth"]
pipelines:
logs:
receivers: ["otlp"]
processors: [...]
exporters: ["otlp_grpc/otlp_logs"]
metrics:
receivers: ["otlp"]
processors: [...]
exporters: ["otlphttp"]
traces:
receivers: ["otlp"]
processors: [...]
exporters: ["otlphttp"]
Dépannage
Cette section explique comment résoudre les échecs qui peuvent se produire lorsque vous migrez la configuration de votre collecteur.
Données de métriques manquantes ou pics dans les données de métriques
Si vos données de métriques sont manquantes ou contiennent des pics, vérifiez que vous avez ajouté le processeur metricstarttime à la configuration du collecteur.
Pour en savoir plus, consultez la section
Ajouter le processeur metricstarttime.
Vous pouvez également consulter les journaux de votre collecteur, les journaux système et les journaux d'audit d'accès aux données pour Monitoring. Par exemple, si une écriture dans une série temporelle échoue, un journal d'audit d'accès aux données incluant la raison de l'échec est généré.
Messages d'erreur concernant l'écriture de séries temporelles
Le système génère des messages d'erreur lorsqu'une tentative d'écriture de données dans une série temporelle échoue. Vous pouvez utiliser ces messages pour comprendre pourquoi l'écriture a échoué et comment résoudre le problème.
Message d'erreur indiquant une incompatibilité de valeur :
"One or more TimeSeries could not be written: Value type DOUBLE does not match metric descriptor value type INT64."Cette erreur se produit si vous avez précédemment envoyé des métriques
INT64target_info, car l'API Telemetry définit le type de valeur de toutes les métriques surDOUBLE. La meilleure solution à long terme consiste à supprimer le descripteur de la métrique pour les métriquesINT64target_info. Pour supprimer ce descripteur de votre champ d'application des métriques, utilisez ce script Golang.Message d'erreur indiquant que plusieurs sources écrivent des données de séries temporelles :
"One or more TimeSeries could not be written: Points must be written in order. One or more of the points specified had an older end time than the most recent point."Pour résoudre ce problème, supprimez l'exportateur
googlemanagedprometheusde la configuration de votre collecteur. Pour en savoir plus, consultez la section Supprimer les exportateurs spécifiques à un fournisseur.
Étape suivante
La présentation des exemples d'instrumentation basés sur un collecteur fait référence à des exemples d'applications que vous pouvez télécharger et installer. Chaque exemple d'application inclut un collecteur complet qui exporte des données de métriques et de traces à l'aide de l'API Telemetry.
Déployer Google-Built OpenTelemetry Collector sur Google Kubernetes Engine inclut une configuration de collecteur complète.