Monitoramento e Observabilidade estão intimamente relacionados, mas não são sinônimos. De forma resumida:
Em um sistema moderno baseado em microsserviços e arquitetura distribuída, somente monitoramento básico não é suficiente. A observabilidade, por incorporar contexto e correlação (por exemplo, vinculando traces de uma requisição distribuída aos logs gerados), permite investigar causa raiz de incidentes complexos em várias partes do sistema. Em resumo: Monitoramento informa o que está acontecendo; Observabilidade ajuda a entender o porquê.
| Aspecto | Monitoramento | Observabilidade |
|---|---|---|
| Abordagem | Reativa – detecta problemas já ocorridos | Proativa – permite investigar e prevenir problemas |
| Dados principais | Métricas de alto nível, eventos e alguns logs | Logs detalhados, métricas granularizadas e traces distribuídos |
| Escopo | Visão externa: saúde geral do sistema | Visão interna: estado do sistema inferido de todos os sinais |
| Perguntas respondidas | "O que" e "quando" algo deu errado | "Por que" e "como" ocorreu o problema |
| Exemplos de ferramentas | Grafana + Prometheus (métricas), Zabbix, CloudWatch | Stacks de observabilidade: OpenTelemetry, Jaeger (traces), Elastic (logs) etc. |
Em serviços em nuvem modernos, a observabilidade é fundamental. Sistemas distribuídos geram enormes volumes de telemetria; técnicas de monitoramento em tempo real precisam ser complementadas com práticas de observabilidade para fornecer insights acionáveis. A seguir, introduziremos o OpenTelemetry – um padrão aberto para telemetria – e demonstraremos na prática como instrumentar aplicações e montar um painel unificado de observabilidade.
OpenTelemetry (OTel) é um projeto open-source da CNCF que fornece um framework unificado para instrumentação de aplicações, padronizando a geração, coleta e exportação de dados de telemetria (traces, métricas e logs). É agnóstico a fornecedores, ou seja, funciona com diversos backends e ferramentas de observabilidade – de soluções abertas como Jaeger (tracing) e Prometheus (métricas) a plataformas comerciais. Importante notar que o OpenTelemetry não é em si um backend de observabilidade; ele se concentra na instrumentação e padronização, deixando o armazenamento e visualização dos dados para ferramentas especializadas (por exemplo, bancos de dados de métrica, sistemas de log ou UIs de trace).
Componentes do OpenTelemetry:
Por que usar OpenTelemetry? Ele elimina o acoplamento com um único vendor e evita instrumentar código múltiplas vezes. Em vez de usar biblioteca X para métricas e Y para tracing, você usa a API OpenTelemetry e escolhe na configuração para onde enviar os dados. Isso traz padronização e facilita a criação de um stack de observabilidade consistente em ambientes heterogêneos.
Exemplo: Podemos instrumentar tanto um serviço Python quanto um serviço Java com OpenTelemetry, e exportar as métricas de ambos para o Prometheus e traces para o mesmo sistema de tracing – tudo de forma uniforme. A seguir, veremos exatamente isso em ação.
Vamos construir uma aplicação e monitorar ela!
graph TD
C#_WebAPI -->|HTTP| Java_Service
C#_WebAPI -->|OTLP| Collector
Java_Service -->|OTLP| Collector
Collector -->|DuckDB| Database