Vamos explorar o OpenTelemetry, uma abordagem padronizada e independente para a coleta de dados de telemetria.
Aprimorar a observabilidade em um aplicativo representa um desafio significativo para qualquer desenvolvedor, uma vez que exige a captura de dados de telemetria da aplicação. O dicionário Cambridge define telemetria como a ciência ou processo de coletar informações sobre objetos remotos e transmitir essas informações eletronicamente para outro local.
Por exemplo, um único clique ou sessão de um usuário em um site pode gerar diversas solicitações e um fluxo de rastreamento complexo através de redes, microsserviços e bancos de dados.
OpenTelemetry é uma plataforma de observabilidade, constituída por um conjunto de componentes bem estruturados, que podem ser utilizados em conjunto ou de forma individual. Além disso, desenvolvedores de frameworks e bibliotecas amplamente utilizados agora têm à disposição um método padrão para inserir dados de telemetria nessas bibliotecas e estruturas. Isso proporciona aos usuários finais insights valiosos sobre o funcionamento interno dessas estruturas.
Para entender o OpenTelemetry, é crucial primeiro compreender o conceito de rastreamento distribuído.
O que é Rastreamento Distribuído?
À medida que nossas aplicações se tornam mais complexas e dependem de um número crescente de serviços para processar as solicitações dos usuários e completar as transações, torna-se essencial entender como essas solicitações fluem através dos nossos serviços e como cada serviço contribui para a latência global. Essa é a função do rastreamento distribuído. Ele registra a latência das requisições do usuário e o tempo que cada microsserviço leva para retornar uma resposta.
Quando uma solicitação do usuário é recebida, desejamos criar um trace, que representa o conjunto completo de informações que descrevem como nosso sistema responde a essa solicitação. Os traces são compostos por spans, cada um representando um par específico de solicitação e resposta envolvido no processamento da solicitação. O span pai descreve a latência observada pelo usuário final, enquanto o span filho é usado para entender como um determinado serviço no sistema distribuído foi chamado e respondeu, com suas respectivas informações de latência.
O que é OpenTelemetry?
OpenTelemetry é um projeto de código aberto hospedado pela CNCF que oferece um método padronizado para gerar dados de telemetria. Ele surgiu da união do Open Tracing, um padrão para gerar dados de rastreamento, e do OpenCensus, um padrão para gerar dados de métricas.
O OpenTelemetry fornece um conjunto unificado de APIs, agentes, serviços coletores e bibliotecas para coletar rastreamentos e métricas distribuídas da sua aplicação. Ele padroniza a forma como coletamos dados de telemetria e os enviamos para um back-end de sua escolha. Isso oferece um caminho independente de fornecedor para a instrumentação e permite flexibilidade para mudar seu back-end sem precisar instrumentar seu código novamente.
Assim, você pode instrumentar suas aplicações usando um agente independente de fornecedor e, ao mesmo tempo, enviar suas métricas e rastreamentos para um fornecedor SaaS como o Datadog. Se você desejar mudar de fornecedor (por exemplo, do Datadog para o Dynatrace), poderá fazê-lo sem alterar o código da aplicação.
O objetivo do projeto OpenTelemetry é fornecer um conjunto único de bibliotecas de APIs e agentes para capturar métricas e rastreamentos distribuídos de suas aplicações. Isso se aplica a diversas linguagens e plataformas. O projeto OpenTelemetry também inclui um serviço coletor opcional e possui um repositório dedicado para especificações. Para esclarecer, o OpenTelemetry não é Jaeger ou Prometheus, que são back-ends observáveis. Ele auxilia na exportação de dados para back-ends comerciais e de código aberto.
A seguir estão os recursos que o OpenTelemetry oferece:
- Padronização na coleta de dados de telemetria, facilitando a transição entre fornecedores para as organizações.
- Uma convenção semântica de padrão aberto, independente de fornecedor, para o processo de coleta de dados.
- Coletor que pode ser implantado como um agente ou gateways, entre outras abordagens.
- Suporte a vários formatos de propagação de contexto para migração.
- Uma solução completa para gerar, emitir, coletar, processar e exportar dados de telemetria.
- Facilidade para enviar dados para vários destinos em paralelo, com controle total sobre eles.
Componentes do OpenTelemetry
A seguir estão os principais componentes do OpenTelemetry:
- Proto: Este componente é usado para definir coletores, bibliotecas de instrumentação e outros elementos, que são tipos de interface independentes de linguagem para o OpenTelemetry.
- Coletor: Os coletores são usados para receber, processar e exportar dados de telemetria. Essa implementação de coletores deve ser independente de fornecedor. Por padrão, todos os dados de telemetria são exportados por bibliotecas de instrumentação nesse local.
- Especificação: Este componente descreve os requisitos e expectativas da implementação em diferentes linguagens, que consistem em APIs, SDKs e dados. A API gera os dados de telemetria, processamento e recursos de exportação para implementar as APIs fornecidas pelos SDKs. Os dados seguem convenções semânticas para oferecer suporte a todos os tipos de fornecedores sem alterar nenhum código.
- Bibliotecas de instrumentação: Estão disponíveis em várias linguagens como parte do projeto OpenTelemetry. Essas bibliotecas são usadas para fornecer capacidade de observação para outras bibliotecas, tornando todas as aplicações observadas através de chamadas para a API OpenTelemetry.
Arquitetura do OpenTelemetry

Em um nível geral, o OpenTelemetry consiste em três partes principais:
- Um conjunto de APIs para instrumentar aplicativos, bibliotecas e frameworks.
- O SDK implementa as APIs.
- Um coletor opcional que pode ingerir, agregar e exportar dados de telemetria conforme a necessidade.
O objetivo da API é permitir a criação de instrumentação para bibliotecas e o código do aplicativo. A API possui quatro seções principais: rastreamento, medidores, um contexto compartilhado e convenções semânticas.
- A API Tracer oferece suporte à criação, anotação e conclusão de períodos (spans).
- A API do medidor consiste em vários instrumentos métricos. Exemplos desses instrumentos são observadores, registradores de valor e contadores.
- Você pode rastrear e executar o contexto de extensão habilitando a API de contexto e propagando esse contexto dentro e fora do seu sistema.
- Todas as diretrizes e regras para nomenclatura principal, como nomear os spans, atributos, rótulos e instrumentos métricos, estão presentes nas convenções semânticas. Essas convenções são implementadas para garantir consistência entre diferentes implementações de linguagem e para instrumentações externas.
Em um contexto compartilhado, a implementação do contexto fica entre o rastreador e o medidor, permitindo que todos os registros de métricas não-observadores ocorram no contexto de um span em execução. Um recurso que permite que os SDKs capturem extensões exemplares para valores de métrica. Você pode personalizar o contexto com propagadores, que permitem a propagação do contexto de span para dentro e para fora do sistema, possibilitando o verdadeiro rastreamento distribuído.
O coletor é uma parte essencial da arquitetura OpenTelemetry. É um serviço autônomo que pode receber, processar e exportar dados de telemetria de várias fontes, incluindo OpenCensus, Zipkin, Jaeger e o protocolo OpenTelemetry. Usando coletores, você pode exportar spans e métricas para diversos fornecedores e sistemas de telemetria de código aberto.
A arquitetura OpenTelemetry oferece uma solução de telemetria completa e pronta para uso. Você também pode realizar personalizações usando vários pontos de extensão, conforme a necessidade.
Como Funciona o OpenTelemetry?
Dentro de cada serviço em sua implantação, instale o cliente OpenTelemetry. O cliente é o SDK; o SDK, por sua vez, possui uma API. Suas estruturas e bibliotecas de aplicativos usam essa API de instrumentação para descrever o trabalho que estão realizando. O SDK então exporta as observações coletadas para um serviço de pipeline de dados chamado coletor.
O OpenTelemetry possui seu próprio protocolo de dados, o OTLP, mas o coletor pode traduzir o OTLP para diversos formatos, incluindo Zipkin, Jaeger e Prometheus. É importante notar que o OpenTelemetry não fornece seu próprio back-end ou ferramenta de análise; isso ocorre porque o foco do OpenTelemetry é a padronização. O objetivo é criar uma linguagem universal para descrever as operações de computadores em um ambiente de nuvem, não padronizar a forma como esses dados são analisados. Espera-se que o OpenTelemetry impulsione o mundo da observabilidade, permitindo o rápido lançamento de novas ferramentas de análise sem precisar reconstruir todo o ecossistema de software de telemetria.
Quando você envia grandes quantidades de dados através do sistema, há muitos aspectos a considerar. Felizmente, o OpenTelemetry pensou em todos esses pontos e tem soluções para cada um deles. Primeiramente, o OpenTelemetry é flexível e lida com vários formatos de propagação de contexto. Isso significa que, mesmo havendo um padrão, ainda existe a opção de escolha dentro desse padrão. Portanto, se você estiver usando algo como o formato de contexto de rastreamento w3c ou a propagação b3, esses são padrões diferentes dentro do padrão que permitem que seus serviços conectem os pontos.
Conclusão
O OpenTelemetry coleta uma variedade de observações, sendo as métricas de rastreamento distribuído e os recursos do sistema os mais importantes. Em vez de tratá-los como sinais separados, o OpenTelemetry os integra e fornece indexação e contexto que permitem agregar e indexar todos esses sinais no back-end.
Além da coleta de dados, o OpenTelemetry oferece um recurso de processamento e pipeline de dados que permite alterar formatos de dados, manipular seus dados e oferece todas as ferramentas necessárias para criar um pipeline de telemetria robusto em um sistema moderno.
Então, é isso sobre o OpenTelemetry. Experimente essa ferramenta!