O rastreamento do OpenTelemetry permite identificar e rastrear a latência de várias operações da biblioteca de cliente do Pub/Sub, como o processamento em lote, o gerenciamento de concessões e o controle de fluxo. A coleta dessas informações pode ajudar a depurar problemas da biblioteca de cliente.
Alguns casos de uso em potencial para o rastreamento do OpenTelemetry incluem:
- Seu serviço está com uma latência de publicação maior do que o normal.
- Você está recebendo um grande número de novas entregas de mensagens.
- Uma mudança na função de callback do cliente 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 tracer.
- Ative a Cloud Trace API.
- Entenda como ler os rastros do Cloud Observability.
Funções exigidas
Para garantir que a conta de serviço tenha as permissões necessárias para exportar traces para o Cloud Trace, peça ao administrador para conceder as seguintes funções do IAM à conta de serviço no seu projeto:
-
Todas:
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 acessar as permissões exatas que são 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:
-
Todas:
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 tracer antes de se conectar às bibliotecas do Pub/Sub. Em algumas bibliotecas, a configuração de um provedor de tracer é opcional.
Exportador de rastreamento. O SDK do OpenTelemetry usa o exportador de rastreamento para determinar para onde enviar os rastros.
Provedor de tracer. As bibliotecas de cliente do Pub/Sub usam o provedor de tracer para criar rastros.
As etapas a seguir descrevem como configurar o rastreamento:
- Instancie um exportador do OpenTelemetry do Cloud Trace.
- Se necessário, instancie e registre um provedor de tracer usando o SDK do OpenTelemetry.
- Configure o cliente com a opção de 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 rastreamento. Esse rastreamento representa todo o ciclo de vida da mensagem, desde o momento em que você publica uma mensagem até o momento em que ela é confirmada. Um rastreamento encapsula informações como a duração das operações, os períodos pai e filho e os períodos vinculados.
Um rastreamento é composto por um período raiz e os períodos filhos correspondentes. Esses períodos representam o trabalho que a biblioteca de cliente faz ao processar uma mensagem. Cada rastreamento de mensagem contém o seguinte:
- Para publicação. Controle de fluxo, programação de chaves de ordenação, processamento em lote e duração da RPC de publicação.
- Para assinaturas. Controle de simultaneidade, programação de chaves de ordenação e gerenciamento de concessões.
Para propagar informações da publicação para o lado da assinatura, as bibliotecas de cliente injetam um atributo específico de rastreamento no lado da publicação. O mecanismo de propagação de contexto só é ativado quando o rastreamento está ativado e é prefixado com o prefixo googclient_.
Publicar mensagens com rastreamento
O exemplo de código a seguir 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 tracer, você configura uma taxa de amostragem com o SDK do OpenTelemetry. Essa taxa determina quantos rastros o SDK precisa amostrar. Uma taxa de amostragem mais baixa pode ajudar a reduzir os custos de faturamento e evitar que o serviço exceda a cota deperíodos 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 Python do Pub/Sub.
TypeScript
Node.js
Java
Receber mensagens com rastreamento
Go
C++
Python
TypeScript
Node.js
Java
Analisar um rastreamento
As seções a seguir contêm informações detalhadas sobre como rastrear e analisar um rastreamento no Google Cloud console.
Considerações
- Ao publicar um lote de mensagens, o período de RPC de publicação é capturado em um rastreamento separado.
- Uma RPC de publicação tem vários períodos 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.
Os períodos que representam operações em lote, como um lote de publicação, (que logicamente deveriam ter vários pais) não podem ser representados usando zero ou um período pai.
Rastrear períodos criados durante o ciclo de vida da mensagem
A imagem a seguir mostra um exemplo de períodos criados em um único rastreamento para uma única mensagem.

Cada período pode ter atributos adicionais. Os atributos de período transmitem metadados adicionais, como a chave de ordenação da mensagem, o ID da mensagem e o tamanho dela.

Os principais períodos de publicação e assinatura são aumentados com eventos de período que correspondem a quando uma chamada de rede é emitida e quando ela é 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 o papel
roles/cloudtrace.agentnecessário. - 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 descarga apropriada.