Skip to main content

Command Palette

Search for a command to run...

Introdução ao Opentelemetry

Updated
3 min read
Introdução ao Opentelemetry

OpenTelemetry é uma estrutura (biblioteca) de observabilidade open-source que fornece um conjunto unificado de APIs, SDKs e ferramentas para coletar, processar e exportar dados de telemetria (métricas, logs e traces) de aplicações e serviços.

Principais características:

Ele não está vinculado a nenhum fornecedor específico, permitindo que você colete dados uma vez e os exporte para diferentes backends de observabilidade como Prometheus, Jaeger, Elasticsearch, Dynatrace, etc.

Ou seja, após a instrumentação da sua aplicação você consegue fazer o envio dos dados para qualquer destino que você queira. Isso é muito útil já que as vezes existem mudanças nos provedores, por exemplo: você instrumentou sua aplicação para usar Datadog mas 2 ou 3 anos depois sua empresa decide mudar de contrato para um NewRelic, isso exigiria um retrabalho já que você vai precisar fazer alguns ajustes para a coleta e envio destes dados. Usando o OpenTelemetry (OTLP) você não teria este retrabalho já que sua aplicação já está instrumentada, basta indicar pra onde o dado precisa ir.

Três pilares da observabilidade:

  • Traces: Rastreiam o fluxo de requisições através de sistemas distribuídos.

  • Metrics: Coletam medições numéricas sobre performance e comportamento.

  • Logs: Capturam eventos discretos e mensagens de debug.

Instrumentação:

  • Auto-instrumentação: Oferece instrumentação automática para linguagens populares (Java, Python, .NET, Node.js, Go) sem necessidade de modificar o código da aplicação. Não precisa de mudanças no código.

  • Auto-instrumentação no Kubernetes: É possivel receber e enviar dados da sua aplicação através do OTLP Operator, você pode ter instrumentação completamente automática apenas com annotations. São 3 modos do Operator: Deployment, Sidecar, Daemonset. Não precisa de mudanças no código.

  • Instrumentação manual: Permite adicionar telemetria customizada específica para sua aplicação.Utilizado OTLP API e OTLP SDK. Precisa de mudanças no código.

OBS: também é possivel usar a instrumentação manual ou auto-instrumentação no Kubernetes, basicamente são 3 formas diferentes de conseguir coletar dados da sua aplicação. Fica a seu critério definir qual será a melhor maneira pra você.

Arquitetura:

Existem vários tipos de arquiteturas possíveis, abaixo está uma delas. Eu digo que existem várias, porque o OTLP pode enviar os dados dependendo do Backend diretamente, sem ter um OTLP Collector fazendo essa intermediação para o recebimento, processamento e envio destes dados.

O Jaeger por exemplo aceita dados OTLP, alguns outros providers de backend não aceitam, então você precisaria utilizar o OTLP Collector pra fazer esse processamento.

A arquitetura utilizando o OTLP Operator no Kubernetes é um pouco diferente também já que o Cluster Kubernetes possui um Server API para o recebimento de algumas chamadas HTTP.

O operator consegue fazer essa “mágica” de descobrir as aplicações através dessa configuração do seu Deployment:

# Sua aplicação
metadata:
  annotations:
    instrumentation.opentelemetry.io/inject-java: "true"  # 👈 ESTA é a "chave"

Vantagens:

  • Padronização da coleta de telemetria

  • Evita vendor lock-in

  • Reduz complexidade de instrumentação

  • Comunidade ativa e suporte da CNCF

  • Integração nativa com Kubernetes

Próximos Passos:

Vou criar mais 3 tutoriais mostrando como é feito os diferentes tipos de implementação e qual o resultado.