Amostragem de traces

Neste documento, apresentamos o conceito de amostragem, que se refere ao envio dos dados de um período ao Cloud Trace. Quando os dados de um período são enviados ao Cloud Trace, ele é amostrado. Quando os dados de cada período em um trace são registrados, o trace está completo. No entanto, os traces frequentemente têm períodos ausentes, porque cada componente instrumentado em um sistema de rastreamento distribuído decide independentemente se quer ou não registrar o período que está processando.

Embora cada componente tome sua própria decisão quanto à amostragem do período que está processando, essa decisão pode ser influenciada pela decisão de amostragem do pai. Por exemplo, suponha que cada componente tenha uma regra que diz "se o período pai for amostrado, faça uma amostra do período atual. Caso contrário, tente amostra 50% dos períodos". Nesse cenário, ocorre o seguinte:

  • O período raiz determina se todos os períodos no trace são amostrados.
  • Quando o período raiz é amostrado, todos os períodos no trace também são. Portanto, o trace está completo.

Os componentes podem transmitir a decisão de amostragem para o filho usando o contexto. Por exemplo, no cabeçalho traceparent do World Wide Web Consortium (W3C), a flag sampled armazena a decisão de amostragem do pai.

Não confunda amostragem com propagação de contexto. A amostragem indica se um componente registra dados sobre um período. A propagação de contexto se refere à transmissão das informações sobre o período, como o ID do período, aos componentes filhos.

Estratégias de amostragem

As decisões de amostragem podem ser baseadas na cabeça ou na cauda. Na amostragem baseada em cabeçalho, a decisão de amostragem é tomada quando a solicitação é recebida pelo componente que processa o período. Na amostragem baseada em cauda, a decisão de amostragem é adiada até que todo o trace esteja disponível.

Talvez você encontre a frase "amostragem 100%" na documentação de sistemas de rastreamento distribuídos. Essa frase pode ser aplicada a um rastro ou a um componente. Quando aplicado a um trace, isso significa que todos os períodos foram amostrados ou, equivalentemente, que o trace está completo. Quando aplicado a um componente, significa que o componente coleta amostras a cada período que processa.

Amostragem baseada em dados

As amostras baseadas em cabeçalho geralmente são configuradas para sempre fazer a amostragem de períodos ou usar uma estratégia de amostragem probabilística:

  • Com configurações sempre de amostra, todos os componentes que abrangem períodos de serviço e que podem gravar dados de trace, fazem uma amostra dos períodos que processam. O ideal é que todos os traces estejam completos e, portanto, você tenha as informações necessárias para solucionar problemas. Esse tipo de configuração pode fazer com que você exceda as quotas ou os limites de custo de armazenamento.

  • Com a amostragem probabilística, nem todos os períodos são amostrados. O comportamento real dessa abordagem depende da implementação do componente. Em algumas implementações, todos os períodos têm a mesma probabilidade de serem amostrados. Em outros, a decisão de amostragem do pai influencia se um período é amostrado.

Os traces podem não conter todos os períodos. Isso pode ser esperado devido ao uso de amostragem probabilística ou por causa da cota ou de componentes que processam uma solicitação, mas não fazem amostragem do período.

Amostragem baseada em cauda

O Cloud Trace não oferece suporte à amostragem baseada na cauda. É necessário tomar decisões de amostragem nos componentes que enviam dados ao Cloud Trace.

Se você quiser usar a amostragem baseada na cauda, poderá usar um servidor intermediário que recebe informações de rastreamento que redirecionam os dados para o Cloud Trace depois de tomar uma decisão de amostragem. Por exemplo, é possível usar o Coletor do OpenTelemetry com o processador de amostragem de cauda para tomar uma decisão de amostragem atrasada.

Se você planeja usar a amostragem de cauda, considere o seguinte:

  • É preciso armazenar todos os períodos em um trace antes de tomar uma decisão de amostragem. Portanto, talvez você precise de uma grande quantidade de armazenamento temporário ou incorrer em outra sobrecarga.
  • Em geral, todos os componentes que podem gerar períodos para o trace precisam ser coordenados. Normalmente, os desenvolvedores que usam o OpenTelemetry encaminham todos os períodos para o mesmo ID de trace para o mesmo coletor.

Amostragem e serviços do Google Cloud

Cada serviço do Google Cloud toma suas próprias decisões de amostragem, e não as amostras de todos os serviços do Google Cloud. Ou seja, talvez um serviço nunca envie dados ao Cloud Trace.

Quando um serviço do Google Cloud oferece suporte à amostragem, ele geralmente implementa o seguinte:

  • Uma taxa de amostragem padrão.
  • Um mecanismo para usar a decisão de amostragem do pai como uma dica para fazer uma amostragem do período.
  • Taxa de amostragem máxima.

Para solicitar que um serviço do Google Cloud adicione suporte para amostragem, use o Google Issue Tracker.

A seguir