A observabilidade é fundamental ao executar aplicações nativas da nuvem, cuja funcionalidade resulta da interação entre um grande número de microsserviços executados em vários locais. A natureza fracamente acoplada das aplicações de microsserviços pode fazer com que cada microsserviço relate suas atividades de maneira própria. Sem uma ferramenta que reúna e correlacione esses dados de telemetria, é extremamente difícil — se não impossível — acompanhar o processamento de uma solicitação do início ao fim, o que é essencial para a solução de problemas.
Ao buscar uma ferramenta de observabilidade multifuncional, a equipe responsável pelo projeto NGINX Modern Apps Reference Architecture (MARA) escolheu o OpenTelemetry. Como nossa equipe de OSS escolheu esse projeto emergente, queremos nos aprofundar no assunto. Na GlueCon 2022, conversei com Granville Schmidt, arquiteto do Gabinete do CTO da F5, sobre por que estamos entusiasmados com o estado atual e as futuras funcionalidades do OpenTelemetry. Você pode assistir à nossa conversa abaixo e, neste blog, saber mais sobre por que o OpenTelemetry é um recurso tão valioso para o ecossistema de aplicações nativas da nuvem.
OpenTelemetry impulsiona a Observabilidade 2.0
Anunciado pela primeira vez na KubeCon 2019, em Barcelona, o OpenTelemetry atraiu um grupo entusiasmado de colaboradores. É o segundo projeto mais popular da Cloud Native Computing Foundation (CNCF) em número de contribuições e, nos últimos seis meses, o ritmo de contribuições foi maior do que nunca. Esse grande número de colaboradores mostra que o OpenTelemetry amadureceu e está começando a transpor o abismo entre os primeiros adeptos (que estão dispostos a se antecipar às tendências) e os pragmáticos (que buscam produtos maduros).
O OpenTelemetry é focado em dados — especificamente, nos dados e no fluxo de dados (telemetria) necessários para compreender melhor, solucionar problemas e aprimorar nossas aplicações. Os dados só são úteis se puderem ser agregados, analisados e visualizados em escala. Embora o OpenTelemetry não forneça orientações sobre como visualizar os dados, ele nos permite deixar de nos preocupar com quais dados podemos obter e, em vez disso, focar no que podemos fazer com eles.
O OpenTelemetry também permite uma correlação natural entre essas fontes de dados, em vez de exigir que nós mesmos tentemos correlacioná-las. A capacidade do OpenTelemetry de correlacionar eventos entre aplicações está nos conduzindo à Observabilidade 2.0 – um novo parâmetro de referência para medir a atividade das aplicações na nuvem. Os dados já vêm correlacionados, o que muda a forma como enxergamos o ambiente das nossas aplicações. Não estamos mais limitados a apenas saber se a aplicação está em execução ou não; agora podemos entender o caminho percorrido por qualquer solicitação em nossas aplicações.
Dois importantes projetos de código aberto precederam o OpenTelemetry: OpenTracing (OT) e OpenCensus (OC). Ambos assumiram o desafio de padronizar o formato dos dados de rastreamento para que pudéssemos obter as informações necessárias e entender como elas afetavam nossas aplicações modernas. Embora os projetos tivessem semelhanças, eles competiam por recursos, e muitas vezes as empresas precisavam escolher apenas um deles. Em março de 2019, os dois projetos anunciaram sua fusão para formar o OpenTelemetry, com o objetivo de unificar a forma como os dados de rastreamento são gerados e formatados. O projeto OpenTelemetry também está definindo padrões para a coleta de outras classes de dados de observabilidade (métricas e logs) por meio dos mesmos canais de telemetria usados para rastreamentos, proporcionando maior integração e clareza.
Agora, vamos analisar dois aspectos funcionais interessantes do OpenTelemetry: rastreamento distribuído e inteligência de aplicações.
Por que o rastreamento distribuído é necessário nas arquiteturas de aplicações modernas
Embora o rastreamento distribuído já exista há anos, muitas mudanças ocorridas na última década aumentaram a necessidade de usá-lo. Com o framework Cynefin, podemos destacar algumas das mudanças e dos desafios que enfrentamos atualmente nas aplicações modernas:

O framework Cynefin ilustra como podemos mudar nossas práticas à medida que avançamos do simples para o complexo. O desafio é que esse avanço ocorre por dois caminhos distintos, cada um com suas próprias características, e tentar pegar um atalho diretamente do simples para o complexo muitas vezes gera desordem e um progresso incompleto.
Vamos identificar quais elementos formam os caminhos em nossa jornada rumo a aplicações modernas e nativas da nuvem. Em nosso primeiro caminho (o eixo Y no diagrama Cynefin), temos aplicações modernas, que geralmente adotam arquiteturas de microsserviços, nas quais cada aplicação desempenha uma função específica. No segundo caminho (o eixo X), nosso ambiente complicado é efêmero, pois as instâncias de microsserviços são iniciadas e encerradas de acordo com a demanda e transferidas para diferentes hosts em resposta a problemas de rede.
Também precisamos considerar o surgimento e o enorme crescimento de ambientes de nuvem como Amazon Web Services (AWS), Microsoft Azure e Google Cloud Platform (GCP). Uma vantagem dessas nuvens é a resposta elástica — expandir ou reduzir os recursos para acompanhar o nível atual de demanda. Com o impacto adicional da orquestração de contêineres (geralmente usando Kubernetes), começamos a observar um comportamento caótico à medida que a quantidade e a localização dos recursos mudam ao longo do tempo. (Mesmo essa visão relativamente limitada é caótica, e elementos como funções sem servidor podem torná-la ainda mais.)
Em uma arquitetura moderna, com muitos componentes distintos produzindo a telemetria necessária para monitorar e manter nossos aplicativos, o volume de dados é enorme e complexo. Os problemas podem não se repetir de forma consistente nem ser fáceis de reproduzir, pois não temos controle total sobre a infraestrutura e as vias de comunicação. Precisamos de uma tecnologia que nos permita acompanhar todas as atividades e os elementos relacionados, para que possamos compreender e analisar nossos ambientes em constante mudança.
É aí que entra o OpenTelemetry.
O futuro do rastreamento distribuído com o OpenTelemetry
O rastreamento distribuído está provocando grandes mudanças no setor, especialmente na forma como as solicitações geram uma visão interna do desempenho por meio de métricas. Com o rastreamento distribuído, podemos acompanhar novos tipos de métricas, principalmente as relacionadas ao número de solicitações por unidade de tempo, ao número de erros por unidade de tempo e ao tempo que uma solicitação agregada leva durante essa unidade de tempo.
As métricas já existem há algum tempo – elas são fáceis de gerenciar e armazenar, podem ser agregadas com facilidade e são adequadas à análise matemática. No OpenTelemetry, todos os aplicativos que geram métricas podem enviá-las a um ponto de coleta comum por meio de uma camada de telemetria (transferência), o que ajuda a alinhar os dados dos serviços fracamente acoplados que os geram. Isso inclui o alinhamento com a infraestrutura subjacente. Em resumo, com o OpenTelemetry, fica mais fácil coletar e enviar métricas.
O OpenTelemetry também pode ajudar a resolver o problema de desvio e defasagem de carimbos de data e hora, que dificulta a correlação de eventos. O OpenTelemetry atribui a cada solicitação um TraceId, mas os dados ainda podem ser afetados por desvios e defasagens, que costumam ocorrer em arquiteturas nativas da nuvem. Desvios e defasagens podem resultar de caminhos de geração de relatórios com durações variadas ou da falta de uma sincronização precisa entre os relógios dos diversos hosts. Ao rastrear a comunicação entre os componentes durante o processamento do tráfego, o rastreamento distribuído permite que o OpenTelemetry meça spans individuais — as unidades de trabalho e os componentes básicos de um rastreamento — sem exigir uma instrumentação aprofundada do aplicativo associado.
A combinação desses três sinais (categorias de telemetria) nos permite corrigir problemas e restaurar a qualidade de produção dos nossos aplicativos:
- Métricas – “Há algum problema?”
- Rastreamentos – “Onde está o problema?”
- Logs – “Qual é o problema?”
É aqui que voltamos à Observabilidade 2.0. A capacidade de obter traces e ver imediatamente quais métricas correspondem a cada trace nos dá muito poder. Por exemplo, quando as métricas indicam um problema, o rastreamento distribuído permite voltar até a solicitação específica que causou o problema inicial e acompanhar o progresso em cada etapa do processamento da solicitação. Como nosso trace é composto pelos spans na ordem em que ocorrem, podemos acompanhar a solicitação em cada etapa de sua jornada. Entender o que aconteceu e em que ordem – desde o evento inicial até o problema indicado e, por fim, o resultado final – nos permite identificar exatamente “onde” devemos concentrar nossa atenção em nossos aplicativos.
Por mais simples que possa parecer, o rastreamento distribuído do OpenTelemetry pode nos proporcionar uma excelente compreensão da experiência dos nossos usuários, servindo como um indicador do sucesso das solicitações e do tempo de execução. Como usuário, eu me importo com a minha solicitação. Como engenheiro de confiabilidade de sites (SRE), eu me importo com as solicitações agregadas. O OpenTelemetry me oferece ambos, além da capacidade de partir dos dados agregados e chegar aos detalhes, pois foi projetado para disponibilizar todos os dados necessários em todas as aplicações.
Inteligência de aplicações com IA e ML
Esse novo fluxo de dados do OpenTelemetry também nos permite adaptar e automatizar nossas respostas de desenvolvimento e operações. Com todos esses dados acumulados, podemos tornar nossa aplicação mais inteligente. Atualmente, a F5 está empenhada em ajudar nossos clientes em sua jornada para desenvolver e implantar o que chamamos de “aplicações adaptativas”. As aplicações adaptativas são exatamente o que o nome sugere: aplicações que ajustam seu comportamento de forma automática e inteligente em resposta a mudanças no ambiente.
É por isso que você está vendo muito mais inteligência artificial (IA) e aprendizado de máquina (ML) em diversas soluções. Mas não é apenas porque esses termos estão em alta – a IA e o ML são úteis porque agora temos dados suficientes para chegar a conclusões precisas sobre causalidade e elaborar respostas adequadas.
Ao tornar os dados de telemetria acessíveis e padronizados, o OpenTelemetry facilita muito a jornada rumo a aplicações adaptativas. À medida que diferentes tipos de produtos começam a gerar métricas semelhantes e passam a utilizar as convenções semânticas estabelecidas no OpenTelemetry, fica mais fácil correlacionar suas ações durante o processamento de solicitações e fornecer essas informações a algoritmos de ML e AI, permitindo que as aplicações e a infraestrutura se adaptem dinamicamente.
Quando você entende a ciência de dados por trás de tudo isso e garante que seus dados de telemetria estejam relacionados à sua IA e ao seu aprendizado de máquina, é aí que a natureza orientada por dados dos aplicativos adaptativos pode evoluir e se destacar.
Resumo
A codificação da telemetria traz benefícios evidentes tanto para os usuários do OpenTelemetry quanto para as aplicações que o utilizam como canal de telemetria. Os dados podem ser coletados de várias fontes e encaminhados para quaisquer ferramentas compatíveis de agregação e análise. Além disso, o OpenTelemetry Collector elimina a necessidade de os fornecedores implementarem seus próprios coletores. Assim, eles podem se concentrar em aprimorar o código para realizar análises relevantes e tomar decisões inteligentes, além de criar novas ferramentas que ajudem a compreender este novo mundo complexo e caótico. Na verdade, o OpenTelemetry Collector — impulsionado pela inovação do código aberto — tem uma enorme capacidade de trabalhar com praticamente todos os formatos existentes, ao mesmo tempo que conduz a tecnologia rumo ao futuro.
Ao se concentrar nas principais classes de dados necessárias para compreendermos nossas aplicações, o OpenTelemetry possibilitou que elas fornecessem insights mais aprofundados tanto sobre o desempenho quanto sobre os problemas do complexo mundo das aplicações modernas. Ao correlacionar nossos dados e alinhá-los a convenções semânticas e padrões, o OpenTelemetry torna mais acessível a jornada rumo às aplicações modernas. E, à medida que o projeto continua amadurecendo e sua adoção segue crescendo, o OpenTelemetry se consolida como a abordagem ideal para aprofundarmos nossa compreensão e aplicarmos técnicas de IA e ML a fim de tornar essa complexidade compreensível.
Para saber mais sobre como os engenheiros de software de código aberto da NGINX estão usando o OpenTelemetry, experimente a Arquitetura de referência para aplicações modernas e o aplicativo de exemplo (Bank of Sirius).
Posts relacionados
Sobre o autor
Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.