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 possíveis casos de uso para o rastreamento do OpenTelemetry, incluindo os seguintes:
- Seu serviço está passando por uma latência de publicação maior 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 um dos clientes bibliotecas.
- Instale o SDK do OpenTelemetry e configure um exportador de rastreamento e um provedor de rastreador.
- Ative a API Cloud Trace.
- Entenda como ler a observabilidade da nuvem vestígios.
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 a API Pub/Sub bibliotecas de cliente 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 traces. 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 rastreador provedor para criar traces.
As etapas a seguir descrevem como configurar o rastreamento:
- Instanciar um exportador do OpenTelemetry do Cloud Trace.
- Se necessário, instancie e registre um provedor de rastreador usando o SDK do OpenTelemetry.
- Configure o cliente com a opção de ativar o rastreamento do OpenTelemetry.
- Usar 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 trace. Este rastro representa todo o ciclo de vida da mensagem, desde o momento em que você publica quando a mensagem for 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 spans 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 chaves de ordenação, 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 locações.
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 está ativado
e é prefixado 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 trace
As seções a seguir contêm informações detalhadas sobre como acompanhar e analisar um trace no console do Google Cloud.
Considerações
- Ao publicar um lote de mensagens, o período da RPC de publicação é capturado em um rastreamento 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.
Períodos que representam operações em lote, como um lote de publicação (que logicamente deve ter vários pais) não podem ser representados usando nenhum ou um período pai.
Rastrear intervalos criados durante o ciclo de vida da mensagem
A imagem a seguir mostra um exemplo de períodos criados em um único trace para uma única mensagem.
Cada período pode ter atributos adicionais que fornecem informações adicionais, como tamanho de byte da mensagem e informações da chave de ordem.
Os atributos de período transmitem metadados adicionais, como a chave de ordem da mensagem, o ID 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 seguintes problemas podem causar problemas no 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 descarga adequada função.