cancelar
Mostrar resultados para 
Pesquisar em vez de 
Queria dizer: 
cancel
162
Apresentações
1
Útil
1
Comentários
Leandro Ferreira
Cisco Employee
Cisco Employee

Monitorar aplicações distribuídas é fundamental, mas vamos ser honestos: lidar com uma avalanche de dados de telemetria pode ser uma dor de cabeça. Quer seja em termos de desempenho ou de custo, gerenciar esses dados não é moleza. Grandes volumes de dados normalmente embutem grandes custos de armazenamento e processamento.

Pensando nessa situação o OpenTelemetry collector implementa uma solução interessante chamada amostragem (Sampling). Com ela você pode selecionar apenas o que te interessa.    

Existem duas estratégias de amostragem o Head Sampling e o tail sampling

Head Sampling

O Head Sampling é realizado no início do ciclo de vida do trace, determinando imediatamente se um ele será capturado. Esta estratégia é eficaz para reduzir a quantidade de dados logo na origem, ajudando a manter os custos e a sobrecarga de processamento baixos.

O Head Sampling decide logo de cara se um trace vai ser coletado ou não. É uma forma direta de dizer "sim" ou "não" para os dados antes mesmo deles começarem a se formar de verdade. A decisão é tomada mesmo antes mesmo de o traço ser completamente formado.

Vantagens:

  • Simples de configurar
  • Eficiente

Ponto de atenção:

  • Não é possível tomar decisões baseados em atributos do trace, latência, status do trace etc. Se quiser por exemplo separar todos os traces come erro, head sampling não é solução.

Gostou da idéia? Quer ver como faz?

Vai aqui um exemplo de como configurar seu collector para fazer um head sampling. Este exemplo configura o `probabilistic_sampler` para capturar 10% dos spans, baseando-se em um algoritmo de hash, ideal para a redução inicial do volume de dados.

 

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch, probabilistic_sampler]
      exporters: [otlp]

processors:
  probabilistic_sampler:
    hash_seed: 1234567890
    sampling_percentage: 10

 

 

Tail Sampling

O Tail Sampling, ao contrário, é executado após os dados serem inicialmente coletados, permitindo decisões baseadas em um contexto mais completo. Esta abordagem é particularmente útil para capturar traços críticos, como aqueles que contêm erros ou têm alta latência.

O Tail Sampling entra em cena depois que os dados já foram coletados. Ele olha o contexto completo antes de tomar uma decisão. É ótimo para pegar aqueles detalhes críticos, como erros ou demoras.

Vantagens:

  • É possível tomar decisões baseados em atributos do trace, latência, status do trace etc. Se quiser por exemplo separar todos os traces come erro, head sampling não é solução.

Pontos de Atenção:

  • Pode ser um pouco mais complexo de configurar
  • Como necessitamos ter o trace completo, consome um pouco mais de recursos do collector
  • Todas as spans que compõem um mesmo trace devem ser recebidas pelo mesmo collector.

Aqui vai um exemplo de como enviar somente traces com latência alta ou com erros.

 

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch, tail_sampling]
      exporters: [otlp]

# tail sampling - traces with latency higher than 2s OR traces with errors
processors:
  tail_sampling:
    decision_wait: 30s
    num_traces: 100
    expected_new_traces_per_sec: 100
    policies:
      [
          {
            name: test-policy-2,
            type: latency,
            latency: {threshold_ms: 2000}
          },
          {
            name: test-policy-5,
            type: status_code,
            status_code: {status_codes: [ERROR]}
          }            
      ]

 

A implementação de estratégias de amostragem no OpenTelemetry traz diversos benefícios:

- Redução de Custos: Menos dados para armazenar, processar e analisar diretamente se traduzem em menores custos de infraestrutura e armazenamento.

- Filtragem de Ruído: Ao focar em dados significativos, a amostragem pode ajudar a filtrar "ruído", ou seja, informações irrelevantes que não contribuem para a análise essencial.

- Melhoria de Desempenho: Processar e analisar uma menor quantidade de dados pode reduzir a carga nos sistemas de processamento e melhorar o tempo de resposta geral.

- Escalabilidade: Amostragem eficaz permite que o sistema escale de forma mais eficiente, gerenciando grandes volumes de dados sem degradação do desempenho.

Mas e ai? É melhor user Head ou Tail Sampling?

A escolha entre head sampling e tail sampling depende do que você precisa. Se a ideia é só dar uma filtrada rápida e manter os custos baixos, o head sampling é sua praia. Mas se você precisa de uma análise mais detalhada, especialmente para capturar problemas específicos, o tail sampling pode ser a melhor opção.

Você pode até combinar os dois. Por exemplo, usar um head sampling  maroto pra dar aquela primeira filtrada nos dados separando 50% do tráfego e depois analisar quem sobrou aplicando um tail sampling.

Usar estratégias de amostragem com o OpenTelemetry é uma maneira esperta de manejar os dados de telemetria. Escolher entre head sampling e tail sampling pode fazer uma grande diferença na performance e nos custos de monitoramento das suas aplicações. Com a estratégia certa, você ganha em eficiência e ainda mantém tudo rodando suave.

Gostou do papo e quer praticar um pouco. Da uma olhada nesse repo com alguns exemplos.

https://github.com/lof000/otel-cco-labs/tree/main/lab5_otel_sampling

 

 

 

 

1 Comentário
fdumont
Cisco Employee
Cisco Employee

Excelentes dicas!

Primeiros Passos

Encontre respostas, faça perguntas e conecte-se com nossa comunidade de especialistas da Cisco de todo o mundo.

Estamos felizes por você estar aqui! Participe de conversas e conecte-se com sua comunidade.