APIs de telemetria em .NET
Como você pode investigar o comportamento de um aplicativo para solução de problemas ou otimização de desempenho? Quanto mais dados você tiver sobre o que o aplicativo fez, mais fácil será diagnosticar problemas.
Imagine que você trabalha para um varejista de equipamentos para atividades ao ar livre. Suas equipes estão construindo seus microsserviços, prontos para a fase de testes. Você deseja garantir que seu aplicativo nativo da nuvem emita telemetria sobre seu comportamento para que você possa diagnosticar problemas durante testes, preparação e produção.
Nessa unidade, você aprenderá sobre telemetria e os diferentes tipos de dados que podem ser registrados com ela.
O que é telemetria?
Na engenharia, telemetria é a medição de dados e sua transmissão automática para um sistema central de monitoramento. Por exemplo, um carro de corrida pode registrar dados sobre seu desempenho e enviá-los de volta ao paddock, onde os engenheiros os analisam. Da mesma forma, uma cápsula espacial pode registrar informações sobre as condições na cápsula e enviá-las de volta ao controle da missão. Nos últimos anos, tornou-se comum registrar e analisar dados de telemetria em sistemas mais comuns. Por exemplo, o seu aquecimento central pode enviar telemetria ao fabricante para auxiliar na solução de problemas.
Se você estiver escrevendo aplicativos nativos da nuvem, a telemetria será útil quando:
- Você está desenvolvendo microsserviços e quer saber se eles estão se comportando conforme o esperado.
- Você está testando seu aplicativo e quer saber o que acontece quando ele falha no teste.
- Você está testando seu aplicativo e quer saber como está o desempenho dele.
- Você está dando suporte ao seu aplicativo em produção e deseja solucionar uma exceção ou otimizar o desempenho.
Podemos descrever um sistema que emite telemetria rica como:
- Observável: Um sistema observável é aquele que permite compreender seu comportamento de fora dele.
- Instrumentado: Um sistema instrumentado é aquele que emite todos os dados que os desenvolvedores precisam para solucionar um problema.
OpenTelemetry é uma estrutura de observabilidade e um kit de ferramentas que você pode usar em seu aplicativo para criar, processar e emitir dados de telemetria. Você pode adicioná-lo facilmente a qualquer aplicativo .NET, incluindo microsserviços em um aplicativo nativo da nuvem. Ele emite dados em formatos que ferramentas comuns de observabilidade como Jaeger e Prometheus podem usar e analisar.
Pilares de observabilidade
A natureza dos aplicativos nativos da nuvem, que consistem em microsserviços distribuídos que usam tecnologias diferentes, pode dificultar a construção de código observável e devidamente instrumentado. Todas as equipes devem integrar a observabilidade em seus microsserviços, caso contrário, você poderá descobrir que parte do seu aplicativo é difícil de monitorar e solucionar problemas.
Importante
Para garantir que todo o seu aplicativo seja observável, você deve garantir que todas as equipes de desenvolvimento considerem os três pilares da observabilidade em seus microsserviços: Registro, Métricas e Rastreamento.
Os três pilares da observabilidade são três tipos diferentes de registros que armazenam o comportamento dos componentes de software para análise posterior:
- Log: um registro de texto com carimbo de data/hora do que aconteceu durante o processamento de uma solicitação.
- Métrica: uma medida de um serviço capturado em tempo de execução. Os valores das métricas podem ser agregados em estatísticas sobre um processo, incluindo:
- Estatísticas de tempo de execução do .NET, como a memória usada ou o número de coletas de lixo ocorridas.
- Estatísticas de pacotes ASP.NET ou NuGet, como o número de solicitações concluídas, durações de solicitações ou contagens de erros.
- Estatísticas personalizadas específicas do seu aplicativo, como o número de pedidos feitos.
- Rastreamento Distribuído: um registro de todas as unidades de trabalho, geralmente chamadas de Spans, necessárias para lidar com uma solicitação individual. Em um aplicativo nativo da nuvem, muitos microsserviços e serviços de apoio podem estar envolvidos em uma única solicitação e um rastreamento distribuído mostraria todos eles enquanto colaboram para preparar a resposta.
Observação
No OpenTelemetry, quaisquer dados que não façam parte de um rastreamento distribuído ou de uma métrica são considerados um log, por exemplo, eventos.
Usando telemetria em .NET
O .NET possui tipos integrados para representar os três pilares:
- ILogger: Essa interface fornece uma interface padrão que você pode usar ao registrar eventos de qualquer código .NET.
- Metro: Você pode usar essa classe para criar um grupo de instrumentos, cada um medindo um valor associado ao desempenho ou comportamento do seu código. Por exemplo, você pode adicionar um instrumento que conte as vendas de um produto ou outro que meça o tempo que uma mensagem esperou em uma fila. O .NET também fornece muitas métricas integradas.
- Atividade: Você pode usar essa classe para registrar as informações de rastreamento. Comece criando um objeto
ActivitySource
para o seu namespace. Em seguida, chame o métodoStartActivity
para começar a gravar os dados.
Você pode usar essas classes em qualquer código .NET. Na próxima unidade você verá como o .NET Aspire facilita o uso de classes OpenTelemetry em aplicativos nativos da nuvem.