Este documento apresenta o conceito de amostragem, que se refere a se os dados de uma span são enviados para o Cloud Trace. Quando os dados de um período são enviados ao Cloud Trace, ele é amostrado. Quando os dados de cada intervalo em um rastro são registrados, o rastro é concluído. No entanto, os rastros geralmente têm extensões ausentes porque cada componente instrumentado em um sistema de rastreamento distribuído decide de forma independente se vai ou não registrar o intervalo que está processando.
Embora cada componente tome a própria decisão sobre se o intervalo que está processando é amostrado, essa decisão pode ser influenciada pela decisão de amostragem do componente pai. Por exemplo, suponha que cada componente tenha uma regra que diga "se a extensão pai for amostrada, então sample a extensão atual. Caso contrário, sample 50% das extensões". Nesse cenário, o seguinte é verdadeiro:
- 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 são amostrados. Portanto, o rastreamento está concluído.
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 a amostragem com a propagação de contexto. A amostragem se refere a se um componente registra dados sobre um período. A propagação de contexto se refere a se as informações sobre o período, como o ID do período, são transmitidas para componentes filhos.
Estratégias de amostragem
As decisões de amostragem podem ser baseadas na cabeça ou na cauda. Na amostragem com base na cabeça, a decisão de amostragem é feita 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.
Você pode encontrar a frase "amostragem de 100%" na documentação de sistemas de rastreamento distribuído. Essa frase pode se aplicar a um rastro ou a um componente. Quando aplicado a um trace, significa que todos os períodos foram amostrados ou, de forma equivalente, que o trace está completo. Quando aplicado a um componente, significa que o componente amostra cada intervalo que processa.
Amostragem baseada no cabeça
Os samplers baseados em cabeça geralmente são configurados para sempre amostrar intervalos ou usar uma estratégia de amostragem probabilística:
Com as configurações always sample, todos os componentes que abrangem o serviço e que podem gravar dados de rastreamento amostram os intervalos que processam. O ideal é que todos os rastros estejam completos e, portanto, você tenha as informações necessárias para resolver falhas. Esse tipo de configuração pode fazer com que você exceda as cotas ou os limites de custo de armazenamento.
Com a amostragem probabilística, nem todos os intervalos são amostrados. O comportamento real dessa abordagem depende da implementação do componente. Em algumas implementações, todos os spans têm a mesma probabilidade de serem amostrados. Em outros, a decisão de amostragem do elemento pai influencia se um período é amostrado.
Os rastros podem não conter todos os intervalos. Isso pode ser esperado devido ao uso de amostragem probabilística ou pode ser devido à cota ou a componentes que processam uma solicitação, mas não amostram o período.
Amostragem baseada em cauda
O Cloud Trace não oferece suporte à amostragem baseada em cauda. As decisões de amostragem precisam ser feitas nos componentes que enviam dados para o Cloud Trace.
Se você quiser usar a amostragem baseada em cauda, use um servidor intermediário que recebe informações de rastreamento que transmitem 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:
- É necessário armazenar todos os spans em um rastro antes de tomar uma decisão de amostragem. Portanto, talvez você precise de uma grande quantidade de armazenamento temporário ou incorra em outras despesas gerais.
- Em geral, todos os componentes que podem gerar períodos de trace precisam ser coordenados. Normalmente, os desenvolvedores que usam o OpenTelemetry encaminham todos os spans para o mesmo coletor com o mesmo ID de rastreamento.
Amostragem e serviços do Google Cloud
Cada serviço do Google Cloud toma as próprias decisões de amostragem, e nem todos os serviços do Google Cloud fazem amostragem. Ou seja, um serviço pode nunca enviar dados para o Cloud Trace.
Quando a amostragem é compatível com um serviço do Google Cloud, ele normalmente implementa o seguinte:
- Uma taxa de amostragem padrão.
- Um mecanismo para usar a decisão de amostragem do pai como uma dica para saber se a amostragem do intervalo é necessária.
- Taxa de amostragem máxima.
Para solicitar que um serviço do Google Cloud adicione suporte à amostragem, use o Google Issue Tracker.
A seguir
Para saber como escolher uma estratégia de amostragem por nome de período, consulte Amostagem remota do Jaeger.
Recomendamos que você analise a documentação de código aberto a seguir para determinar qual abordagem de amostragem é melhor para seus aplicativos em desenvolvimento e implantados:
Documentação do serviço do Google Cloud: