Gli strumenti di osservabilità dei microservizi ti consentono di strumentare le tue applicazioni per raccogliere e presentare i dati di telemetria in Cloud Monitoring, Cloud Logging e Cloud Trace dai carichi di lavoro gRPC di cui è stato eseguito il deployment su Google Cloud e altrove. L'osservabilità dei microservizi funziona con qualsiasi deployment a cui è stata concessa l'autorizzazione per accedere a Monitoring, Logging e Trace abilitando l'API Microservices.
In questo tutorial imparerai a utilizzare le funzionalità di osservabilità dei microservizi creando una semplice applicazione gRPC su Google Cloud utilizzando Compute Engine e strumentando l'applicazione con l'osservabilità dei microservizi, per poi visualizzarli in tempo reale in Monitoring e Logging.
Obiettivi
A livello generale, devi:
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.
- Esegui il deployment dell'applicazione su una VM di Compute Engine.
In qualità di operatore del servizio, utilizzi i dati raccolti in vari modi:
- Visualizza le tracce su Trace.
- Visualizza le metriche nella dashboard di monitoraggio denominata Monitoraggio microservizi (gRPC).
- Visualizza le metriche in Metrics Explorer.
- Ispeziona le voci di log in Esplora log.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.
Prima di iniziare
Console
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, and Microservices API APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
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
. - Click Create and continue.
-
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. - Click Continue.
-
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.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, and Microservices API APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
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
. - Click Create and continue.
-
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. - Click Continue.
-
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.
-
Click Done to finish creating the service account.
-
- Leggi la panoramica dell'osservabilità dei microservizi.
- Leggi informazioni sulle due variabili di ambiente supportate, decidi quale utilizzare e determina i valori richiesti dalla variabile di ambiente.
interfaccia a riga di comando
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, and Microservices API APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
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
. - Click Create and continue.
-
Grant the following roles to the service account: roles/logging.logWriter, roles/monitoring.metricWriter, roles/cloudtrace.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. - Click Continue.
-
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.
-
Click Done to finish creating the service account.
-
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, and Microservices API APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
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
. - Click Create and continue.
-
Grant the following roles to the service account: roles/logging.logWriter, roles/monitoring.metricWriter, roles/cloudtrace.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. - Click Continue.
-
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.
-
Click Done to finish creating the service account.
-
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
- Leggi la panoramica dell'osservabilità dei microservizi.
- Leggi informazioni sulle due variabili di ambiente supportate, decidi quale utilizzare e determina i valori richiesti dalla variabile di ambiente.
Crea una VM di Compute Engine e connettiti
Segui queste istruzioni per creare e connetterti a un'istanza VM di Compute Engine. Sulla VM esegui il deployment dell'applicazione e poi la strumentazione con l'osservabilità dei microservizi.
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
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 che hai creato nel passaggio precedente, quindi saltare questo passaggio, oppure puoi utilizzare un esempio per continuare con le istruzioni nella tua lingua preferita.
C++
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
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
Clona gli esempi di
gRPC-Go
.git clone https://github.com/grpc/grpc-go.git cd grpc-go/ git checkout -b run-observability-example 875c97a94dca8093bf01ff2fef490fbdd576373d
Java
Dopo aver effettuato la connessione all'istanza VM, assicurati di aver installato Java 8 o versioni successive.
sudo apt update sudo apt upgrade sudo apt install git sudo apt-get install -y openjdk-11-jdk-headless
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 il file di configurazione gRPC Google Cloud Observability
Per attivare l'osservabilità dei microservizi sia per il server che per il client, è necessario un file di configurazione gRPC Google Cloud Observability separato. La posizione di
questo file viene esportata come GRPC_GCP_OBSERVABILITY_CONFIG_FILE
nei passaggi
successivi. Utilizza le seguenti istruzioni su come 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 dei singoli componenti. Se hai utilizzato l'esempio gRPC in
questo tutorial, puoi utilizzare questa configurazione così com'è (dopo aver aggiornato
your-project-here
) o utilizzarla come modello per la tua applicazione.e un
esempio che mostra le informazioni di configurazione in una variabile di ambiente.
Abilita metriche
Per attivare le metriche, aggiungi l'oggetto cloud_monitoring
alla configurazione e
imposta il relativo valore su {}
.
Per ulteriori informazioni sulle metriche, consulta Definizioni delle metriche.
Abilita la tracciabilità
Per attivare la tracciabilità:
- Aggiungi l'oggetto
cloud_trace
alla configurazione. - Imposta
cloud_trace.sampling_rate
su0.5
, in modo da tracciare in modo casuale il 50% delle RPC.
Se prevedi di attivare la tracciabilità tra i servizi, assicurati che i servizi supportino la propagazione del contesto di traccia ricevuto dall'upstream (o avviato autonomamente) al downstream.
Per saperne di più sul tracciamento, consulta Definizioni di traccia.
Abilita il logging
Per attivare la registrazione:
- Aggiungi l'oggetto
cloud_logging
alla configurazione. - Aggiungi un pattern a
client_rpc_events
e/oserver_rpc_events
specificando l'insieme di servizi o metodi per i quali vuoi generare la registrazione degli eventi a livello di trasporto e il numero di byte da registrare per le intestazioni e i messaggi.
Per saperne di più sulla registrazione, consulta Definizioni dei record di log.
Instrumenta le tue applicazioni per il plug-in di osservabilità
Per instrumentare le tue applicazioni in modo che possano utilizzare il plug-in di osservabilità dei microservizi, segui le istruzioni riportate di seguito per la tua lingua preferita.
C++
Puoi utilizzare C++ con l'osservabilità dei microservizi a partire da gRPC C++ v1.54. Il repository di esempio si trova su GitHub.
Il supporto dell'osservabilità è disponibile solo tramite il sistema di compilazione Bazel. Aggiungi il target
grpcpp_gcp_observability
come dipendenza.L'attivazione dell'osservabilità dei microservizi richiede una dipendenza aggiuntiva (un modulo di osservabilità) e le seguenti modifiche al codice dei client, dei server o di 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 credenziali, richiama quanto segue:
grpc::GcpObservability::Init();
La query restituisce
absl::StatusOr<GcpObservability>
, che deve essere salvato. Lo stato aiuta a determinare se l'osservabilità è stata inizializzata correttamente. L'oggettoGcpObservability
associato controlla la durata dell'osservabilità e chiude e svuota automaticamente i dati di osservabilità quando escono dall'ambito.
Vai
- I plug-in di osservabilità dei microservizi sono supportati per le versioni gRPC Go
v1.54.0
e 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 client e nei server creati dopo la chiamata. La chiamataobservability.End
differita pulisce le risorse e garantisce che i dati memorizzati nel buffer vengano scaricati prima della
chiusura dell'applicazione.
Dopo aver aggiornato il codice dell'applicazione, esegui il comando seguente per aggiornare il file go.mod
.
go mod tidy
Java
Per utilizzare l'osservabilità dei microservizi con le applicazioni Java, modifica la build in modo da includere l'artefatto grpc-gcp-observability
. Utilizza gRPC versione 1.54.1 o
successiva.
Negli snippet di build nelle sezioni degli strumenti di build Gradle e Maven,
grpcVersion
è impostato sul valore 1.54.1.
Il repository di esempio si trova su GitHub.
- Per instrumentare correttamente le tue applicazioni Java per l'osservabilità dei microservizi, 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 di osservabilità dei microservizi e la utilizza per configurare gli
intercettori e i tracer globali necessari per le funzionalità di logging, metriche e trace
in ogni canale e server creato. GcpObservability.grpcInit()
è thread-safe e deve essere chiamato esattamente una volta. Restituisce un'istanza di
GcpObservability
che devi salvare per chiamare close()
in un secondo momento.
GcpObservability.close()
dealloca le risorse. I canali o i server creati
successivamente non eseguono alcuna registrazione.
GcpObservability
implementa java.lang.AutoCloseable
, che viene chiuso
automaticamente se utilizzi try-with-resource
nel seguente modo:
...
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 compilazione Gradle, includi quanto segue:
def grpcVersion = '1.54.1'
...
dependencies {
...
implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}
Utilizza lo strumento di compilazione Maven (pom.xml)
Se utilizzi lo strumento di build 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 il binario dell'applicazione.
Esegui server
C++
- Crea una sessione SSH nella VM.
Esporta le variabili di ambiente. Segui i passaggi definiti 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"
Esegui l'applicazione server
shell cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
Vai
- Crea una sessione SSH nella VM.
Esporta le variabili di ambiente. Segui i passaggi definiti sopra per creare
server_config.json
.export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
Esegui l'applicazione server
shell go run ./server/main.go
Java
- Nella directory degli esempi, apri il file README e segui le istruzioni riportate nel file.
- Quando le istruzioni ti chiedono di aprire un'altra finestra del terminale, esegui
questo comando:
shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Esegui client
C++
- Crea un'altra sessione SSH nella VM.
Esporta le variabili di ambiente. Segui 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"
Esegui l'applicazione client
cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
Vai
- Crea un'altra sessione SSH nella VM.
- Esporta le variabili di ambiente. Utilizza i passaggi definiti
sopra per creare il file
client_config.json
.shell export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
Esegui l'applicazione client
cd grpc-go/examples/features/observability go run ./client/main.go
Java
- Nella directory degli esempi, apri il file README e segui le istruzioni contenute nel file.
- Quando le istruzioni ti chiedono di aprire un'altra finestra del terminale, esegui questo comando:
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina singole risorse
- In the Google Cloud console, go to the VM instances page.
- Select the checkbox for the instance that you want to delete.
- To delete the instance, click More actions, click Delete, and then follow the instructions.
Passaggi successivi
- Per informazioni dettagliate su dati di configurazione, definizioni di traccia, definizioni di metriche e definizioni di log, vedi Riferimento per l'osservabilità dei microservizi.
- Per informazioni sulla visualizzazione di log, tracce e metriche, consulta Visualizzare tracce, metriche e voci di log.