OpenTelemetry é um framework de observabilidade para aplicações cloud-native agnóstico de fornecedores, com uma coleção de ferramentas para instrumentar, gerar, coletar e exportar dados de telemetria (metrics, logs e traces) que visa simplificar e a analisar o desempenho e o comportamento das suas aplicações.
Para visualização dos dados utilizaremos o Jaeger, um software open source para rastreamento de transações entre serviços distribuídos, utilizado para monitorar e fazer troubleshooting em aplicações baseados em microservices, além de analisar:
- Propagação de contexto distribuídos
- Causa raiz (de um incidente)
- Dependências de serviços
- Desempenho e latência
Neste exemplo, será configurado o OpenTelemetry no .NET 6.0 exportando dados para o Jaeger.
Pré-requisitos
- Visual Studio 2022 (.NET 6.0)
- Docker Compose com a imagem Jaeguer
- Nuget package OpenTelemetry, Jaeger, OpenTelemetry.Exporter.Jaeger, OpenTelemetry.Extensions.Hosting e OpenTelemetry.Instrumentation.AspNetCore
API
Na aplicação, comece configurando o docker compose com a imagem do Jaeger:
version: '3.4'
services:
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
- "16686:16686"
- "14268:14268"
- "9411:9411"
Onde cada porta é utilizada em uma ação específica no Jaeger:
Depois é preciso configurar o appsettings.json com os dados para coleta dos logs:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"DistributedTracing": {
"IsEnabled": true,
"Jaeger": {
"ServiceName": "Sample.OpenTelemetry.WebApi",
"Host": "localhost",
"Port": 6831
}
}
}
O próximo passo é configurar a classe Program.cs exportando a coleta de dados para o Jaeger:
A extensão AddOpenTelemetry contém o seguinte código:
Solução Completa
No final, temos a seguinte solução:
- Sample.OpenTelemetry.WebAPI: API de exemplo com operações para coleta de logs.
- Sample.OpenTelemetry.WebApi.Core: Abstrações genéricas utilizado pela API.
- Docker: Docker compose com a imagem do Jaeger
Para realizar os testes é preciso executar o comando docker compose na pasta raiz do projeto:
docker-compose up
Em seguida, execute o projeto WebApi e realize operações com os endpoints para gerar telemetria no Jaeger:
Abra o navegador e digite http://localhost:16686 para acessar a aplicação Jaeger e verificar a telemetria gerada:
Analisando traces específicos, é possível entender toda stack executada com detalhes, como é o caso do rota logs/cidades, onde é feito uma requisição para outra API.
Finalizando
Neste post, apresentei de forma simples, como é possível configurar o OpenTelemetry no .NET 6.0 com o Jaeger, utilizado principalmente em ambientes distribuídos para acompanhamento e monitoramento de transações, sendo a opção mais fácil e acessível para iniciar a coleta de comportamentos das aplicações.
Mais informações em:
Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-opentelemetry
Excelente!
Nao cosnigo fazer para um servidor que nao seja localhost, tem alguma dica?
Olá Fabio
Você pode subir a imagem do Jaeger em uma aplicação docker no Azure por exemplo, dessa forma consegue utilizar em aplicações distribuídas.