O que é observabilidade?
Antes de se aprofundar no código, vamos voltar um pouco e falar sobre observabilidade. Você precisa ter ferramentas que o ajudem a entender o estado interno de um sistema com base no que é visível externamente.
Por quê implementar a observabilidade?
Há vários motivos pelos quais a observabilidade é um aspecto crucial do desenvolvimento e melhoria de aplicativos nativos de nuvem:
- Noções básicas sobre o comportamento do sistema: A observabilidade fornece insights sobre como seu aplicativo está sendo executado e onde ocorrem gargalos ou erros.
- Depuração e solução de problemas: Quando surgem problemas, as ferramentas de observabilidade podem fornecer informações detalhadas sobre o que estava acontecendo no sistema no momento do problema.
- Aprimoramento contínuo: A observabilidade não é apenas para identificar e resolver problemas. Ela também é usada para melhoria contínua. Ao monitorar o desempenho do sistema ao longo do tempo, você pode identificar oportunidades para otimizar seu código, melhorar o desempenho do sistema e melhorar quantitativamente a experiência para seus usuários.
- Detecção proativa de problemas: Com as ferramentas de observabilidade corretas em vigor, muitas vezes você pode detectar problemas antes mesmo de seus usuários vê-los.
Implementar a observabilidade em aplicativos nativos de nuvem não é apenas uma prática recomendada, é uma necessidade para manter, otimizar e melhorar continuamente seus aplicativos. Ele capacita os desenvolvedores a fornecer aplicativos confiáveis e de alto desempenho e fornece os insights necessários para impulsionar a tomada de decisões informada.
Os três pilares da observabilidade
Há três pilares principais de observabilidade:
- Logs: Os logs fornecem registros detalhados de eventos que ocorrem em um aplicativo ou sistema. Em seu aplicativo, você pode usar a infraestrutura
Microsoft.Extensions.Logging
para registrar eventos em log. - Métricas: As métricas referem-se a medidas numéricas e contadores que fornecem insights sobre o desempenho e a integridade de um sistema. Os exemplos incluem taxas de solicitação, tempos de resposta, uso de CPU/memória e taxas de erro. Em seu aplicativo, você pode ter medidas específicas que precisa acompanhar.
- Rastreamento distribuído: Esse processo envolve o rastreamento de uma solicitação à medida que ela se propaga por todos os microsserviços no seu aplicativo nativo da nuvem. Cada serviço registra dados de rastreamento, como IDs de solicitação que permitem correlacionar eventos entre serviços. O rastreamento distribuído também é útil para depurar problemas de desempenho e erros em sistemas complexos.
Juntos, esses três pilares fornecem uma observabilidade abrangente em um sistema.
Fontes de dados para telemetria
No aplicativo nativo de nuvem da sua empresa, há várias fontes de telemetria que você pode optar por coletar:
- Logs de aplicativo: Os aplicativos geram logs que fornecem informações detalhadas sobre sua operação e erros se ocorrerem. O registro em log é uma fonte avançada de dados de telemetria.
- Bancos de dados: Os bancos de dados podem fornecer dados de telemetria sobre as consultas que processam, os tempos de execução e os erros que ocorrem.
- Respostas e solicitações HTTP: As solicitações HTTP e as respostas entre seus microsserviços fornecem dados de telemetria avançados e valiosos. Esses dados incluem os cabeçalhos da solicitação e da resposta, o conteúdo do corpo, os códigos de status e as informações de tempo.
- Desempenho no Lado do Cliente: Em aplicativos nativos de nuvem com um front-end, você pode coletar os dados de desempenho do lado do cliente. Esses dados podem incluir acessos à página, tempos de carregamento e tempos de interação com a interface do usuário.
- Métricas de infraestrutura: Se o aplicativo estiver hospedado em um ambiente de nuvem, você poderá coletar métricas de infraestrutura, como uso da CPU, uso de memória, tráfego de rede e operações de E/S de disco.
Ao coletar e analisar esses dados de telemetria, você pode obter informações valiosas sobre o desempenho e a integridade do aplicativo.
Implementar a observabilidade
Para adicionar observabilidade ao seu aplicativo nativo da nuvem, siga estas etapas:
- Adicionar registro em log.
- Habilite as métricas e defina métricas personalizadas para capturar.
- Habilite o rastreamento distribuído com o OpenTelemetry e o Zipkin.
- Instrumente seu aplicativo novamente com OpenTelemetry e adicionando telemetria ao seu código.
- Analisar dados de telemetria com o Prometheus, o Grafana ou o Application Insights.
Introdução ao OpenTelemetry
Como o OpenTelemetry ajuda a adicionar observabilidade ao seu aplicativo e por que há suporte tão profundo para ele no .NET? OpenTelemetry é uma estrutura de observabilidade de software livre. Ele fornece uma maneira padrão e independente do fornecedor de gerar dados de telemetria.
O OpenTelemetry padroniza a maneira como os dados de telemetria são coletados e transmitidos para plataformas de back-end. Ele abre brechas de visibilidade fornecendo um formato comum de instrumentação em todos os seus microsserviços. Você não precisa reinstruir o código ou instalar diferentes agentes proprietários sempre que uma plataforma de back-end for alterada.
Como é um padrão aberto, ele dá suporte a muitas outras ferramentas fora do .NET. O OpenTelemetry está configurado para usar extensões que permitem que os exportadores criem dados de telemetria para todas as diferentes ferramentas. Isso significa que você pode usar as mesmas ferramentas para monitorar microsserviços, independentemente da linguagem em que estão escritos.
O OpenTelemetry ajuda você a coletar e monitorar todos os três pilares de observabilidade: logs, métricas e rastreamentos. Você verá como realizar essas tarefas nas unidades a seguir.