As ferramentas de observabilidade de microsserviços permitem-lhe instrumentar as suas aplicações para recolher e apresentar dados de telemetria no Cloud Monitoring, Cloud Logging e Cloud Trace a partir de cargas de trabalho gRPC implementadas no Google Cloud e noutros locais. A observabilidade dos microsserviços funciona com qualquer implementação à qual tenha sido concedida autorização para aceder ao Monitoring, ao Logging e ao Trace ativando a API Microservices.
Neste tutorial, vai aprender a usar as funcionalidades de observabilidade de microsserviços criando uma aplicação gRPC simples no Google Cloud usando o Compute Engine e a instrumentar a sua aplicação com a observabilidade de microsserviços, e a vê-los aparecer em direto no Monitoring e Logging.
Crie e ligue-se a uma VM do Compute Engine
Use estas instruções para criar e estabelecer ligação a uma instância de VM do Compute Engine. Na VM, implementa a sua aplicação e, em seguida, instrumenta a aplicação com a observabilidade dos 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
Estabeleça ligação à instância de VM:
gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Implemente a sua aplicação na VM do Compute Engine
Pode implementar uma aplicação à sua escolha na VM do Compute Engine que criou no passo anterior e, em seguida, ignorar este passo, ou pode usar um exemplo para continuar com as instruções no seu idioma preferencial.
C++
Depois de se ligar à instância de VM, execute o seguinte 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
Ir
Certifique-se de que tem o Go 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
gRPC-Go
.git clone https://github.com/grpc/grpc-go.git cd grpc-go/ git checkout -b run-observability-example 875c97a94dca8093bf01ff2fef490fbdd576373d
Java
Depois de estabelecer ligação à instância de VM, certifique-se de que tem o Java 8 ou posterior 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
Crie um ficheiro de configuração de observabilidade gRPC Google Cloud
Precisa de um ficheiro de configuração de observabilidade gRPC separado para ativar a observabilidade de microsserviços para o servidor e o cliente. Google Cloud A localização deste ficheiro é exportada como GRPC_GCP_OBSERVABILITY_CONFIG_FILE
nos passos futuros. Use a seguinte instrução sobre como configurar os diferentes parâmetros no ficheiro de configuração.
Exemplo 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 secções seguintes contêm instruções para ativar a recolha de dados na sua configuração para os componentes individuais. Se usou o exemplo de gRPC neste tutorial, pode usar esta configuração tal como está (depois de atualizar your-project-here
) ou usá-la como um modelo para a sua aplicação.
Ative as métricas
Para ativar as métricas, adicione o objeto cloud_monitoring
à configuração e
defina o respetivo valor como {}
.
Para mais informações sobre as métricas, consulte o artigo Definições das métricas.
Ative o rastreio
Para ativar o rastreio, faça o seguinte:
- Adicione o objeto
cloud_trace
à configuração. - Defina o valor
cloud_trace.sampling_rate
como0.5
, que rastreia aleatoriamente 50% dos RPCs.
Se planeia ativar o rastreio entre serviços, certifique-se de que os serviços suportam a propagação do contexto de rastreio recebido a montante (ou iniciado por si próprio) a jusante.
Para mais informações sobre o rastreio, consulte o artigo Definições de rastreio.
Ative o registo
Para ativar o registo, faça o seguinte:
- Adicione o objeto
cloud_logging
à configuração. - Adicione um padrão a
client_rpc_events
ouserver_rpc_events
, ou a ambos, especificando o conjunto de serviços ou métodos para os quais quer gerar o registo de eventos ao nível do transporte e o número de bytes a registar para cabeçalhos e mensagens.
Para mais informações sobre o registo, consulte o artigo Definições de registos.
Capacite as suas aplicações com instrumentos para o plug-in de observabilidade
Para instrumentar as suas aplicações de modo a que possam usar o plug-in de observabilidade de microsserviços, use as seguintes instruções para o seu idioma preferido.
C++
Pode usar C++ com a observabilidade de microsserviços a partir do gRPC C++ v1.54. O repositório de exemplo está no GitHub.
O apoio técnico de observabilidade só está disponível através do sistema de compilação do Bazel. Adicione o alvo
grpcpp_gcp_observability
como uma dependência.A ativação da observabilidade dos microsserviços requer uma dependência adicional (um módulo de observabilidade) e as seguintes alterações de código aos clientes, servidores ou ambos os gRPC existentes:
#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 quaisquer operações gRPC, incluindo a criação de um canal, um servidor ou credenciais, invoque o seguinte:
grpc::GcpObservability::Init();
Isto devolve
absl::StatusOr<GcpObservability>
, que deve ser guardado. O estado ajuda a determinar se a observabilidade foi inicializada com êxito. O objetoGcpObservability
associado controla a duração total da observabilidade e fecha e limpa automaticamente os dados de observabilidade quando sai do âmbito.
Ir
- Os plug-ins de observabilidade de microsserviços são suportados para versões do gRPC Go
v1.54.0
e posteriores. O repositório de exemplo está no GitHub.
Com o módulo Go, a aceitação da observabilidade dos microsserviços requer 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 das variáveis de ambiente, cria exportadores em conformidade e injeta lógica de recolha nas ligações de clientes e nos servidores criados após a chamada. A chamada adiadaobservability.End
limpa os recursos e garante que os dados em buffer são descarregados antes de a
aplicação ser fechada.
Depois de atualizar o código da aplicação, execute o seguinte comando para atualizar o ficheiro go.mod
.
go mod tidy
Java
Para usar a observabilidade de microsserviços com aplicações Java, modifique a compilação para incluir o artefacto grpc-gcp-observability
. Use a versão 1.54.1 ou posterior do gRPC.
Nas secções de criação de fragmentos nas ferramentas de criação do Gradle e Maven, o valor de grpcVersion
é 1.54.1.
O repositório de exemplo está no GitHub.
- Para instrumentar com êxito as suas aplicações Java para 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();
...
}
Tenha em atenção que tem de chamar GcpObservability.grpcInit()
antes de serem criados canais gRPC ou servidores. A função GcpObservability.grpcInit()
lê a configuração de observabilidade dos microsserviços e usa-a para configurar os interceptores e os rastreadores globais necessários para as funcionalidades de registo, métricas e rastreio em cada canal e servidor criado. GcpObservability.grpcInit()
é thread-safe e tem de ser chamado exatamente uma vez. Devolve uma instância de
GcpObservability
que tem de guardar para chamar close()
mais tarde.
GcpObservability.close()
anula a atribuição de recursos. Os canais ou os servidores criados
posteriormente não registam nada.
GcpObservability
implementa java.lang.AutoCloseable
, que é fechado automaticamente se usar try-with-resource
s da seguinte forma:
...
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
...
}
Use a ferramenta de compilação do Gradle
Se estiver a usar a ferramenta de compilação Gradle, inclua o seguinte:
def grpcVersion = '1.54.1'
...
dependencies {
...
implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}
Use a ferramenta de compilação Maven (pom.xml)
Se estiver a usar a ferramenta de compilação 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 a sua aplicação
Siga as instruções nesta secção apenas se tiver usado o exemplo gRPC para o tutorial. Pode modificar o comando run
para segmentar o ficheiro binário da sua aplicação.
Executar servidor
C++
- Crie uma sessão de SSH na VM.
Exporte variáveis de ambiente. Use os passos definidos 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 a aplicação de servidor
shell cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
Ir
- Crie uma sessão de SSH na VM.
Exporte variáveis de ambiente. Use os passos definidos acima para criar
server_config.json
.export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
Execute a aplicação de servidor
shell go run ./server/main.go
Java
- No diretório de exemplos, abra o ficheiro README e siga as instruções no ficheiro.
- Quando as instruções lhe indicarem que 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 os passos definidos acima para criar o ficheiro
client_config.json
.export GOOGLE_CLOUD_PROJECT=$PROJECT_ID export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
Execute a aplicação cliente
cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
Ir
- Crie outra sessão SSH na VM.
- Exporte variáveis de ambiente. Use os passos definidos acima para criar o ficheiro
client_config.json
.shell export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
Execute a aplicação cliente
cd grpc-go/examples/features/observability go run ./client/main.go
Java
- No diretório de exemplos, abra o ficheiro README e siga as instruções no ficheiro.
- Quando as instruções indicarem que deve abrir outra janela de terminal, emita este comando:
shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm