Configurer l'observabilité des microservices

Ce document contient les informations dont vous avez besoin pour configurer le plug-in d'observabilité des microservices, instrumenter vos applications gRPC et obtenir des informations à partir de Cloud Monitoring, Cloud Logging et Cloud Trace.

Avant de commencer

L'observabilité des microservices fonctionne avec tout déploiement autorisé à accéder à Cloud Monitoring, Cloud Logging et Cloud Trace en activant l'API Microservices. Ce guide fournit un exemple de configuration de l'observabilité des microservices à l'aide d'un exemple Compute Engine.

En règle générale, vous procédez comme suit :

  1. En tant que développeur de services, vous activez et contrôlez le plug-in d'observabilité des microservices.
  2. En tant qu'opérateur de service, vous utilisez les données collectées de différentes manières.

Les dépôts gRPC (C++, Go et Java) incluent des exemples pour illustrer l'observabilité des microservices.

Avant de configurer l'observabilité, effectuez les tâches suivantes :

  1. Consultez la présentation de l'observabilité des microservices.
  2. Assurez-vous de disposer d'un projet ou créez-en un.
  3. Assurez-vous de disposer d'un compte de service ou créez-en un.
  4. Découvrez les deux variables d'environnement compatibles, décidez lesquelles utiliser et déterminez les valeurs requises par la variable d'environnement.
  5. Activez l'API Microservices.

Choisir une variable d'environnement de configuration

Lorsque vous activez le plug-in d'observabilité des microservices, décrit dans la section Instrumenter vos applications pour le plug-in d'observabilité, vous devez fournir des informations de configuration à l'aide d'une variable d'environnement. Par défaut, aucune fonctionnalité d'observabilité n'est activée. Vous définissez la variable d'environnement de la VM ou du conteneur dans lequel l'application ou la charge de travail gRPC est en cours d'exécution.

Voici les variables d'environnement :

  • GRPC_GCP_OBSERVABILITY_CONFIG_FILE : valeur correspondant à un chemin d'accès pointant vers un fichier de configuration encodé au format JSON.
  • GRPC_GCP_OBSERVABILITY_CONFIG : valeur du corps de la configuration encodée au format JSON.

Si les deux variables d'environnement sont définies, GRPC_GCP_OBSERVABILITY_CONFIG_FILE est prioritaire sur GRPC_GCP_OBSERVABILITY_CONFIG.

Pour appliquer la configuration, vous devez redémarrer l'application gRPC. Vous ne pouvez pas définir ni afficher les valeurs des variables d'environnement dans la console Google Cloud.

Dans la configuration, vous pouvez définir un projet de destination dans lequel les données de journalisation, de traçage et de métriques sont importées. Vous définissez l'ID du projet dans le champ project_id.

Utilisez les informations de la section Données de configuration pour définir les valeurs de la variable d'environnement que vous choisissez.

Activer l'API Microservices

Vous pouvez utiliser Google Cloud CLI ou la console Google Cloud pour activer l'API Microservices dans vos projets. L'activation de l'API Microservice active automatiquement l'API Cloud Logging, l'API Cloud Monitoring et l'API Cloud Trace.

Pour activer l'API, utilisez la commande suivante :

gcloud services enable microservices.googleapis.com

Définir les autorisations du compte de service

Si vous utilisez un compte de service autre que celui par défaut, accordez les autorisations requises pour ce compte. Définissez les valeurs suivantes :

  • PROJECT_ID : remplacez par l'ID de votre projet.
  • SERVICE_ACCOUNT_NAME : remplacez le nom du compte de service de votre projet.
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID> \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtrace.agent

Instrumenter vos applications pour le plug-in d'observabilité

Pour instrumenter vos applications afin qu'elles puissent utiliser le plug-in d'observabilité des microservices, suivez les instructions suivantes pour C++, Java et Go.

C++

Vous pouvez utiliser C++ avec l'observabilité des microservices à partir de la version gRPC de C++ v1.54. L'exemple de dépôt se trouve sur GitHub.

Modifications de la compilation

La compatibilité de l'observabilité n'est assurée que via le système de compilation Bazel. Ajoutez la cible grpcpp_gcp_observability en tant que dépendance.

Modifications de code requises

L'activation de l'observabilité des microservices nécessite une dépendance supplémentaire (un module d'observabilité) et les modifications de code suivantes sur les clients et serveurs gRPC existants, ou les deux :

#include <grpcpp/ext/gcp_observability.h>

int main(int argc, char** argv) {
  auto observability = grpc::GcpObservability::Init();
  assert(observability.ok());
  …
  // Observability data flushed when object goes out of scope
}

Avant toute opération gRPC, y compris pour créer un canal, un serveur ou des identifiants, appelez la commande suivante :

grpc::GcpObservability::Init();

Cette commande renvoie absl::StatusOr<GcpObservability>, qui doit être enregistré. L'état permet de déterminer si l'observabilité a bien été initialisée. L'objet GcpObservability associé contrôle la durée de vie de l'observabilité, en plus de fermer et de vider automatiquement les données d'observabilité lorsqu'elles sont hors du champ d'application.

Go

Les plug-ins d'observabilité des microservices sont compatibles avec les versions gRPC de Go v1.54.0 et ultérieures. L'exemple de dépôt se trouve dans GitHub.

Avec le module Go, l'activation de l'observabilité des microservices nécessite un module d'observabilité et le code suivant :

import "google.golang.org/grpc/gcp/observability"

func main() {
       ctx, cancel := context.WithTimeout(context.Background(), time.Second)
       defer cancel()
       if err := observability.Start(ctx); err != nil {
              log.Warning("Unable to start gRPC observability:", err)
       }
       defer observability.End()
       …
}

L'appel observability.Start analyse la configuration à partir de variables d'environnement, crée des exportateurs en conséquence et injecte une logique de collecte dans les connexions client et les serveurs créés après l'appel. L'appel observability.End différé nettoie les ressources et garantit que les données mises en mémoire tampon sont vidées avant la fermeture de l'application.

Une fois le code de l'application mis à jour, exécutez la commande suivante pour mettre à jour le fichier go.mod.

go mod tidy

Java

Pour utiliser l'observabilité des microservices avec des applications Java, modifiez votre compilation afin d'inclure l'artefact grpc-gcp-observability. Utilisez gRPC version 1.54.1 ou ultérieure.

Dans les extraits de code des sections de Gradle et de l'outil de compilation Maven, grpcVersion est défini sur la valeur 1.54.1.

L'exemple de dépôt se trouve dans GitHub.

Modifications de code Java requises

Pour réussir l'observabilité de vos applications Java pour l'observabilité des microservices, ajoutez le code suivant à main().

...
import io.grpc.gcp.observability.GcpObservability;
...

// Main application class
...

public static void main(String[] args) {
...
   // call GcpObservability.grpcInit() to initialize & get observability
   GcpObservability observability = GcpObservability.grpcInit();

...
   // call close() on the observability instance to shutdown observability
   observability.close();
...
}

Notez que vous devez appeler GcpObservability.grpcInit() avant la création des canaux ou serveurs gRPC. La fonction GcpObservability.grpcInit() lit la configuration d'observabilité des microservices et l'utilise pour configurer les intercepteurs et les traceurs globaux requis pour la journalisation, les métriques et la fonctionnalité de traces dans chaque canal et serveur créés. GcpObservability.grpcInit() est sécurisé et doit être appelé exactement une fois. Cela renvoie une instance de GcpObservability que vous devez enregistrer pour appeler close() ultérieurement.

GcpObservability.close() libère des ressources. Les canaux ou serveurs créés par la suite n'effectuent aucune journalisation.

GcpObservability met en œuvre java.lang.AutoCloseable, qui est fermé automatiquement si vous utilisez try-with-resource comme suit :

...
import io.grpc.gcp.observability.GcpObservability;
...

// Main application class
...

public static void main(String[] args) {
...
   // call GcpObservability.grpcInit() to initialize & get observability
   try (GcpObservability observability = GcpObservability.grpcInit()) {

...
   } // observability.close() called implicitly
...
}

Utiliser l'outil de création Gradle

Si vous utilisez l'outil de création Gradle, incluez les éléments suivants :

def grpcVersion = '1.54.1'

...

dependencies {
...
   implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}

Utiliser l'outil de création Maven (pom.xml

Si vous utilisez l'outil de création Maven, incluez les éléments suivants :

<properties>
...
  <grpc.version>1.54.1</grpc.version>
...
</properties>

...

<dependencies>
...
 <dependency>
   <groupId>io.grpc</groupId>
   <artifactId>grpc-gcp-observability</artifactId>
   <version>${grpc.version}</version>
 </dependency>
...
</dependencies>

Activer la collecte des métriques, du traçage et des données de journalisation

Les sections suivantes contiennent des instructions concernant l'activation de la collecte des données dans votre configuration, ainsi qu'un exemple montrant les informations de configuration dans une variable d'environnement.

Activer les métriques

Pour activer les métriques, ajoutez l'objet cloud_monitoring à la configuration et définissez sa valeur sur {}.

Pour en savoir plus sur les métriques, consultez la page Définitions des métriques.

Activer le traçage

Si vous envisagez d'activer le traçage sur plusieurs services, assurez-vous que les services sont compatibles avec la propagation du contexte de trace reçu de l'amont (ou démarré par lui-même) vers l'aval.

Pour activer le traçage, procédez comme suit :

  1. Ajoutez l'objet cloud_trace à la configuration.
  2. Définissez la valeur cloud_trace.sampling_rate sur une probabilité que vous souhaitez que votre application observe pour démarrer de nouvelles traces.
    • Par exemple, 1.0 signifie tracer chaque RPC.
    • 0.0 signifie ne démarrer aucune nouvelle trace.
    • 0.5 signifie que 50 % des RPC sont tracés de manière aléatoire.

Si une décision d'échantillonnage positive est prise en amont, vos services importent des délais, quel que soit le paramètre de taux d'échantillonnage.

Pour en savoir plus sur le traçage, consultez la page Définitions de trace.

Activer la journalisation

Pour activer la journalisation, procédez comme suit :

  1. Ajoutez l'objet cloud_logging à la configuration.
  2. Ajoutez un modèle à client_rpc_events ou à server_rpc_events, ou aux deux, en spécifiant l'ensemble de services ou de méthodes pour lesquels vous souhaitez générer une journalisation des événements au niveau du transport, ainsi que le nombre d'octets à consigner pour les en-têtes et les messages.

Pour en savoir plus sur la journalisation, consultez la section Définitions des enregistrements de journal.

Exemple de variable d'environnement

L'exemple suivant définit les variables d'observabilité dans la variable d'environnement GRPC_GCP_OBSERVABILITY_CONFIG :

export GRPC_GCP_OBSERVABILITY_CONFIG='{
     "project_id": "your-project-here",
     "cloud_logging": {
         "client_rpc_events": [
         {
             "methods": ["google.pubsub.v1.Subscriber/Acknowledge", "google.pubsub.v1.Publisher/CreateTopic"],
             "exclude": true
         },
         {
             "methods": ["google.pubsub.v1.Subscriber/*", "google.pubsub.v1.Publisher/*"],
             "max_metadata_bytes": 4096,
             "max_message_bytes": 4096
         }],
         "server_rpc_events": [{
             "methods": ["*"],
             "max_metadata_bytes": 4096,
             "max_message_bytes": 4096
         }],
     },
     "cloud_monitoring": {},
     "cloud_trace": {
         "sampling_rate": 1.00
     },
     "labels": {
         "SOURCE_VERSION": "J2e1Cf",
         "SERVICE_NAME": "payment-service-1Cf",
         "DATA_CENTER": "us-west1-a"
     }
}'

Créer l'exemple d'observabilité

Suivez ces instructions pour créer une instance de VM Compute Engine et vous y connecter, puis configurer l'exemple d'observabilité.

  1. Créez une instance de VM :

    gcloud compute instances create grpc-observability-vm \
      --image-family=debian-11 \
      --image-project=debian-cloud \
      --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    
  2. Connectez-vous à l'instance de VM :

    gcloud compute ssh --project=PROJECT_ID grpc-observability-vm
    

Passez aux instructions pour Java, C++ ou Go, selon le langage de vos applications gRPC.

Java

  1. Une fois que vous êtes connecté à l'instance de VM, assurez-vous que Java 8 ou une version ultérieure est installée.

    sudo apt update
    sudo apt upgrade
    sudo apt install git
    sudo apt-get install -y openjdk-11-jdk-headless
    
  2. Clonez le dépôt grpc-java.

    export EXAMPLES_VERSION=v1.54.1
    git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \
    https://github.com/grpc/grpc-java.git
    
  3. Accédez au répertoire des exemples.

    cd grpc-java/examples/example-gcp-observability
    
  4. Dans le répertoire d'exemples, ouvrez le fichier README et suivez les instructions qu'il contient.

  5. Lorsque les instructions vous indiquent d'ouvrir une autre fenêtre de terminal, exécutez la commande suivante :

    gcloud compute ssh --project=PROJECT_ID grpc-observability-vm
    

C++

  1. Une fois que vous êtes connecté à l'instance de VM, exécutez un binaire du serveur hello-world dans une fenêtre de terminal.

    sudo apt-get update -y
    sudo apt-get install -y git build-essential clang
    git clone -b v1.54.0 https://github.com/grpc/grpc.git --depth=1
    cd grpc
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
    
  2. Dans une autre fenêtre de terminal, connectez-vous à nouveau à la VM via SSH, puis exécutez les commandes suivantes, qui exécutent le binaire du client hello-world.

    cd grpc
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
    

Go

  1. Assurez-vous que Go est installé.

    sudo apt-get install -y git
    sudo apt install wget
    wget https://go.dev/dl/go1.20.2.linux-amd64.tar.gz
    sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf \
    go1.20.2.linux-amd64.tar.gz
    export PATH=$PATH:/usr/local/go/bin
    
  2. Clonez les exemples gRPC-Go.

    git clone https://github.com/grpc/grpc-go.git
    cd grpc-go/
    git checkout -b run-observability-example
    875c97a94dca8093bf01ff2fef490fbdd576373d
    
  3. Accédez au clone du répertoire gRPC-Go :

    cd examples/features/observability
    
  4. Exécutez le serveur.

    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
    go run ./server/main.go
    
  5. Dans une fenêtre de terminal distincte, exécutez les commandes suivantes.

    export PATH=$PATH:/usr/local/go/bin
    cd grpc-go/examples/features/observability
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
    go run ./client/main.go
    

Afficher les traces, les métriques et les entrées de journal

Suivez les instructions de cette section pour afficher les traces, les métriques et les entrées de journal.

Afficher les traces sur Cloud Trace

Une fois que vous avez configuré les exemples ou instrumenté vos charges de travail, vous devez voir que les traces générées par vos clients gRPC et les serveurs gRPC dans la console Google Cloud affichées en tant que traces récentes.

Liste de traces de l'observabilité des microservices.
Liste de traces de l'observabilité des microservices (cliquez pour agrandir)

Afficher les journaux pour les traces

Si vous activez à la fois la journalisation et le traçage, vous pouvez afficher les entrées de journal pour les traces avec le graphique en cascade de Cloud Trace ou dans l'explorateur de journaux.

Afficher les métriques sur le tableau de bord

L'observabilité des microservices fournit un tableau de bord de surveillance appelé Microservices (gRPC) Monitoring pour les métriques définies dans les définitions des métriques. Le tableau de bord ne s'affiche dans la console Google Cloud que lorsque l'API Microservices est activée. La console Google Cloud appelle l'API Service Usage pour vérifier si l'API Microservices est activée dans un projet. L'utilisateur doit disposer de l'autorisation serviceusage.services.list pour afficher le tableau de bord.

Le tableau de bord Microservices (gRPC) Monitoring est un tableau de bord Google Cloud que vous ne pouvez pas modifier directement. Pour personnaliser le tableau de bord, vous devez le copier dans un tableau de bord personnalisé. Vous pouvez ensuite mettre à jour le tableau de bord personnalisé, par exemple en ajoutant, en supprimant ou en réorganisant les graphiques.

Afficher les métriques dans l'Explorateur de métriques

Une fois que vous avez configuré l'exemple gRPC ou instrumenté votre charge de travail, vous devez voir les métriques générées par vos clients gRPC et les serveurs gRPC dans la console Google Cloud.

Pour afficher et représenter les métriques sous forme de graphique, suivez les instructions de la section Sélectionner des métriques lors de l'utilisation de l'explorateur de métriques.

Inspecter les entrées de journal dans l'explorateur de journaux

La requête suggérée est une fonctionnalité Cloud Logging dans laquelle Google Cloud suggère un ensemble de requêtes en fonction des journaux ingérés. Vous pouvez cliquer sur les filtres préparés et les utiliser.

Requêtes suggérées dans l'explorateur de journaux.
Requêtes suggérées dans l'explorateur de journaux. (cliquez sur l'image pour l'agrandir)

Une fois que les entrées de journal correspondant aux requêtes suggérées apparaissent dans Cloud Logging, vous pouvez voir les nouvelles requêtes suggérées dans environ six minutes. Dans la plupart des cas, vous voyez plus rapidement de nouvelles requêtes suggérées. Si des entrées de journal correspondent à une suggestion des 15 dernières minutes, toutes les requêtes suggérées continuent d'être affichées. Ils continuent d'apparaître en tant que suggestion tant qu'aucune entrée de journal correspondante n'a été trouvée au cours des 15 dernières minutes.

Vous pouvez créer des requêtes personnalisées. Consultez le guide sur le langage de requête Logging pour obtenir des instructions. Par exemple, dans le volet "Requête" de l'explorateur de journaux, vous pouvez essayer d'afficher tous les journaux de débogage gRPC avec le code suivant :

log_id("microservices.googleapis.com/observability/grpc")

Vous pouvez utiliser tous les champs de l'enregistrement de journal gRPC pour effectuer le filtrage. Voici un exemple d'entrée de journal :

{
  "insertId": "17kh8vafzuruci",
  "jsonPayload": {
    "authority": "10.84.1.15:50051",
    "sequenceId": "6",
    "serviceName": "helloworld.Greeter",
    "peer": {
      "ipPort": 50051,
      "address": "10.84.1.10",
      "type": "IPV4"
    },
    "callId": "d9577780-c608-4bff-9e12-4d9cdea6b298",
    "type": "SERVER_TRAILER",
    "methodName": "SayHello",
    "payload": {},
    "logger": "CLIENT"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "pod_name": "grpc-client-deployment-155-6967959544-x8ndr",
      "container_name": "grpc-client-container-155",
      "cluster_name": "o11y-cluster",
      "namespace_name": "grpc-client-namespace-155",
      "location": "us-west1-b",
      "project_id": "grpc-greeter"
    }
  },
  "timestamp": "2023-04-05T23:33:41.718523Z",
  "severity": "DEBUG",
  "labels": {
    "environment": "example-client"
  },
  "logName": "projects/grpc-greeter/logs/microservices.googleapis.com%2Fobservability%2Fgrpc",
  "receiveTimestamp": "2023-04-05T23:33:42.712682457Z"
}

Requêtes suggérées

L'observabilité des microservices fournit les suggestions de requêtes suivantes à Cloud Logging :

Enregistrements de journaux d'en-têtes ou de suivi pour gRPC

Cette requête fournit une vue de base des RPC, générant des informations de pairs et des résultats RPC.

log_id("microservices.googleapis.com/observability/grpc") AND
jsonPayload.type=("CLIENT_HEADER" OR "SERVER_TRAILER")

Appels gRPC ayant échoué

Cette requête recherche les RPC qui se terminent par un état non OK.

log_id("microservices.googleapis.com/observability/grpc") AND
jsonPayload.type="SERVER_TRAILER" AND
jsonPayload.payload.statusCode!="OK"

Enregistrements de journaux pour les appels gRPC annulés ou dont le délai est dépassé

Une annulation gRPC excessive ou un dépassement de délai peut fournir des informations utiles sur la perte de performances ou le comportement inattendu de l'application.

log_id("microservices.googleapis.com/observability/grpc") AND
((jsonPayload.type="SERVER_TRAILER" AND jsonPayload.payload.statusCode=("CANCELLED" OR "DEADLINE_EXCEEDED")) OR (jsonPayload.type="CANCEL"))

Utiliser les journaux et le traçage pour résoudre les problèmes

Si un événement RPC indique un comportement incorrect, vous pouvez trouver callid dans l'événement. Utilisez la requête suivante pour afficher tous les événements qui se sont produits dans un seul RPC, qu'il s'agisse d'un RPC unaire ou de streaming. L'entrée de journal précédente est utilisée comme exemple :

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.callid="a358c7b80-3548-4bc8-a33f-b93ba1514904"

Pour déterminer l'étendue du problème, vous pouvez trouver tous les événements RPC pour la même méthode ou le même emplacement. La requête suivante affiche tous les journaux de débogage liés à une méthode RPC spécifique, en utilisant le service Greeter comme exemple :

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.serviceName="helloworld.Greeter"
jsonPayload.methodName="SayHello"

Pour vérifier les RPC ayant échoué d'un code d'état spécifique, vous pouvez ajouter le code d'état en tant que l'une des conditions de filtrage. La requête suivante affiche les événements de suivi qui se terminent par un état non OK :

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.payload.statusCode!="OK"
Résultats de la requête : code d'état dépassé.
Résultats de la requête : code d'état dépassé (cliquez pour agrandir)

Options d'observabilité

L'observabilité des microservices inclut les fonctionnalités facultatives suivantes.

Définir des étiquettes personnalisées

Vous pouvez définir des étiquettes personnalisées, qui ajoutent des informations fournies par l'utilisateur aux données d'observabilité. Les étiquettes personnalisées sont constituées de paires clé/valeur. Chaque paire clé/valeur est associée au traçage de données en tant qu'étiquettes de délais, aux données de métriques en tant que tags de métriques et aux données de journalisation en tant qu'étiquettes d'entrées de journal.

Les étiquettes personnalisées sont définies dans la configuration avec une liste de paires clé/valeur dans le champ labels. Toutes les clés et valeurs des étiquettes personnalisées sont de type STRING. La mise en œuvre lit la configuration et crée une étiquette distincte pour chaque paire clé/valeur, puis associe les étiquettes aux données d'observabilité :

Par exemple, voici une définition d'étiquette :

"labels": {
    "DATACENTER": "SAN_JOSE_DC",
    "APP_ID": "24512"
  }

Chaque entrée de journal possède les étiquettes supplémentaires suivantes :

{
   "DATACENTER" : "SAN_JOSE_DC"
   "APP_ID" : "24512"
}
Interroger des étiquettes dans une entrée de journal.
Rechercher des étiquettes dans une entrée de journal (cliquez pour agrandir)
Graphique en courbes affichant les étiquettes personnalisées et les étiquettes de ressource.
Graphique en courbes affichant des étiquettes de ressource et personnalisées (cliquez pour agrandir)

Activer la journalisation de la charge utile

Vous activez la journalisation de la charge utile à l'aide des variables d'environnement que vous fournissez à la charge de travail. Pour activer la journalisation de la charge utile pour les messages et les en-têtes HelloWorld, mettez à jour la valeur des fichiers de configuration gcp_observability_server_config.json, gcp_observability_client_config.json ou les deux dans les exemples gRPC comme suit :

{
   "cloud_monitoring":{
   },
   "cloud_trace":{
      "sampling_rate":1.0
   },
   "cloud_logging":{
      "client_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ],
            "max_metadata_bytes":4096,
            "max_message_bytes":4096
         }
      ],
      "server_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ],
            "max_metadata_bytes":4096,
            "max_message_bytes":4096
         }
      ]
   }
}

Configurer l'observabilité entre projets

Vous pouvez définir explicitement le projet de destination à l'aide de la configuration définie dans la variable d'environnement GRPC_GCP_OBSERVABILITY_CONFIG. Pour l'observabilité entre projets, vous devez également définir les autorisations de compte de service appropriées. En supposant que l'ID du projet de destination est core-platform-stats, vous pouvez configurer l'observabilité entre projets à l'aide de l'exemple de configuration suivant :

{
   "project_id":"core-platform-stats",
   "cloud_monitoring":{
   },
   "cloud_trace":{
      "sampling_rate":1.0
   },
   "cloud_logging":{
      "client_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ]
         }
      ],
      "server_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ]
         }
      ]
   }
}

Estimer le volume des journaux

Cette section vous fournit des informations que vous pouvez utiliser pour estimer le volume d'ingestion de journaux. Vous pouvez obtenir une estimation avant de vous abonner aux événements RPC de vos services.

Élément Detail
Événements générés pour un appel unaire OK 6 événements

Un appel RPC unaire génère six événements pour le client ou le serveur :

  • CLIENT_HEADER
  • SERVER_HEADER
  • CLIENT_MESSAGE
  • SERVER_MESSAGE
  • CLIENT_HALF_CLOSE
  • SERVER_TRAILER
Taille moyenne de l'entrée de journal 500 octets par défaut

Une entrée de journal correspond à un événement RPC, qui inclut les informations de débogage détaillées de cet événement, les étiquettes de ressource et les étiquettes personnalisées.
Taille de la journalisation de la charge utile 0 par défaut, peut être configuré

La taille maximale de la charge utile est configurable dans la configuration d'observabilité. Par défaut, aucune charge utile n'est journalisée.
Taille des étiquettes personnalisées 0 par défaut peut être configuré

Les étiquettes personnalisées sont fournies à l'application à l'aide de variables d'environnement. Si vous ne spécifiez aucun tag, il n'y aura pas d'étiquettes personnalisées.

Taille totale d'estimation de journal et de formule d'ingestion de journal :

Monthly Log Ingestion = QPS * 6 * (500B + Payload Logging Size + Custom Labels Size) * 2592000

Par exemple, si le nombre de RPS d'une méthode d'appel unaire est de 1 et qu'aucune fonctionnalité supplémentaire n'est activée, la taille estimée des journaux d'ingestion est d'environ 7,24 Gio.

Étapes suivantes