Introdução
A transmissão grava uma live prática sobre Observabilidade usando OpenTelemetry, com foco em injeção de dependências, instrumentação em .NET com PostgreSQL e Redis, e demonstrações com Jaeger, Zipkin e Grafana. O conteúdo mostra como construir aplicações com DI, coletar traces distribuídos e ver o resultado em dashboards, em várias linguagens (NET, Node e Java). O vídeo também discute a evolução do .NET, preconceitos históricos e o uso de padrões como fluent interfaces para configurar traços.
Resumo
- O vídeo começa revisitando a importância do OpenTelemetry e mostra uma demonstração prática de injeção de dependências (DI) em uma aplicação .NET que usa PostgreSQL (My Sequel/Postgres) e Redis. A demonstração enfatiza a instrumentação com OpenTelemetry para EF Core, chamadas HTTP e interações com Redis, tudo encapsulado através de uma builder fluente que facilita a configuração de traços (spans/activities).
- Em seguida, a equipe configura um ambiente de observabilidade com Docker Compose, incluindo Jaeger (porta 4317 para GRPC e 4318 para HTTP), Postgres e Redis, para evitar dependências pesadas de backend. Eles destacam que o Jaeger funciona como collector do OpenTelemetry e que o usuário pode escolher diferentes exporters (Grafana OTEL exporter, Jaeger, Zipkin) conforme o ambiente.
- O conteúdo mergulha na prática de instrumentação: injeção de dependências para os repositórios, uso de Redis como contador atômico com Redis ConnectionMultiplexer em singleton (segurança de thread com locks/using), e a instrumentação de componentes com o OpenTelemetry para coletar estatísticas, logs e métricas de forma integrada. A discussão também aborda a nomenclatura entre .NET (Activity) e outras plataformas (Span), destacando a consistência de conceito entre os runtimes.
- Além do .NET, o vídeo apresenta demonstrações em Node e Java: Node utiliza endpoints com uma API de “Bacon IP” para mostrar telemetria via OpenTelemetry Java Agent via Grafana/Collector, enquanto a parte Java usa o camel/open telemetry starter para demonstrar end-to-end tracing entre serviços. O objetivo é mostrar que a observabilidade funciona de forma cross-language, com traces agregados no Jaeger, reforçando a ideia de observabilidade distribuída.
- No fechamento, os apresentadores comparam os resultados entre as linguagens, comentando que o .NET aparece com traces organizados e, em alguns cenários, com métricas de desempenho competitivas frente a Node e Java, desmitificando preconceitos históricos sobre a plataforma. A conclusão reforça a importância de uma abordagem unificada de telemetria e dos padrões de instrumentação para equipes de desenvolvimento.
Opinião e Análise
- O apresentador valoriza o progresso rápido do .NET, destacando que a linguagem evoluiu em performance e expressividade, especialmente na web e na gestão de dependências.
- Ele comenta que ainda existe preconceito contra o .NET, mesmo diante de melhorias significativas, e usa a demonstração para argumentar a favor da maturidade da plataforma.
- Também observa que o ecossistema OpenTelemetry facilita a instrumentação multi-linguagem, tornando possível observar aplicações em .NET, Node e Java com um único fluxo de dados e com diferentes exporters (Jaeger, Zipkin, Grafana/OTLP).
Insights e Pontos Fortes
- Demonstração prática de DI integrada com OpenTelemetry em .NET, incluindo INJEÇÃO de dependências para repositórios e instrumentação de EF Core.
- Arquitetura com Docker Compose para Jaeger, Redis e Postgres facilita reprodução, testes e aprendizado de observabilidade distribuída.
- Uso de Redis como contador atômico com ConnectionMultiplexer singleton, com comentário sobre a segurança de concorrência e organização de recursos.
- Abordagem multi-linguagem (.NET, Node, Java) que ilustra traços distribuídos entre serviços e o papel do Jaeger como observability backend, além de referências a diferentes exporters.
- Ponto de aprendizado sobre nomenclatura (Activity vs Span) e padrões de design ( fluent interface / builder) aplicados à configuração de traços, fortalecendo práticas de código legível e extensível.