O rastreamento do OpenTelemetry permite identificar e rastrear a latência de várias operações da biblioteca de cliente do Pub/Sub, como agrupamento, gerenciamento de arrendamento e controle de fluxo. A coleta dessas informações pode ajudar a depurar problemas de biblioteca de cliente.
Alguns casos de uso possíveis para o rastreamento do OpenTelemetry, incluindo:
- A latência de publicação do seu serviço está maior do que o normal.
- Você está enfrentando um grande número de reenvios de mensagens.
- Uma mudança na função de callback do cliente do assinante faz com que o processamento demore mais do que o normal.
Antes de começar
Antes de configurar o OpenTelemetry, conclua as seguintes tarefas:
- Configure o Pub/Sub usando uma das bibliotecas de cliente.
- Instale o SDK do OpenTelemetry e configure um exportador de rastreamento e um provedor de rastreador.
- Ative a API Cloud Trace.
- Saiba como ler rastros da Cloud Observability.
Funções exigidas
Para garantir que a conta de serviço tenha as permissões necessárias para exportar rastros para o Cloud Trace, peça ao administrador para conceder à conta de serviço os seguintes papéis do IAM no projeto:
-
Todos:
Agente do Cloud Trace (
roles/cloudtrace.agent
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para exportar rastros para o Cloud Trace. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para exportar rastros para o Cloud Trace:
-
Todos:
cloudtrace.traces.patch
O administrador também pode conceder essas permissões à conta de serviço com papéis personalizados ou outros papéis predefinidos.
Fluxo de trabalho de rastreamento do OpenTelemetry
Para configurar o rastreamento do OpenTelemetry, use as bibliotecas de cliente do Pub/Sub e o SDK do OpenTelemetry. Com o SDK, é necessário configurar um exportador de rastreamento e um provedor de rastreador antes de se conectar às bibliotecas do Pub/Sub. Em algumas bibliotecas, a configuração de um provedor de rastreador é opcional.
Exportador de trace. O SDK do OpenTelemetry usa o exportador de rastros para determinar para onde enviar os rastros.
Provedor de rastreador. As bibliotecas de cliente do Pub/Sub usam o provedor de rastreador para criar rastros.
As etapas a seguir descrevem como configurar o rastreamento:
- Instânciar um exportador do OpenTelemetry do Cloud Trace.
- Se necessário, instancie e registre um provedor de rastreador usando o SDK do OpenTelemetry.
- Configure seu cliente com a opção de ativar o rastreamento do OpenTelemetry.
- Use as bibliotecas de cliente do Pub/Sub para publicar uma mensagem.
Como o rastreamento funciona
Para cada mensagem publicada, a biblioteca de cliente cria um novo rastro. Esse rastro representa todo o ciclo de vida da mensagem, desde o momento em que você a publica até o momento em que ela é confirmada. Um trace encapsula informações como a duração das operações, períodos principais e filhos e períodos vinculados.
Um trace é composto por um período raiz e os períodos filhos correspondentes. Esses intervalos representam o trabalho que a biblioteca de cliente faz ao processar uma mensagem. Cada rastro de mensagem contém o seguinte:
- Para publicação. Controle de fluxo, programação de ordenação de chaves, agrupamento e a duração do RPC de publicação.
- Para assinaturas. Controle de simultaneidade, programação de chaves de ordenação e gerenciamento de arrendamento.
Para propagar informações do lado de publicação para o lado de inscrição, as
bibliotecas de cliente injetam um atributo específico de rastreamento no lado
de publicação. O mecanismo de propagação de contexto só é ativado quando o rastreamento é
ativado e é precedido pelo prefixo googclient_
.
Publicar mensagens com rastreamento
O exemplo de código abaixo mostra como ativar o rastreamento usando a biblioteca de cliente do Pub/Sub e o SDK do OpenTelemetry. Neste exemplo, os resultados do rastreamento são exportados para o Cloud Trace.
Considerações
Ao instanciar o provedor de rastreador, você configura uma proporção de amostragem com o SDK do OpenTelemetry. Essa proporção determina quantos rastros o SDK precisa amostrar. Uma taxa de amostragem mais baixa pode ajudar a reduzir os custos de faturamento e evitar que seu serviço exceda a cota de intervalo do Cloud Trace.
Go
C++
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
TypeScript
Node.js
Java
Receber mensagens com rastreamento
Go
C++
Python
TypeScript
Node.js
Java
Analisar um rastro
As seções a seguir contêm informações detalhadas sobre como rastrear e analisar um rastro no console do Google Cloud.
Considerações
- Ao publicar um lote de mensagens, o escopo de RPC de publicação é capturado em um traço separado.
- Uma RPC de publicação tem vários intervalos de origem, já que várias chamadas de criação podem resultar em uma RPC de publicação quando são agrupadas.
Os períodos no OpenTelemetry podem ter zero ou um período pai.
As extensões que representam operações em lote, como publish batch, que logicamente precisam ter vários pais, não podem ser representadas usando zero ou uma extensão pai.
Rastrear intervalos criados durante o ciclo de vida da mensagem
A imagem a seguir mostra um exemplo de períodos que são criados em um único rastro para uma única mensagem.
Cada período pode ter atributos adicionais que fornecem informações adicionais, como o tamanho de bytes da mensagem e as informações da chave de ordenação.
Os atributos de extensão transmitem outros metadados, como a chave de ordenação da mensagem, o ID da mensagem e o tamanho da mensagem.
Os principais períodos de publicação e inscrição são aumentados com eventos de período, que correspondem ao momento em que uma chamada de rede é emitida e concluída.
Resolver problemas comuns
Os problemas a seguir podem causar problemas com o rastreamento:
- A conta de serviço usada para exportar rastros não tem
a função
roles/cloudtrace.agent
necessária. - A cota do número máximo de períodos ingeridos no Cloud Trace foi atingida.
- O aplicativo é encerrado sem chamar a função de limpeza adequada.