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 distribuiti 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 e visualizzandoli in tempo reale in Monitoring e Logging.
Obiettivi
A livello generale, devi svolgere le seguenti operazioni.
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 dei microservizi (gRPC).
- Visualizza le metriche in Metrics Explorer.
- Esamina 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 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.
-
Make sure 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.
-
Make sure 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.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, and Microservices API APIs:
gcloud services enable compute.googleapis.com
microservices.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
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 accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
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 accountPROJECT_ID
: the project ID where you created the service accountUSER_EMAIL
: the email address for a Google Account
-
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, and Microservices API APIs:
gcloud services enable compute.googleapis.com
microservices.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
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 accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
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 accountPROJECT_ID
: the project ID where you created the service accountUSER_EMAIL
: the email address for a Google 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.
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 di 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 per i 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 ulteriori informazioni sulla tracciatura, 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 ulteriori informazioni sulla registrazione, vedi Definizioni dei record di log.
Strumentare le applicazioni per il plug-in di osservabilità
Per instrumentare le 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 la destinazione
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 tracciamento 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 la 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
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimina singole risorse
-
Elimina l'istanza:
gcloud compute instances delete INSTANCE_NAME
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.