OpenTelemetry, ou OTel, é um framework de observabilidade em código aberto que inclui uma coleção de kits de desenvolvimento de software (SDKs), APIs independentes do fornecedor e outras ferramentas para instrumentação de aplicação, sistema e dispositivo.
O OTel simplifica a forma como os dados de telemetria são coletados, independentemente da linguagem de programação, da infraestrutura ou do tempo de execução, e possibilita que os desenvolvedores gerem, coletem e exportem dados de telemetria padronizados para qualquer back-end de observabilidade. Esse framework padronizado fortalece e amplia os recursos de observabilidade, além de oferecer maior flexibilidade às equipes de TI e DevOps.
O OTel é implementado entre aplicações, sistemas e dispositivos e soluções de back-end: o armazenamento e a visualização são intencionalmente deixados para outras ferramentas, dando às organizações a liberdade de escolher as ferramentas que melhor se adaptam a elas.
Observabilidade é a capacidade de obter insights sobre o funcionamento interno de um sistema analisando suas saídas externas. Em operações de TI (ITOps) e computação em nuvem, dados de telemetria (como logs, métricas e rastreamentos) são usados para avaliar o desempenho e a integridade do sistema. Profissionais de DevOps contam com instrumentação — adicionando código a aplicações e sistemas para produzir e capturar dados de telemetria — para criar sistemas observáveis.
Essa instrumentação costuma ser uma tarefa complexa quando se trabalha em ambientes modernos, com ambientes de nuvem híbrida e multinuvem, aplicações baseadas em microsserviços, contêineres de Kubernetes e outros recursos de ambientes de computação atuais. Esses sistemas distribuídos e as várias linguagens de programação e tempos de execução que incorporam, apresentam uma matriz complicada para instrumentar, coletar e exportar para armazenamento de back-end, visualização e análise.
Para obter uma compreensão abrangente do desempenho do serviço de rede e da aplicação, os engenheiros devem configurar a instrumentação personalizada para aplicativos e sistemas em toda a infraestrutura. O OpenTelemetry ajuda a resolver esse problema.
O OTel oferece um método padrão para coletar e transmitir dados de observabilidade, o que ajuda a simplificar o monitoramento em sistemas distribuídos. Ele usa bibliotecas e APIs unificadas e independentes de fornecedores para coletar e enviar dados de telemetria para plataformas de back-end. Ao adotar o OpenTelemetry, as equipes podem coletar e processar uniformemente telemetria em sistemas complexos, independentemente de quais aplicações gerenciam ou de quais ferramentas de observabilidade usam.
O código de instrumentação utilizado varia muito. E como nenhum provedor comercial oferecia uma ferramenta capaz de coletar dados de todos os aplicativos e serviços em rede, era difícil para as empresas coletar dados em diferentes idiomas e formatos ou alterar os back-ends.
Se, por exemplo, uma equipe de desenvolvimento quisesse trocar as ferramentas de back-end, teria que reinstrumentar completamente seu código e configurar novos agentes para enviar dados de telemetria aos novos servidores. Além disso, essa abordagem fragmentada criou silos e confusão, dificultando a solução eficaz de problemas de desempenho.
O OpenTelemetry representou um avanço significativo nas ferramentas de observabilidade porque padronizou a forma como os dados de telemetria são coletados, analisados e transmitidos para plataformas de back-end. Ele oferece uma solução de código aberto baseada em padrões orientados pela comunidade - para coletar dados sobre o comportamento e a segurança do sistema, ajudando as equipes a simplificar o monitoramento e a observabilidade em ecossistemas distribuídos. Dessa forma o OTel oferece às empresas uma abordagem aberta e consistente para coletar dados críticos de aplicações e serviços de rede.
O OpenTelemetry foi criado combinando os recursos de rastreamento distribuído do OpenTracing e do OpenCensus em uma única ferramenta. O OpenTracing foi um projeto de código aberto desenvolvido pela Cloud Native Computing Foundation (CNCF) para disponibilizar aos engenheiros uma API independente de fornecedor para adicionar instrumentação de rastreamento distribuído aos aplicativos. Ele estabeleceu um conjunto de convenções semânticas para ajudar a garantir a consistência nos dados de telemetria.
Entretanto, diferentemente do OpenTelemetry, o OpenTracing não era em si uma implementação de rastreamento. Em vez disso, disponibilizou interfaces que os sistemas de rastreamento poderiam implementar para maximizar a compatibilidade entre plataformas. O OpenTracing é um projeto extinto (que agora incentiva os usuários a migrarem para o OpenTelemetry), mas vários softwares e soluções de rastreamento ainda dependem de suas APIs.
OpenCensus é um conjunto de bibliotecas de instrumentação, desenvolvida pelo Google, para reunir métricas de aplicações e rastreamentos distribuídos, que podem exportar dados para diferentes back-ends em tempo real. Ele coleta dados com tags de propagação e metadados consistentes, um conceito que agora existe no OpenTelemetry como “recursos”.
Com o OpenCensus, as aplicações podem importar e exportar dados com base em seus requisitos específicos, garantindo flexibilidade na forma como as métricas e os rastreamentos são enviados aos back-ends de observabilidade. O OpenCensus não foi formalmente descontinuado como o OpenTracing; ainda recebe manutenção regular e atualizações de segurança. No entanto, o desenvolvimento ativo foi transferido em grande parte para a OpenTelemetry.
Ambos os projetos visavam lidar com o mesmo problema. Na época, as equipes de desenvolvimento não tinham uma maneira padrão de instrumentalizar código e transmitir dados de telemetria para ferramentas de observabilidade de back-end.
No entanto, nenhum projeto poderia resolver esse problema sozinho. Por isso, a CNCF patrocinou o projeto OpenTelemetry, combinando as melhores funcionalidades de cada solução. O OpenTelemetry reúne a padronização da API do OpenTracing e os recursos de coleta de dados do OpenCensus para oferecer uma plataforma única e unificada para enviar, coletar e transferir dados de telemetria para plataformas de observabilidade de back-end.
Parte fundamental da execução de redes e aplicação de alta disponibilidade é alcançar Full Stack Observability (ou visibilidade), o que exige o acesso a dados de telemetria. As soluções de observabilidade coletam, monitoram e analisam dados de telemetria para determinar a integridade do sistema e, em seguida, oferecem às equipes de TI insights praticáveis para reparos e otimizações.
Para entender melhor o OpenTelemetry, vamos nos aprofundar no que são dados de telemetria e como as organizações os utilizam. O OpenTelemetry oferece suporte a tipos de dados específicos, ou seja, as saídas coletadas de logs, métricas e rastros (frequentemente chamados “três pilares da observabilidade”).
As métricas são avaliações numéricas do desempenho do sistema e do uso de recursos. Oferecem uma visão geral de alto nível da integridade da rede capturando os principais indicadores de desempenho (KPIs) como latência, perda de pacotes, utilização da largura de banda e uso da CPU do dispositivo.
As métricas são normalmente resumidas usando dashboards e outras visualizações. Geralmente oferecem às equipes as primeiras indicações de um problema de desempenho do sistema ou desempenho da aplicação.
Logs são registros detalhados de cada evento ou ação que ocorre dentro do ambiente. Apresentam informações detalhadas sobre o que ocorreu, quando ocorreu e em que ponto da rede ocorreu, proporcionando às equipes um contexto valioso para solução de problemas, depuração e análise forense.
Os logs revelam as causas subjacentes dos problemas, detalhando eventos do sistema como alterações nas configurações de dispositivos, falhas nas autenticações e quedas de conexões.
Os rastreios capturam o fluxo de dados em toda a rede, fornecendo insights sobre o caminho e o comportamento dos pacotes enquanto eles atravessam vários dispositivos e sistemas. Eles são essenciais para entender sistemas distribuídos e diagnosticar problemas de latência.
O rastreamento de dados possibilita que as equipes de TI vejam a jornada completa de uma transação, de ponta a ponta, ajudando a identificar atrasos e falhas que ocorrem em ambientes complexos de várias camadas.
O OpenTelemetry depende de vários componentes e processos para tornar a coleta de dados bem-sucedida, incluindo:
Uma API é um conjunto de regras ou protocolos que possibilita que aplicativos de software se comuniquem entre si para trocar dados, recursos e funções.
O OpenTelemetry disponibiliza APIs específicas de linguagem — para Java™, Ruby, JavaScript, Python e outras linguagens — que os desenvolvedores podem usar para instrumentar suas aplicações para coleta de dados de telemetria. As APIs do OpenTelemetry separam os aplicativos da infraestrutura de rede, dando às equipes a flexibilidade de usar qualquer endpoint que corresponda ao seu código de instrumentação.
Os SDKs do OpenTelemetry possibilitam que os engenheiros configurem e customizem o comportamento da API. Os SDKs formam a ponte entre APIs e coletores e possibilitam conectar a instrumentação manual para bibliotecas comuns à instrumentação manual de aplicativos.
A OTel oferece SDKs para uma variedade de linguagens de programação, para que os desenvolvedores possam usar APIs de OTel para gerar e exportar dados de telemetria específicos para a linguagem e o backend escolhidos. Os SDKs OTel também oferecem suporte à instrumentação personalizada para frameworks internos ainda não cobertos pela comunidade do OpenTelemetry.
Um coletor é um agente que coleta dados de telemetria de aplicações instrumentadas com OpenTelemetry. Composto por receptores, processadores, agregados e exportadores, o coletor atua como um intermediário independente de fornecedor, recebendo dados de aplicações e encaminhando-os para plataformas de observabilidade ou outros destinos para análise.
O coletor do OpenTelemetry suporta pacotes contrib que possibilitam ingestão de dados em vários formatos, incluindo OpenTelemetry Protocol (OTLP), Prometheus e Jaeger, e exportá-los para vários back-ends, às vezes simultaneamente (para ter redundância). Os pacotes contrib são extensões de terceiros que disponibilizam instrumentação às equipes de desenvolvimento, samplers, propagadores e detectores de recursos em um formato de submódulo.
Os coletores também podem processar e filtrar dados de telemetria antes de exportá-los para priorizar a entrega dos dados mais vitais e acelerar os processos de solução de problemas e depuração.
Os exportadores fazem parte do coletor e são responsáveis por enviar dados de telemetria da aplicação para um ou mais back-ends de observabilidade especificados. Enquanto os coletores gerenciam o fluxo geral de dados, os exportadores priorizam a transmissão de dados para o seu destino.
Os exportadores de dados do OpenTelemetry desacoplam a instrumentação das configurações de back-end e convertem os dados no formato apropriado para cada plataforma de observabilidade (convertendo os rastros para o protocolo Zipkin, por exemplo). Essa dinâmica possibilita que o coletor envie os mesmos dados de telemetria para vários back-ends, facilitando a alteração dos destinos sem alterar a lógica de instrumentação do código.
A instrumentação automática oferece bibliotecas e frameworks prontas que possibilitam que os aplicativos gerem automaticamente dados de telemetria com o mínimo ou no-code alterações de código. Esse processo simplifica a instrumentação para os desenvolvedores, reduzindo (e às vezes eliminando) as tarefas manuais de codificação.
No entanto, a autoinstrumentação pode oferecer menos controle sobre tipos específicos de coleta de dados em comparação com a instrumentação manual. A amplitude da instrumentação automática também pode variar de acordo com os tempos de execução da linguagem, os ambientes de computação e os níveis de suporte da comunidade para frameworks de observabilidade.
O OpenTelemetry funciona combinando APIs, SDKs, coletores e processos de instrumentação automática para extrair dados e enviá-los ao sistema de destino.
Primeiro, a equipe de DevOps instrumentaliza o código da aplicação com APIs OTel, especificando quais métricas, traços e logs coletar e como coletá-los. O coletor do SDK do OTel reúne os dados e os prepara para processamento e exportação e, em seguida, cria amostragens, filtra e correlaciona os dados com dependências e outras fontes de dados.
Quando os dados processados são formatados corretamente, o SDK os agrupa em lotes baseados em tempo (onde passam por mais filtragem, se necessário) e os envia para o sistema de back-end designado.
O principal objetivo da OpenTelemetry é coletar e exportar dados de telemetria e aprimorar a observabilidade, disponibilizando às organizações uma ferramenta que facilita a neutralidade do fornecedor e a integração de plataformas e ferramentas. Ele ajuda as equipes de DevOps e os engenheiros de confiabilidade de sites (SREs) a gerenciar e depurar aplicações e sistemas, para poderem tomar decisões mais bem fundamentadas e permanecerem ágeis à medida que as necessidades dos negócios mudam.
Os benefícios do OTel são:
1 "Elastic contributes its continuous profiling agent to OpenTelemetry", OpenTelemetry.io, 7 de julho de 2024