Configura un'applicazione gRPC su Google Cloud con l'osservabilità dei microservizi


Gli strumenti di osservabilità dei microservizi ti consentono di: instrumentare le applicazioni per raccogliere e presentare dati di telemetria Cloud Monitoring, Cloud Logging e Cloud Trace dai carichi di lavoro gRPC distribuiti in Google Cloud e altrove. L'osservabilità dei microservizi funziona con qualsiasi deployment ha concesso l'autorizzazione ad accedere a Monitoring, Logging e Trace abilitando l'API Microservices.

In questo tutorial imparerai a utilizzare l'osservabilità dei microservizi di funzionalità creando una semplice applicazione gRPC su Google Cloud utilizzando Compute Engine e instrumenta la tua applicazione con Osservabilità dei microservizi e vengono pubblicati su Monitoring e Logging.

Obiettivi

A livello generale, svolgi i seguenti passaggi.

  • In qualità di sviluppatore di servizi, puoi:

    • Crea un'applicazione gRPC con il linguaggio che preferisci (C++, Go o Java).
    • Attiva la tua applicazione e controlla il plug-in di osservabilità dei microservizi.
    • Eseguire il deployment dell'applicazione su una VM di Compute Engine.
  • In qualità di operatore di servizi, utilizzi i dati raccolti in vari modi:

    • Visualizza tracce su Trace.
    • Visualizza le metriche nella dashboard di monitoraggio denominata Monitoraggio dei microservizi (gRPC).
    • Visualizza le metriche in Metrics Explorer.
    • Ispeziona le voci di log in Esplora log.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

Console

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, and Microservices API APIs.

    Enable the APIs

  5. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the following roles to the service account: Logging > Logs Viewer > Logs Writer, Monitoring > Monitoring Editor > Metrics Writer, Trace > Trace Admin > Trace Agent.

      To grant a role, find the Select a role list, then select the role.

      To grant additional roles, click Add another role and add each additional role.

    6. Click Continue.
    7. In the Service account users role field, enter the identifier for the principal that will attach the service account to other resources, such as Compute Engine instances.

      This is typically the email address for a Google Account.

    8. Click Done to finish creating the service account.

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Enable the Compute Engine, and Microservices API APIs.

    Enable the APIs

  9. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the following roles to the service account: Logging > Logs Viewer > Logs Writer, Monitoring > Monitoring Editor > Metrics Writer, Trace > Trace Admin > Trace Agent.

      To grant a role, find the Select a role list, then select the role.

      To grant additional roles, click Add another role and add each additional role.

    6. Click Continue.
    7. In the Service account users role field, enter the identifier for the principal that will attach the service account to other resources, such as Compute Engine instances.

      This is typically the email address for a Google Account.

    8. Click Done to finish creating the service account.

  10. Leggi la panoramica sull'osservabilità dei microservizi.
  11. Leggi le due variabili di ambiente supportate, decidi quale utilizzare e determina i valori richiesti dalla variabile di ambiente.

interfaccia a riga di comando

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Compute Engine, and Microservices API APIs:

    gcloud services enable compute.googleapis.com microservices.googleapis.com
  7. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant roles to the service account. Run the following command once for each of the following IAM roles: roles/logging.logWriter, roles/monitoring.metricWriter, roles/cloudtrace.agent:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • ROLE: the role to grant
    3. Grant the required role to the principal that will attach the service account to other resources.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • USER_EMAIL: the email address for a Google Account
  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Make sure that billing is enabled for your Google Cloud project.

  12. Enable the Compute Engine, and Microservices API APIs:

    gcloud services enable compute.googleapis.com microservices.googleapis.com
  13. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant roles to the service account. Run the following command once for each of the following IAM roles: roles/logging.logWriter, roles/monitoring.metricWriter, roles/cloudtrace.agent:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • ROLE: the role to grant
    3. Grant the required role to the principal that will attach the service account to other resources.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • USER_EMAIL: the email address for a Google Account
  14. Leggi la panoramica sull'osservabilità dei microservizi.
  15. Leggi le due variabili di ambiente supportate, decidi quale utilizzare e determina i valori richiesti dalla variabile di ambiente.

Crea e connettiti a una VM di Compute Engine

Segui queste istruzioni per creare e connetterti a un'istanza VM di Compute Engine. Nella VM esegui il deployment dell'applicazione e poi la strumenti con l'osservabilità dei microservizi.

  1. Crea un'istanza 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. Connettiti all'istanza VM:

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

Esegui il deployment dell'applicazione nella VM Compute Engine

Puoi eseguire il deployment di un'applicazione a tua scelta nella VM Compute Engine creata nel passaggio precedente, quindi saltare questo passaggio oppure utilizzare un esempio per continuare con le istruzioni nella lingua che preferisci.

C++

  1. Dopo aver eseguito la connessione all'istanza VM, esegui il seguente comando.

    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
    

Vai

  1. Assicurati di aver installato Go.

    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. Clona gli esempi gRPC-Go.

    git clone https://github.com/grpc/grpc-go.git
    cd grpc-go/
    git checkout -b run-observability-example
    875c97a94dca8093bf01ff2fef490fbdd576373d
    

Java

  1. Dopo aver effettuato la connessione all'istanza VM, assicurati di avere Java 8 o Java installato in un secondo momento.

    sudo apt update
    sudo apt upgrade
    sudo apt install git
    sudo apt-get install -y openjdk-11-jdk-headless
    
  2. Clona il repository grpc-java.

    export EXAMPLES_VERSION=v1.54.1
    git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \
    https://github.com/grpc/grpc-java.git
    

Crea file di configurazione di gRPC Google Cloud Observability

Per attivare l'osservabilità dei microservizi sia per il server che per il client, devi avere un file di configurazione gRPC Google Cloud Observability separato. La posizione di questo file viene esportata come GRPC_GCP_OBSERVABILITY_CONFIG_FILE nei passaggi futuri. Segui le istruzioni riportate di seguito per configurare i diversi parametri nel file di configurazione.

Esempio GRPC_GCP_OBSERVABILITY_CONFIG_FILE

{
  "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": 0.5,
  }
  "labels": {
    "SOURCE_VERSION": "J2e1Cf",
    "SERVICE_NAME": "payment-service-1Cf",
    "DATA_CENTER": "us-west1-a"
  }
}

Le sezioni seguenti contengono istruzioni per attivare la raccolta dei dati nella configurazione per i singoli componenti. Se hai utilizzato l'esempio di gRPC in questa configurazione può essere utilizzata così com'è (dopo l'aggiornamento your-project-here) o usalo come modello per la tua applicazione. esempio che mostra le informazioni di configurazione in una variabile di ambiente.

Attiva le metriche

Per attivare le metriche, aggiungi l'oggetto cloud_monitoring alla configurazione e impostane il valore su {}.

Per ulteriori informazioni sulle metriche, consulta Definizioni delle metriche.

Attiva tracciamento

Per attivare il tracciamento:

  1. Aggiungi l'oggetto cloud_trace alla configurazione.
  2. Imposta cloud_trace.sampling_rate su 0.5 per monitorare in modo casuale il 50% delle RPC.

Se prevedi di attivare il tracciamento tra servizi, assicurati che questi ultimi supportare la propagazione del contesto di traccia ricevuto da upstream (o avviato da solo) a downstream.

Per ulteriori informazioni sul monitoraggio, consulta Definizioni dei traccianti.

Abilita il logging

Per attivare il logging:

  1. Aggiungi l'oggetto cloud_logging alla configurazione.
  2. Aggiungi un pattern a client_rpc_events e/o server_rpc_events specificando l'insieme di servizi o metodi per i quali vuoi generare il logging degli eventi a livello di trasporto e il numero di byte da registrare per le intestazioni e i messaggi.

Per ulteriori informazioni sul logging, consulta Definizioni dei record dei log.

Fornisci strumenti alle tue applicazioni per il plug-in di osservabilità

Per instrumentare le tue applicazioni in modo che possano utilizzare Plug-in di osservabilità dei microservizi, utilizza le seguenti istruzioni per il tuo lingua preferita.

C++

Puoi usare C++ con l'osservabilità dei microservizi a partire da gRPC C++ v1.54. Il repository di esempio si trova su GitHub.

  1. Il supporto dell'osservabilità è disponibile solo tramite il sistema di compilazione Bazel. Aggiungi grpcpp_gcp_observability di destinazione come dipendenza.

  2. L'attivazione dell'osservabilità dei microservizi richiede un'ulteriore dipendenza (un modulo di osservabilità) e le seguenti modifiche al codice di client, server o entrambi gRPC esistenti:

    #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
    }
    

    Prima di qualsiasi operazione gRPC, inclusa la creazione di un canale, un server o delle credenziali, richiama quanto segue:

    grpc::GcpObservability::Init();
    

    Verranno restituiti absl::StatusOr<GcpObservability> che dovrebbero essere salvati. Lo stato aiuta a determinare se l'osservabilità è stata inizializzata correttamente. L'oggetto GcpObservability associato controlla la durata dell'oggetto l'osservabilità, chiude e svuota automaticamente i dati di osservabilità fuori ambito.

Vai

  1. I plug-in di osservabilità dei microservizi sono supportati per le versioni gRPC Go v1.54.0 e versioni successive. Il repository di esempio si trova su GitHub.

Con il modulo Go, l'attivazione dell'osservabilità dei microservizi richiede un modulo di osservabilità e il seguente codice:

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()
  
}

La chiamata observability.Start analizza la configurazione dalle variabili di ambiente, crea gli esportatori di conseguenza e inserisce la logica di raccolta nelle connessioni dei client e nei server creati dopo la chiamata. Il observability.End differito pulisce le risorse e assicura che i dati presenti nel buffer vengano cancellati prima che l'applicazione si chiude.

Una volta aggiornato il codice dell'applicazione, esegui questo comando per aggiornare go.mod.

go mod tidy

Java

Per utilizzare l'osservabilità dei microservizi con le applicazioni Java, modifica la tua build in includono l'artefatto grpc-gcp-observability. Usa gRPC versione 1.54.1 o in un secondo momento.

Negli snippet build delle sezioni degli strumenti di sviluppo Gradle e Maven, grpcVersion è impostato sul valore 1.54.1.

Il repository di esempio si trova su GitHub.

  1. Per lo strumento corretto delle applicazioni Java per i microservizi osservabilità, aggiungi il seguente codice a 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();
...
}

Tieni presente che devi chiamare GcpObservability.grpcInit() prima che vengano creati canali o server gRPC. La funzione GcpObservability.grpcInit() legge la configurazione dell'osservabilità dei microservizi e la utilizza per configurare gli intercettatori e i tracer globali necessari per le funzionalità di logging, metriche e traccia in ogni canale e server creato. GcpObservability.grpcInit() è sicura per i thread e deve essere chiamata esattamente una volta. Restituisce un'istanza di GcpObservability che devi salvare per chiamare close() in un secondo momento.

GcpObservability.close() annulla l'allocazione delle risorse. Qualsiasi canale o server creato non verrà eseguito alcun logging.

GcpObservability implementa java.lang.AutoCloseable, che è stato chiuso automaticamente se utilizzi try-with-resource come segue:

...
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
...
}

Utilizzare lo strumento di compilazione Gradle

Se utilizzi lo strumento di creazione Gradle, includi quanto segue:

def grpcVersion = '1.54.1'

...

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

Usa lo strumento di creazione Maven (pom.xml)

Se utilizzi lo strumento di compilazione Maven, includi quanto segue:

<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>

Esegui l'applicazione

Segui le istruzioni in questa sezione solo se hai utilizzato l'esempio gRPC per il tutorial. Puoi modificare il comando run per scegliere come target la tua applicazione binario.

Esegui server

C++

  1. Crea una sessione SSH nella VM.
  2. Esporta le variabili di ambiente. Utilizza i passaggi descritti sopra per creare server_config.json.

      export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
      export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
    
  3. Esegui l'applicazione server shell cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server

Vai

  1. Crea una sessione SSH nella VM.
  2. Esporta variabili di ambiente. Segui i passaggi definiti sopra per creare server_config.json.

    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
    
  3. Esegui l'applicazione server shell go run ./server/main.go

Java

  1. Nella directory degli esempi, apri il file README e segui le istruzioni al suo interno.
  2. Quando le istruzioni indicano di aprire un'altra finestra del terminale, esegui questo comando: shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm

Esegui client

C++

  1. Creare un'altra sessione SSH nella VM.
  2. Esporta le variabili di ambiente. Utilizza i passaggi definiti sopra per creare il file client_config.json.

      export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
      export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
    
  3. Esegui l'applicazione client

    cd grpc
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
    

Vai

  1. Crea un'altra sessione SSH nella VM.
  2. Esporta variabili di ambiente. Utilizza i passaggi definiti sopra per creare client_config.json file. shell export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
  3. Esegui l'applicazione client

    cd grpc-go/examples/features/observability
    go run ./client/main.go
    

Java

  1. Nella directory degli esempi, apri il file README e segui le istruzioni nel file.
  2. Quando le istruzioni ti indicano di aprire un'altra finestra del terminale, emetti questo : shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Elimina singole risorse

  1. Elimina l'istanza:
    gcloud compute instances delete INSTANCE_NAME

Passaggi successivi