01
A amostragem uniforme guarda o volume errado
O amostrador padrão da maioria dos SDKs é probabilístico e fixo: cada trace tem a mesma chance de ser guardado, geralmente algo entre um e dez por cento. A escolha faz sentido do ponto de vista de custo, porque o volume de traces cresce junto com o tráfego e a fatura de armazenamento é linear. O problema é que ela otimiza a estatística e destrói a investigação. Amostrar de forma uniforme significa preservar a distribuição do tráfego, e a distribuição do tráfego é dominada por requisições que deram certo. Você acaba com uma amostra fiel do que já sabia e uma amostra vazia do que precisa entender.
Vale fazer a conta, porque ela é mais brutal do que parece. Um endpoint com dez mil requisições por minuto e taxa de erro de zero vírgula um por cento produz dez erros por minuto. Com amostragem de um por cento, a expectativa é de zero vírgula um erro guardado por minuto: um a cada dez minutos. Um incidente de cinco minutos produz, em média, meio trace de erro. Metade das vezes você não terá nenhum. E note que a taxa de erro não precisa ser baixa para o problema aparecer: qualquer classe de falha que seja rara em relação ao tráfego total sofre o mesmo, inclusive a cauda de latência, que é onde quase toda investigação de performance começa.
| Estratégia | Como decide | Custo | O que perde |
|---|---|---|---|
| Uniforme fixa | Sorteio no início, taxa única para tudo | Previsível e linear no tráfego | Erros e cauda de latência, que são raros por definição |
| Por taxa de cabeça (head-based) | Sorteio no início, taxa diferente por rota ou cliente | Previsível, ajustável por segmento | Ainda não sabe se a requisição falhou quando decide |
| Por resultado (tail-based) | Decide no fim, com latência, status e erro em mãos | Exige buffer dos spans até o trace fechar | Traces muito longos, se o buffer expirar antes |
| Sempre ligada em erro, cota no sucesso | Regra explícita por classe de trace | Teto por classe, não pelo tráfego total | Nada relevante, desde que a cota seja monitorada |
O objetivo da amostragem não é reduzir volume, é reduzir volume redundante. Cem traces idênticos de um checkout bem-sucedido explicam a mesma coisa que um. Um trace de um checkout que estourou o timeout do gateway explica algo que nenhum outro registro do sistema explica. A política certa parte dessa assimetria em vez de tratar toda requisição como igualmente informativa.