As ferramentas de observabilidade de microsserviços permitem instrumentar seus aplicativos para coletar e apresentar dados de telemetria no Cloud Monitoring, Cloud Logging e Cloud Trace de cargas de trabalho gRPC implantadas no Google Cloud e em outros lugares. A observabilidade de microsserviços funciona com qualquer implantação que tenha permissão para acessar o Monitoring, o Logging e o Trace ao ativar a API Microservices.
Neste tutorial, você aprenderá a usar os recursos de observabilidade de microsserviços criando um aplicativo gRPC simples no Google Cloud usando o Compute Engine, instrumentando seu aplicativo com a observabilidade de microsserviços e visualizando-os como ativos Monitoring e Logging.
Objetivos
Em geral, você faz o seguinte.
Como desenvolvedor de serviços, você pode fazer o seguinte:
- Crie um aplicativo gRPC na linguagem de sua escolha (C++, Go ou Java).
- Ative seu aplicativo e controle o plug-in de observabilidade de microsserviços.
- Implante o aplicativo em uma VM do Compute Engine.
Como operador de serviços, você consome os dados coletados de várias maneiras.
- Visualize traces no Trace.
- Confira as métricas no painel de monitoramento chamado de monitoramento de microsserviços (gRPC).
- Veja métricas no Metrics Explorer.
- Inspecione entradas de registro na Análise de registros.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
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.
-
- Leia a Visão geral da observabilidade de microsserviços.
- Leia sobre as duas variáveis de ambiente compatíveis, decida qual delas usar e determine os valores exigidos pela variável de ambiente.
cli
- 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.
-
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.
-
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
-
- Leia a Visão geral da observabilidade de microsserviços.
- Leia sobre as duas variáveis de ambiente compatíveis, decida qual delas usar e determine os valores exigidos pela variável de ambiente.
Criar e se conectar a uma VM do Compute Engine
Use estas instruções para criar e se conectar a uma instância de VM do Compute Engine. Na VM, você implanta seu aplicativo e o instrumenta com a observabilidade de microsserviços.
Crie uma instância 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
Conectar-se à instância de VM
gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Implantar o aplicativo na VM do Compute Engine
É possível implantar um aplicativo de sua escolha na VM do Compute Engine criada na etapa anterior e pular esta etapa ou usar um exemplo para continuar com as instruções na linguagem de sua preferência.
C++
Depois de se conectar à instância de VM, execute o comando a seguir.
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
Go
Verifique se o Go está instalado.
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
Clone os exemplos de
gRPC-Go
.git clone https://github.com/grpc/grpc-go.git cd grpc-go/ git checkout -b run-observability-example 875c97a94dca8093bf01ff2fef490fbdd576373d
Java
Depois de se conectar à instância de VM, verifique se o Java 8 ou posterior está instalado.
sudo apt update sudo apt upgrade sudo apt install git sudo apt-get install -y openjdk-11-jdk-headless
Clone o repositório
grpc-java
.export EXAMPLES_VERSION=v1.54.1 git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \ https://github.com/grpc/grpc-java.git
Criar o arquivo de configuração de observabilidade do gRPC Google Cloud
É necessário um arquivo de configuração de observabilidade do gRPC Google Cloud separado para ativar
a observabilidade de microsserviços para o servidor e o cliente. O local desse
arquivo será exportado como GRPC_GCP_OBSERVABILITY_CONFIG_FILE
nas etapas
futuras. Use as instruções a seguir sobre como configurar os diferentes parâmetros no arquivo de configuração.
Exemplo de 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"
}
}
As seções abaixo contêm instruções para ativar a coleta de dados na sua
configuração para os componentes individuais. Se você usou o exemplo do gRPC
neste tutorial, pode usar essa configuração no estado em que se encontra (após atualizar
your-project-here
) ou usá-la como um modelo para seu aplicativo e um
exemplo mostrando as informações de configuração em uma variável de ambiente.
Ativar métricas
Para ativar as métricas, adicione o objeto cloud_monitoring
à configuração e
defina o valor como {}
.
Para mais informações sobre métricas, consulte Definições de métricas.
Ativar rastreamento
Para ativar o rastreamento, faça o seguinte:
- Adicione o objeto
cloud_trace
à configuração. - Defina
cloud_trace.sampling_rate
como0.5
, que rastreia aleatoriamente 50% das RPCs.
Se você planeja ativar o rastreamento em vários serviços, verifique se eles são compatíveis com a propagação do contexto de rastreamento recebido do upstream (ou iniciado por si só) para o downstream.
Para mais informações sobre rastreamento, consulte Definições de trace.
Ativar a geração de registros
Para ativar a geração de registros, faça o seguinte:
- Adicione o objeto
cloud_logging
à configuração. - Adicione um padrão a
client_rpc_events
ouserver_rpc_events
e especifique o conjunto de serviços ou métodos para os quais você quer gerar a geração de registros de eventos no nível de transporte e o número de bytes a serem registrados para cabeçalhos e mensagens.
Para mais informações sobre a geração de registros, consulte Definições de registros.
Instrumentar os aplicativos para o plug-in de observabilidade
Se quiser instrumentar seus aplicativos para que eles possam usar o plug-in de observabilidade de microsserviços, siga as instruções abaixo no seu idioma preferido.
C++
É possível usar C++ com observabilidade de microsserviços a partir do gRPC C++ v1.54. O repositório de exemplo está no GitHub.
O suporte à observabilidade só está disponível no sistema de compilação do Bazel. Adicione o destino
grpcpp_gcp_observability
como uma dependência.Para ativar a observabilidade de microsserviços, é necessária uma dependência adicional (um módulo de observabilidade) e o seguinte código será alterado para os clientes, servidores ou ambos do gRPC:
#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 }
Antes de qualquer operação gRPC, incluindo a criação de um canal, servidor ou credenciais, invoque o seguinte:
grpc::GcpObservability::Init();
Isso retorna
absl::StatusOr<GcpObservability>
, que precisa ser salvo. O status ajuda a determinar se a observabilidade foi inicializada. O objetoGcpObservability
que o acompanha controla a vida útil dele. Ele fecha e limpa automaticamente os dados de observabilidade quando eles estão fora do escopo.
Go
- Os plug-ins de observabilidade de microsserviços são compatíveis com as versões gRPC
v1.54.0
e posteriores. O repositório de exemplo está no GitHub.
Com o módulo Go, para ativar a observabilidade de microsserviços, é necessário ter um módulo de observabilidade e o seguinte código:
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()
…
}
A chamada observability.Start
analisa a configuração a partir de variáveis de ambiente, cria exportadores adequadamente e injeta lógica de coleta para conexões do cliente e servidores criados após a chamada. A chamada deferida observability.End
limpa os recursos e garante que os dados armazenados em buffer sejam transferidos antes do fechamento do
aplicativo.
Depois que o código do aplicativo for atualizado, execute o comando abaixo para atualizar o
arquivo go.mod
.
go mod tidy
Java
Para usar a observabilidade de microsserviços com aplicativos Java, modifique seu build para
incluir o artefato grpc-gcp-observability
. Use o gRPC versão 1.54.1 ou
mais recente.
Nos snippets de build nas seções das ferramentas de build do Gradle e do Maven,
grpcVersion
é definido como o valor 1.54.1.
O repositório de exemplo está no GitHub.
- Para instrumentar seus aplicativos Java para a observabilidade de microsserviços, adicione o seguinte código 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();
...
}
Lembre-se de chamar GcpObservability.grpcInit()
antes de criar canais ou servidores gRPC. A função GcpObservability.grpcInit()
lê a
configuração de observabilidade de microsserviços e a usa para definir os interceptadores
e rastreadores globais necessários para os recursos de de geração de registros, métricas e traces
em cada canal e servidor criado. GcpObservability.grpcInit()
é seguro para linhas de execução e precisa ser chamado exatamente uma vez. Ela retorna uma instância de GcpObservability
que precisa ser salva para chamar close()
mais tarde.
GcpObservability.close()
desaloca recursos. Os canais ou servidores criados depois
não realizam a geração de registros.
GcpObservability
implementa java.lang.AutoCloseable
, que é fechado automaticamente se você usa try-with-resource
s da seguinte maneira:
...
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
...
}
Usar a ferramenta de build do Gradle
Se você estiver usando a ferramenta de build do Gradle, inclua o seguinte:
def grpcVersion = '1.54.1'
...
dependencies {
...
implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}
Usar a ferramenta de build do Maven (pom.xml)
Se você estiver usando a ferramenta de build do Maven, inclua o seguinte:
<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>
Execute o aplicativo
Siga as instruções desta seção apenas se tiver usado o exemplo gRPC no tutorial. Modifique o comando run
para direcionar ao binário do
aplicativo.
Executar servidor
C++
- Criar uma sessão SSH na VM.
Exporte variáveis de ambiente. Use as etapas definidas acima para criar
server_config.json
.export GOOGLE_CLOUD_PROJECT=$PROJECT_ID export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
Execute o aplicativo servidor
shell cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
Go
- Criar uma sessão SSH na VM.
Exporte variáveis de ambiente. Use as etapas definidas acima para criar
server_config.json
.export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
Execute o aplicativo servidor
shell go run ./server/main.go
Java
- No diretório de exemplos, abra o arquivo README e siga as instruções.
- Quando as instruções solicitarem que você abra outra janela de terminal, emita este comando:
shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Executar cliente
C++
- Crie outra sessão SSH na VM.
Exporte variáveis de ambiente. Use as etapas definidas acima para criar o arquivo
client_config.json
.export GOOGLE_CLOUD_PROJECT=$PROJECT_ID export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
Executar o aplicativo cliente
cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
Go
- Crie outra sessão SSH na VM.
- Exporte variáveis de ambiente. Use as etapas definidas
acima para criar o arquivo
client_config.json
.shell export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
Executar o aplicativo cliente
cd grpc-go/examples/features/observability go run ./client/main.go
Java
- No diretório de exemplos, abra o arquivo README e siga as instruções.
- Quando as instruções solicitarem que você abra outra janela de terminal, emita p comando:
shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
-
Exclua a instância:
gcloud compute instances delete INSTANCE_NAME
A seguir
- Para saber mais sobre dados de configuração, definições de trace, definições de métricas e definições de registros, consulte a referência de observabilidade de microsserviços.
- Para informações sobre como visualizar registros, traces e métricas, consulte Visualizar traces, métricas e entradas de registro