Observabilidade e Telemetria
Observabilidade, especialmente em arquiteturas baseadas em microsserviços, é sem dúvidas um requisito indispensável. Observabilidade consiste em entender o estado interno de um sistema através da instrumentação dos dados de telemetria que este gera. Com isso, a realização de diagnósticos e a resolução de problemas é feita de forma mais rápida e assertiva, pois através destes dados conseguimos ter um entendimento mais profundo sobre o comportamento das aplicações, utilização de recursos e, eventualmente, gargalos que podem estar impactando fluxos de trabalhos importantes.
Os dados de telemetria são constituídos de 3 pilares: Logs, métricas e tracing.
Logs: Eventos em forma de texto emitidos pela aplicação em um determinado momento de maneira informativa ou para indicar erros a fim de facilitar um troubleshooting posterior.
Métricas: Números quantitativos utilizados para monitorar a “saúde” e a utilização de recursos da aplicação, por exemplo, uso de memória, cpu, tempo médio de resposta de um determinado recurso, transações realizadas no banco de dados, etc.
Tracing: Eventos emitidos por aplicações inseridas dentro de uma transação distribuída. Extremamente útil para identificar gargalos e comportamentos inesperados em aplicações que compõem uma transação completa dentro da execução de um processo em um sistema distribuído.
Os benefícios da observabilidade vão além da identificação de erros e comportamento das aplicações. Uma vez que temos, principalmente métricas, conseguimos extrair informações extremamente valiosas para o negócio. Por exemplo, um estudo realizado na Amazon em 2006 constatou que a cada 100 ms de latência na renderização de uma página reduzia em 1% o total de vendas.
Para extrair o maior valor possível dos dados de telemetria gerados pelas nossas aplicações, é recomendável a centralização dessas informações em uma única plataforma (vendor). Com isso, conseguimos ter acesso de forma centralizada aos dados para criação de artefatos úteis, como consultas complexas, visualizações e dashboards que indiquem métricas como uso de cpu, memória, tempo médio de resposta por requisição, etc.
Entretanto, essa centralização dos dados cria um forte acoplamento com o vendor escolhido, conhecido também como Vendor lock-in, podendo gerar uma dor de cabeça na possível adoção de uma nova ferramenta, já que nos dias atuais existem centenas de opções disponíveis no mercado. Eventualmente uma nova solução pode trazer mais valor ou reduzir custos, exigindo a alteração em todas as aplicações que geram os dados de telemetria. OpenTelemetry pode facilitar nossa vida nessa questão.
OpenTelemetry
OpenTelemetry surgiu em 2019 através da junção do OpenSensus e OpenTracing, com objetivo de padronizar a extração, transformação e exportação de dados de telemetria através de um conjunto de SDKs e APIs que fossem totalmente Vendor Agnostic.
OpenTelemetry resolve o problema de Vendor Lock-in através da exportação dos dados de telemetria gerados pelas aplicações para um coletor central. Uma vez estes dados importados, é possível realizar a exportação para diversas plataformas de forma simultânea, não necessitando nenhuma modificação por parte das aplicações na integração dos dados de telemetria com os novos vendors.
Este coletor faz a ingestão dos dados através de Receivers, que recebem os dados tanto através do protocolo HTTP quanto gRPC, trabalhando no estilo pull or push based. Os dados podem ser recebidos, também, através de outros sistemas, como Jaeger, Prometheus, Zipkins, entre outros.
Uma vez os dados ingeridos pelo coletor, é possível aplicar transformações através de Processors, como por exemplo, agregar vários eventos em lote para o envio com o objetivo de diminuir a sobrecarga na etapa de exportação dos dados.
Por fim, os dados são exportados através da configuração de Exporters. Aqui, podemos exportar os dados de telemetria de forma simultânea para diversos vendors, com a possibilidade também de exportar cada dado de telemetria para um plataforma específica, sendo útil para casos onde o vendor não suporta a importação de algum dos tipos dos dados de telemetria.
Outra funcionalidade interessante do OpenTelemetry é a instrumentação automática. Através da instalação de bibliotecas, é possível automatizar diversas instrumentações, como consultas SQL executadas no banco, criação de spams para a rastreabilidade de transações distribuídas e requisições HTTP que as aplicações instrumentadas estão realizando. A instrumentação automatizada é disponibilizada para várias linguagens de programação, incluindo .NET, Python, Java e Javascript.
Conclusão
Sem dúvidas, quando o assunto é observabilidade, OpenTelemetry é uma ferramenta que não pode passar despercebida. Sua natureza Vendor Agnostic permite a desacoplação total da ingestão, processamento e exportação dos dados de telemetria gerados a partir das aplicações, criando uma flexibilidade que auxilia bastante na escolha da plataforma utilizada para o gerenciamento e consumo destes dados.