Conceitos OpenTelemetry
Tags: observability, opentelemetry, monitoring
Published: 2023-09-15 11:08:04

Em 2019, houve a fusão entre dois projetos, [OpenCensus](https://opencensus.io/) e [OpenTracing](https://opentracing.io/) que resultou no OpenTelemetry. Os dois projetos queriam resolver um problema comum, definir um padrão para instrumentação, coleta e envio de dados de telemetria para um backend de observabilidade.

[OpenTracing](https://opentracing.io/) é composto por uma especificação de APIs, permitindo enviar dados de telemetria para um vendor de observabilidade. 
[OpenCensus](https://opencensus.io/) incluía um conjunto de bibliotecas suportada por diversas linguagens para instrumentar código e enviar dados para o backend de observabilidade.

A combinação dos pontos fortes de cada projeto permite que os usuários resolvam os desafios da observabilidade utilizando um padrão único de bibliotecas, APIs, coleta, processamento e envio de dados de telemetria agnóstico de vendors de observabilidade.

## O que é OpenTelemetry?

É um framework de observabilidade que sustenta um conjunto de APIs, SDKs, agentes e outros elementos que permite gerar, processar e transmitir dados de telemetria de forma unificada e agnóstico ao provedor de observabilidade.

## Conceitos do OpenTelemetry

Antes de começar a usar o OpenTelemetry, é importante entender quais são os principais componentes e terminologias.

Isso nos ajuda a compreender como funciona o OpenTelemetry.

> Existe outros componentes e terminologias que não foram citadas aqui, consulte a [documentação](https://opentelemetry.io/docs/concepts/) oficial do projeto.

O projeto é composto por:

- [Signals](https://opentelemetry.io/docs/concepts/signals/) (Sinais)
- [Instrumentation](https://opentelemetry.io/docs/concepts/instrumentation/) (Instrumentação)
- [Semantic Conventions](https://opentelemetry.io/docs/concepts/semantic-conventions/) (Convenção Semântica)
- [Sampling](https://opentelemetry.io/docs/concepts/sampling/) (Amostragem)

### Signals

[Métrica](https://opentelemetry.io/docs/concepts/signals/metrics/), [log](https://opentelemetry.io/docs/concepts/signals/logs/), [trace](https://opentelemetry.io/docs/concepts/signals/traces/) e [bagagem](https://opentelemetry.io/docs/concepts/signals/baggage/) são exemplos de sinais ou tipos de telemetria que formam a estrutura em torno do OpenTelemetry. Cada sinal representa um conjunto lógico e autônomo.

Esses sinais são importantes para a observabilidade, troubleshooting e monitoramento. Eles auxiliam os engenheiros a entender o que está acontecendo em um sistema, rastrear problemas e tomar decisões mais assertivas.

### Instrumentation

Para tornar um sistema observável, é necessário que ele seja instrumentado. É adicionado um código ao sistema para coletar dados de telemetria. 

Algumas linguagens suportam a [autoinstrumentação](https://opentelemetry.io/docs/concepts/instrumentation/automatic/), que provê uma forma de instrumentar seu aplicativo sem alterar o código-fonte do sistema.

Existem outros mecanismos para instrumentar um sistema, [instrumentação manual](https://opentelemetry.io/docs/concepts/instrumentation/manual/) e utilizando [bibliotecas](https://opentelemetry.io/docs/concepts/instrumentation/libraries/) fornecidas pelo projeto OpenTelemtry.

### Semantic Conventions

A convenção semântica é composto por vários documentos que especificam nomenclaturas comuns para os diferentes tipos de dados. 

Por exemplo, se o servidor **A** possui uma métrica `http.server.duration` e o servidor **B** uma métrica `http.server.request_duration`, como podemos comparar a duração total entre os dois serviços se as métricas têm nomes diferentes? 

A imagem mostra algumas especificações de atributos para Spans de cliente/servidor HTTP.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sv9onuo6dus2ngs4228j.png)

### Sampling

Através do rastreamento distribuído, podemos observar a latência das requisições que passa entre os serviços. 

No entanto, se a maioria das requisições tem um status bem-sucedido com latência num período previsível, precisamos de todos esses dados? 
Nem sempre é necessário um grande volume de dados para encontrar os insights corretos. Você só precisa da amostragem correta desses dados.

A ideia por trás da amostragem é controlar a quantidade de dados que você envia para o backend de observabilidade, muitas vezes esses provedores de observabilidade cobram por dados ingestados.

Os principais objetivos da amostragem são: gerenciamento de custos, foco no rastreamento relevantes e filtrar ruídos.

## Conclusão

Exploramos um pouco da história do OpenTelemetry e podemos entender a origem do projeto. Compreender os conceitos do OpenTelemetry nos auxiliará a superar os desafios para desenvolver observabilidade de alta qualidade.

Os sinais são compostos por trace, métricas, logs e baggage, os quais geram telemetria. Conhecer as convenções semânticas e a propagação de contexto ajuda na correlação dos eventos entre os sinais, através da amostragem podemos gerenciar os dados que serão enviados para o backend de observabilidade mantendo o foco nos dados relevantes para o sistema.


## Referências:
- [What is OpenTelemetry?](https://opentelemetry.io/docs/what-is-opentelemetry/)
- [OpenTelemtry Concepts](https://opentelemetry.io/docs/concepts/)
- https://opentelemetry.io/docs/concepts/
- [Cloud-Native Observability with OpenTelemetry](https://www.amazon.com/Cloud-Native-Observability-OpenTelemetry-visibility-combining-ebook/dp/B09TTCQBM7)