6 pontos por 0546530408 2023-08-17 | 1 comentários | Compartilhar no WhatsApp

Olá. Somos Eden e Ari, cofundadores do Odigos (https://github.com/keyval-dev/odigos). O Odigos é um projeto open source que gera rastreamentos distribuídos (distributed traces) instantaneamente para aplicações, permitindo que os usuários os utilizem com facilidade. O Odigos é compatível com ferramentas de monitoramento existentes e não exige alterações no código-fonte.

Nossa experiência com ferramentas de monitoramento antigas foi bastante frustrante. Ao monitorar sistemas distribuídos com vários microsserviços, percebemos que estávamos gastando tempo demais tentando identificar qual microsserviço era a origem do problema. Por exemplo, já passamos horas depurando uma aplicação específica por suspeita de ela estar causando latência, apenas para descobrir depois que a causa real estava em outra aplicação relacionada.

Depois disso, pesquisamos o rastreamento distribuído (distributed tracing) como a abordagem adequada para resolver esse tipo de problema. Diferentemente de métricas ou logs, que capturam dados de um momento específico em uma única aplicação, o rastreamento distribuído marca cada requisição com um ID único para que seja possível acompanhar sua propagação em um ambiente distribuído. Isso permite que os desenvolvedores entendam o contexto (context) de cada requisição e como as aplicações distribuídas se comportam.

No entanto, essa abordagem tem a desvantagem de ser difícil de implementar. Ao contrário de métricas ou logs para uma única aplicação, o rastreamento distribuído precisa ser implementado em várias aplicações. Se houver ao menos uma aplicação que não gere rastreamentos distribuídos, a propagação do contexto é interrompida e o valor desse rastreamento cai bastante.

Pela nossa experiência implementando rastreamento distribuído manualmente para várias empresas, coordenar todas as equipes de desenvolvimento para instrumentar cada aplicação e alcançar rastreamento distribuído completo é extremamente difícil. Quando a implementação era concluída, o valor era alto, pois os problemas em produção podiam ser resolvidos muito mais rápido. Porém, implementações parciais não tinham tanto valor.

Então começamos a automatizar esse processo. Já sabíamos como lidar com a maior parte dele, mas a parte mais complicada era como instrumentar automaticamente programas escritos em linguagens compiladas (como Go). Pensamos que, se conseguíssemos automatizar só essa parte, seria possível automatizar todo o processo de geração de rastreamentos distribuídos. Durante a pesquisa, percebemos que, usando eBPF (uma tecnologia que permite ao kernel Linux carregar programas externos e executá-los dentro do kernel), seria possível fazer instrumentação automática para linguagens compiladas. Essa foi a peça final do quebra-cabeça e, com isso, conseguimos desenvolver o Odigos.

O Odigos primeiro faz uma varredura em todas as aplicações em execução e, usando eBPF e OpenTelemetry, reconhece a linguagem de programação de cada aplicação e a instrumenta automaticamente de acordo com isso. Ele também implanta coletores que fazem buffering, filtragem e encaminhamento dos dados para a ferramenta de monitoramento escolhida, com auto scaling conforme o volume de tráfego. Com essa automação, os desenvolvedores podem começar a usar rastreamento distribuído em apenas alguns minutos, em vez do trabalho manual que poderia levar meses para ser implementado.

A instrumentação automática entre várias linguagens de programação não é uma tarefa simples, especialmente quando se consideram binários estáticos (por exemplo, binários gerados pelo compilador Go). Introduzimos vários mecanismos para inserir com segurança e estabilidade os cabeçalhos necessários e desenvolvemos um sistema para acompanhar funções e structs de bibliotecas open source em diferentes versões. Também desenvolvemos um sistema para gerenciamento de memória em espaço do usuário (userspace) dentro do eBPF. Como resultado, o Odigos se tornou a única solução capaz de gerar automaticamente rastreamentos distribuídos para linguagens compiladas como Go e Rust. Enquanto outras soluções exigem que o usuário seja especialista em OpenTelemetry ou eBPF, a nossa não requer conhecimento prévio em tecnologias de observabilidade (observability).

Nossa solução pode ser instalada em um cluster Kubernetes com um único comando. Depois de instalada, ela detecta a linguagem de programação de todas as aplicações em execução e aplica o instrumentador adequado. Para linguagens JIT (Java e .NET) ou interpretadas (JavaScript e Python), implanta instrumentadores do OpenTelemetry. Para linguagens compiladas (Go, Rust, C), implanta instrumentadores baseados em eBPF. Tudo isso é abstraído para o usuário, então basta: (1) selecionar parte ou a totalidade das aplicações-alvo e (2) escolher o backend para onde enviar os dados de monitoramento.

Em maio de 2022, lançamos nosso primeiro projeto open source: um instrumentador automático para aplicações Go baseado em eBPF. Depois disso, doamos o projeto para a comunidade OpenTelemetry, e ele atualmente é desenvolvido como parte do Go Automatic Instrumentation SIG.

Acreditamos fortemente em padrões abertos, por isso todos os instrumentadores e coletores usados pelo Odigos são baseados em projetos open source desenvolvidos pela comunidade OpenTelemetry. Isso nos permite evitar dependência de fornecedor específico.

Atualmente, estamos focados em desenvolver o projeto open source. Ainda não há preços definidos nem funcionalidades pagas, mas no futuro também planejamos oferecer uma versão gerenciada do Odigos com recursos enterprise.

Mais informações abaixo.

Queremos muito ouvir e compartilhar as experiências e histórias de vocês sobre rastreamento e monitoramento de aplicações distribuídas!

1 comentários

 
0546530408 2023-08-17

Olá, é a primeira vez que publico aqui. Gostaríamos de receber feedback da comunidade. Sintam-se à vontade para entrar no canal do Slack.
https://join.slack.com/t/odigos/…
Obrigado!