Déployer le collecteur OpenTelemetry conçu par Google sur Cloud Run

Ce document explique comment exécuter le collecteur OpenTelemetry construit par Google sur Cloud Run pour collecter les journaux, les métriques et les traces OTLP à partir d'applications instrumentées, puis exporter ces données vers Google Cloud.

Avant de commencer

L'exécution du collecteur OpenTelemetry créé par Google nécessite les ressources suivantes:

  • Un projet Google Cloud avec l'API Cloud Monitoring, l'API Cloud Trace et l'API Cloud Logging activées.

    • Si vous n'avez pas de projet Google Cloud, procédez comme suit :

      1. Dans la console Google Cloud, accédez à Nouveau projet :

        Créer un projet

      2. Dans le champ Nom du projet, saisissez un nom pour votre projet, puis cliquez sur Créer.

      3. Accéder à la page Facturation :

        Accéder à Facturation

      4. Sélectionnez le projet que vous venez de créer s'il n'est pas déjà sélectionné en haut de la page.

      5. Vous êtes invité à choisir un profil de paiement existant ou à en créer un.

      L'API Monitoring, l'API Trace et l'API Logging sont activées par défaut pour les nouveaux projets.

    • Si vous disposez déjà d'un projet Google Cloud, assurez-vous que l'API Monitoring, l'API Trace et l'API Logging sont activées:

      Enable the APIs

  • Un service Cloud Run. Si vous ne disposez pas d'un service Cloud Run, suivez les instructions de la section Planifier et préparer votre service.

  • Installation de gcloud. Pour en savoir plus sur l'installation de gcloud, consultez la section Installer la CLI gcloud.

Configurer les autorisations du collecteur

Par défaut, les tâches et les services Cloud Run utilisent le compte de service Compute Engine par défaut, PROJECT_NUMBER-compute@developer.gserviceaccount.com. Ce compte de service dispose généralement des rôles IAM (Identity and Access Management) nécessaires pour écrire les métriques et les journaux décrits dans ce document :

Demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet:

Vous pouvez également configurer un compte de service géré par l'utilisateur pour Cloud Run. Un compte de service géré par l'utilisateur doit également disposer de ces rôles. Pour en savoir plus sur les comptes de service pour Cloud Run, consultez la section Présentation de l'identité de service.

Déployer le collecteur

Pour installer le collecteur OpenTelemetry créé par Google en tant que sidecar pour votre Cloud Run, créez d'abord un secret pour stocker la configuration du collecteur.

gcloud secrets create SECRET_NAME --data-file=config.yaml --project=PROJECT_ID

Ajoutez ensuite le collecteur OpenTelemetry conçu par Google en tant que side-car à votre service.yaml:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  annotations:
    run.googleapis.com/launch-stage: ALPHA
  name: google-otel-cloud-run-sample
spec:
  template:
    metadata:
      annotations:
        # [REQUIRED] set the collector as a parent to the app
        run.googleapis.com/container-dependencies: "{app:[collector]}"
        run.googleapis.com/secrets: 'SECRET_NAME:projects/PROJECT_ID/secrets/SECRET_NAME'
    spec:
      containers:
      - image: my-app
        name: app
        ports:
        - containerPort: 8080
        env:
        - name: "OTEL_EXPORTER_OTLP_ENDPOINT"
          value: "http://localhost:4317"
      - image: "us-docker.pkg.dev/cloud-ops-agents-artifacts/google-cloud-opentelemetry-collector/otelcol-google:0.122.1"
        args:
        - --config=/etc/otelcol-google/config.yaml
        name: collector
        startupProbe:
          httpGet:
            path: /
            port: 13133
          timeoutSeconds: 30
          periodSeconds: 30
        livenessProbe:
          httpGet:
            path: /
            port: 13133
          timeoutSeconds: 30
          periodSeconds: 30
        volumeMounts:
        - mountPath: /etc/otelcol-google/
          name: config
      volumes:
      - name: config
        secret:
          items:
          - key: latest
            path: config.yaml
          secretName: 'SECRET_NAME'

Configurer le collecteur

Nous vous fournissons une configuration de collecteur OpenTelemetry à utiliser avec le collecteur Google. Cette configuration est conçue pour fournir de grands volumes de métriques, de journaux et de traces OTLP. Cette configuration est également conçue pour éviter les problèmes d'ingestion courants. Vous pouvez ajouter des éléments à la configuration, mais nous vous recommandons vivement de ne pas en supprimer.

Cette section décrit la configuration fournie, les principaux composants tels que les exportateurs, les processeurs, les récepteurs et les autres composants disponibles.

Configuration du collecteur fournie

Vous trouverez la configuration du collecteur dans le répertoire google-built-opentelemetry-collector du dépôt opentelemetry-operations-collector:

receivers:
  # Open two OTLP servers:
  # - On port 4317, open an OTLP GRPC server
  # - On port 4318, open an OTLP HTTP server
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver
  otlp:
    protocols:
      grpc:
        endpoint: localhost:4317
      http:
        cors:
          # This effectively allows any origin
          # to make requests to the HTTP server.
          allowed_origins:
          - http://*
          - https://*
        endpoint: localhost:4318

  # Using the prometheus scraper, scrape the Collector's self metrics.
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/prometheusreceiver
  # https://opentelemetry.io/docs/collector/internal-telemetry/
  prometheus/self-metrics:
    config:
      scrape_configs:
      - job_name: otel-self-metrics
        scrape_interval: 1m
        static_configs:
        - targets:
          - localhost:8888

processors:
  # The batch processor is in place to regulate both the number of requests
  # being made and the size of those requests.
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor/batchprocessor
  batch:
    send_batch_max_size: 200
    send_batch_size: 200
    timeout: 5s

  # The memorylimiter will check the memory usage of the collector process.
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor/memorylimiterprocessor
  memory_limiter:
    check_interval: 1s
    limit_percentage: 65
    spike_limit_percentage: 20

  # The resourcedetection processor is configured to detect GCP resources.
  # Resource attributes that represent the GCP resource the collector is
  # running on will be attached to all telemetry that goes through this
  # processor.
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/resourcedetectionprocessor
  # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/resourcedetectionprocessor#gcp-metadata
  resourcedetection:
    detectors: [gcp]
    timeout: 10s

  # The transform/collision processor ensures that any attributes that may
  # collide with the googlemanagedprometheus exporter's monitored resource
  # construction are moved to a similar name that is not reserved.
  transform/collision:
    metric_statements:
    - context: datapoint
      statements:
      - set(attributes["exported_location"], attributes["location"])
      - delete_key(attributes, "location")
      - set(attributes["exported_cluster"], attributes["cluster"])
      - delete_key(attributes, "cluster")
      - set(attributes["exported_namespace"], attributes["namespace"])
      - delete_key(attributes, "namespace")
      - set(attributes["exported_job"], attributes["job"])
      - delete_key(attributes, "job")
      - set(attributes["exported_instance"], attributes["instance"])
      - delete_key(attributes, "instance")
      - set(attributes["exported_project_id"], attributes["project_id"])
      - delete_key(attributes, "project_id")

exporters:
  # The googlecloud exporter will export telemetry to different
  # Google Cloud services:
  # Logs -> Cloud Logging
  # Metrics -> Cloud Monitoring
  # Traces -> Cloud Trace
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/googlecloudexporter
  googlecloud:
    log:
      default_log_name: opentelemetry-collector

  # The googlemanagedprometheus exporter will send metrics to
  # Google Managed Service for Prometheus.
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/googlemanagedprometheusexporter
  googlemanagedprometheus:

extensions:
  # Opens an endpoint on 13133 that can be used to check the
  # status of the collector. Since this does not configure the
  # `path` config value, the endpoint will default to `/`.
  #
  # When running on Cloud Run, this extension is required and not optional.
  # In other environments it is recommended but may not be required for operation
  # (i.e. in Container-Optimized OS or other GCE environments).
  #
  # Docs:
  # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/healthcheckextension
  health_check:
    endpoint: 0.0.0.0:13133

service:
  extensions:
  - health_check
  pipelines:
    logs:
      receivers:
      - otlp
      processors:
      - resourcedetection
      - memory_limiter
      - batch
      exporters:
      - googlecloud
    metrics/otlp:
      receivers:
      - otlp
      processors:
      - transform/collision
      - resourcedetection
      - memory_limiter
      - batch
      exporters:
      - googlemanagedprometheus
    metrics/self-metrics:
      receivers:
      - prometheus/self-metrics
      processors:
      - resourcedetection
      - memory_limiter
      - batch
      exporters:
      - googlemanagedprometheus
    traces:
      receivers:
      - otlp
      processors:
      - resourcedetection
      - memory_limiter
      - batch
      exporters:
      - googlecloud
  telemetry:
    metrics:
      address: localhost:8888

Exportateurs

La configuration du collecteur inclut les exportateurs suivants:

  • L'exportateur googlecloud, pour les journaux et les traces. Cet exportateur est configuré avec un nom de journal par défaut.

  • Exportateur googlemanagedprometheus pour les métriques. Cet exportateur ne nécessite aucune configuration, mais des options de configuration sont disponibles. Pour en savoir plus sur les options de configuration de l'exportateur googlemanagedprometheus, consultez la section Premiers pas avec le collecteur OpenTelemetry dans la documentation Google Cloud Managed Service pour Prometheus.

Processeurs

La configuration du collecteur inclut les processeurs suivants:

  • batch : configuré pour regrouper des requêtes de télémétrie avec le nombre maximal d' Google Cloud entrées par requête, ou avec l'intervalle minimal de Google Cloud cinq secondes (selon ce qui survient en premier).

  • memory_limiter : limite l'utilisation de la mémoire du collecteur pour éviter les plantages dus à la mémoire saturée en supprimant des points de données lorsque la limite est dépassée.

  • resourcedetection : détecte automatiquement les étiquettes de ressources Google Cloud , comme project_id.

Récepteurs

La configuration du collecteur n'inclut que le récepteur otlp. Pour en savoir plus sur l'instrumentation de vos applications afin d'envoyer des traces et des métriques OTLP au point de terminaison OTLP du collecteur, consultez la section Choisir une approche d'instrumentation.

Composants disponibles

Le collecteur OpenTelemetry conçu par Google contient les composants dont la plupart des utilisateurs auront besoin pour bénéficier d'une expérience enrichie dans Google Cloud Observability. Pour obtenir la liste complète des composants disponibles, consultez la section Composants dans le dépôt opentelemetry-operations-collector.

Pour demander des modifications ou des ajouts aux composants disponibles, envoyez une demande de fonctionnalité dans le dépôt opentelemetry-operations-collector.

Générer des données de télémétrie

Pour générer des données télémétriques, vous devez créer une application Cloud Run avec un collecteur secondaire. Le document Écrire des métriques OTLP à l'aide d'un side-car OpenTelemetry fournit un tutoriel sur l'utilisation du collecteur OpenTelemetry conçu par Google en tant que side-car. Vous pouvez utiliser ce tutoriel pour générer de la télémétrie avec le collecteur créé par Google.

Afficher la télémétrie

Le collecteur OpenTelemetry conçu par Google envoie les métriques, les journaux et les traces de vos applications instrumentées à Google Cloud Observability. Le collecteur envoie également des métriques d'auto-observation. Les sections suivantes expliquent comment afficher cette télémétrie.

Afficher vos métriques

Le collecteur OpenTelemetry conçu par Google collecte des métriques Prometheus que vous pouvez afficher à l'aide de l'explorateur de métriques. Les métriques collectées dépendent de l'instrumentation de l'application, bien que le collecteur Google écrive également certaines métriques automatiques.

Pour afficher les métriques collectées par le collecteur OpenTelemetry conçu par Google, procédez comme suit :
  1. Dans la console Google Cloud, accédez à la page Explorateur de métriques :

    Accéder à l'explorateur de métriques

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Monitoring.

  2. Dans la barre d'outils de la console Google Cloud, sélectionnez votre projet Google Cloud. Pour les configurations App Hub, sélectionnez le projet hôte App Hub ou le projet de gestion du dossier compatible avec les applications.
  3. Dans l'élément Métrique, développez le menu Sélectionner une métrique, saisissez Prometheus Target dans la barre de filtre, puis utilisez les sous-menus pour sélectionner un type de ressource et des métriques spécifiques :
    1. Dans le menu Ressources actives, sélectionnez Cible Prometheus.
    2. Pour sélectionner une métrique, utilisez les menus Catégories de métriques actives et Métriques actives. Les métriques collectées par le collecteur OpenTelemetry conçu par Google portent le préfixe prometheus.googleapis.com.
    3. Cliquez sur Appliquer.
  4. Configurez le mode d'affichage des données.

    Lorsque les mesures d'une métrique sont cumulatives, l'explorateur de métriques normalise automatiquement les données mesurées par période d'alignement, ce qui permet d'afficher un taux dans le graphique. Pour en savoir plus, consultez la section Genres, types et conversions.

    Lorsque des valeurs entières ou doubles sont mesurées, par exemple avec les métriques counter, l'explorateur de métriques additionne automatiquement toutes les séries temporelles. Pour modifier ce comportement, définissez le premier menu de l'entrée Agrégation sur Aucun.

    Pour plus d'informations sur la configuration d'un graphique, consultez la page Sélectionner des métriques lors de l'utilisation de l'explorateur de métriques.

Afficher vos traces

Pour afficher vos données de trace, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Explorateur Trace.

    Accéder à Explorateur Trace

    Vous pouvez également accéder à cette page à l'aide de la barre de recherche.

  2. Dans la barre d'outils de la console Google Cloud, sélectionnez votre projet Google Cloud. Pour les configurations App Hub, sélectionnez le projet hôte App Hub ou le projet de gestion du dossier compatible avec les applications.
  3. Dans la section du tableau de la page, sélectionnez une ligne.
  4. Dans le graphique de Gantt du panneau Détails des traces, sélectionnez un segment.

    Un panneau s'ouvre et affiche des informations sur la requête tracée. Ces informations incluent la méthode, le code d'état, le nombre d'octets et le user-agent de l'appelant.

  5. Pour afficher les journaux associés à cette trace, sélectionnez l'onglet Logs & Events (Journaux et événements).

    Cet onglet affiche les journaux individuels. Pour afficher les détails de l'entrée de journal, développez-la. Vous pouvez également cliquer sur Afficher les journaux et afficher le journal à l'aide de l'explorateur de journaux.

Pour en savoir plus sur l'utilisation de l'explorateur Cloud Trace, consultez la page Rechercher et explorer des traces.

Afficher les journaux

L'explorateur de journaux vous permet d'inspecter vos journaux et d'afficher les traces associées, lorsqu'elles existent.

  1. Dans la console Google Cloud, accédez à la page Explorateur de journaux :

    Accéder à l'explorateur de journaux

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.

  2. Recherchez une entrée de journal dans votre application instrumentée. Pour afficher les détails, développez l'entrée de journal.

  3. Cliquez sur Traces sur une entrée de journal contenant un message de trace, puis sélectionnez Afficher les détails des traces.

    Un panneau Trace details (Informations sur la trace) s'ouvre et affiche la trace sélectionnée.

Pour en savoir plus sur l'utilisation de l'explorateur de journaux, consultez la page Afficher les journaux à l'aide de l'explorateur de journaux.

Observer et déboguer le collecteur

Le collecteur OpenTelemetry conçu par Google fournit automatiquement des métriques d'auto-observation pour vous aider à surveiller ses performances et à assurer la disponibilité continue du pipeline d'ingestion OTLP.

Pour surveiller le collecteur, installez l'exemple de tableau de bord pour le collecteur. Ce tableau de bord fournit des insights brefs sur plusieurs métriques du collecteur, y compris le temps d'activité, l'utilisation de la mémoire et les appels d'API vers Google Cloud Observability.

Pour installer le tableau de bord, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Tableaux de bord .

    Accéder à la page Tableaux de bord

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Monitoring.

  2. Cliquez sur Modèles de tableaux de bord.
  3. Recherchez le tableau de bord Collecteur OpenTelemetry.
  4. Facultatif: Pour prévisualiser le tableau de bord, sélectionnez-le.
  5. Cliquez sur Ajouter le tableau de bord à votre liste, puis remplissez la boîte de dialogue.

    La boîte de dialogue vous permet de sélectionner le nom du tableau de bord et d'y ajouter des libellés.

Pour en savoir plus sur l'installation de tableaux de bord, consultez Installer un modèle de tableau de bord.