O blog da AWS
NET com Amazon CloudWatch e AWS X-Ray: Parte 3 – Rastreamento distribuído
Visão geral da solução
Um sistema ou plataforma em um cenário de produção real pode ter dezenas, centenas ou até milhares de microsserviços, mas para fins de demonstração, estou usando uma aplicação de exemplo menor. É uma carga de trabalho .NET conteinerizada em execução no Amazon Elastic Container Service (Amazon ECS) com o AWS Fargate (Figura 1). Ele compreende três microsserviços .NET: uma API Web do ASP.NET Core, dois Serviços de Trabalho, além dos recursos de nuvem que eles usam. Devido à natureza distribuída desse tipo de sistema distribuído, em um cenário de falha, pode ser desafiador descobrir onde concentrar sua investigação ou determinar a relação e a dependência das solicitações com falha.
Para obter informações detalhadas sobre uma carga de trabalho .NET conteinerizada como esta ou mais complexa, você pode instrumentar cada aplicação para coletar e registrar rastreamentos distribuídos. Por exemplo, o primeiro aplicativo que recebe uma solicitação do cliente deve gerar o ID de rastreamento do AWS X-Ray. Neste exemplo, a API da Web gera o ID de rastreamento, adiciona metadados e propaga esse mesmo ID de rastreamento por meio de outros dois microsserviços através de Tópicos do SNS. Cada um deles também adicionará seus próprios metadados e passará o mesmo ID de rastreamento para os componentes de nuvem com os quais interagem. Como eles estão usando o AWS SDK para . NET para se comunicar com esses componentes de nuvem, o AWS SDK adiciona automaticamente o mesmo ID de rastreamento a metadados e logs. Como resultado, o CloudWatch e o X-Ray podem usar esses rastreamentos para agregar todos os eventos relacionados ao ID de rastreamento e gerar exibições, mapas e cronogramas enriquecidos da transação para ajudar a acelerar a solução de problemas e a visualização dos relacionamentos, dependências e integridade do aplicativo.
Figura 1: Solução de microsserviço .NET
Pré-requisitos
Para este exemplo, você pode usar o repositório do GitHub “microservices-dotnet-aws-cdk“, que contém o código de exemplo para todos os três microsserviços. Ele usa o AWS Cloud Development Kit (CDK) para definir e provisionar a infraestrutura como código usando a linguagem de programação C#.
Os seguintes pré-requisitos são necessários em seu sistema para testar e implantar esta solução:
- Kit de desenvolvimento de software (SDK) do .NET 6.0
- Git CLI
- Interface de linha de comando da AWS (AWS CLI)
- AWS CDK v2
- Docker
- Código do Visual Studio (ou seu IDE preferido)
- Credenciais da AWS para sua conta da AWS configurada localmente
- Git
Você pode clonar o repositório a partir da linha de comando com o seguinte comando:
Abra a solução em um IDE, como o Visual Studio Code, para explorar a implementação.
Implementar o rastreamento com o AWS X-Ray em uma aplicação .NET
Adicionei o pacote NuGet AWSXRayRecorder aos projetos .NET para implementar o rastreamento distribuído com o AWS X-Ray. No arquivo Program.cs para cada projeto, inicializei e registrei o AWS X-Ray. O processo de inicialização é ligeiramente diferente dependendo do tipo de projeto. Esses exemplos de código ilustram como inicializar o AWS X-Ray para a API da Web e projetos do Worker Service.
Este exemplo de código demonstra o registro e a inicialização de aplicativos Web:
Este exemplo demonstra o registro para Worker Services:
Provisionar o daemon do AWS X-Ray
Para transmitir todos os rastreamentos para a API do AWS X-Ray, você precisa implantar o daemon AWS X-Ray, um aplicativo de software que escuta o tráfego na porta UDP 2000, coleta dados brutos do segmento e os retransmite para o serviço AWS X-Ray. O daemon deve estar sendo executado continuamente para que os dados enviados pelos componentes do aplicativo possam chegar ao serviço de X-Ray. A instalação pode variar dependendo dos serviços da AWS que você está usando para sua aplicação .NET.
- Para cargas de trabalho do Amazon Elastic Compute Cloud (Amazon EC2 ), você pode instalá-lo em sua instância do Amazon EC2.
- Para funções do AWS Lambda com rastreamento ativo habilitado, ele executará o daemon X-Ray automaticamente sempre que uma função for inicializada.
- Os aplicativos do AWS Elastic Beanstalk com a opção de configuração “XRayEnabled” definida como “True” executarão automaticamente o daemon X-Ray em cada instância do ambiente.
- Para o Amazon Elastic Kubernetes Service (EKS) ou o Amazon Elastic Container Service (Amazon ECS), uma prática recomendada é implementar um contêiner sidecar executando o daemon X-Ray para descarregar o processamento do contêiner principal do aplicativo.
No exemplo de código a seguir, estou provisionando o sidecar do daemon X-Ray usando C# com AWS CDK. O AWS CDK permite que você crie aplicações na nuvem como código, com o benefício do poder expressivo das linguagens de programação, como o C#, que estou usando aqui. O daemon é executado junto com os contêineres de aplicativos no Amazon ECS com o AWS Fargate.
Implantar a solução de exemplo
O repositório GitHub microservices-dotnet-aws-cdk contém a implementação completa dessa solução, permitindo que você faça uma solicitação HTTP à API Web de exemplo para testá-la. Para implantar, execute um dos seguintes scripts de implantação em seu ambiente usando bash (Linux ou Mac) ou PowerShell para implantar a solução.
Usando bash:
Usando o PowerShell:
Após a implantação, copie a URL impressa pelo script de implantação. Tem o seguinte formato: http://WebAp-demos-XXXXXXXX-99999999.us-west-2.elb.amazonaws.com/api/Books. Xse 9s serão caracteres alfanuméricos que representam o ID exclusivo da sua implantação. Em seguida, usando um cliente de API REST (como o Thunder Client para VS Code), teste a solução enviando uma solicitação HTTP POST para a URL com a seguinte carga JSON. Ao enviar o HTTP POST, você deve receber uma resposta de status 200 e o resultado do TraceId. Copie o valor TraceId para uso posterior.
A Figura 2 ilustra a chamada de API de exemplo.
Figura 2: Exemplo de chamada de API
Visualize os resultados
Depois de fazer uma solicitação de teste para a API, você pode navegar até o Amazon CloudWatch para revisar o mapa gerado do sistema com todos os microsserviços e componentes de nuvem.
- No console da AWS, navegue até o Amazon CloudWatch.
- No painel de navegação, escolha X-Ray Trace, Traces.
- Deixe o campo Filtrar por Grupo X-Ray em branco, insira o ID de rastreamento que você copiou no campo seguinte e escolha Executar consulta.
O console apresentará uma página semelhante à Figura 3 e à Figura 4. O CloudWatch agregará todos os dados para o ID de rastreamento fornecido e exibirá um mapa de rastreamento distribuído mostrando:
- Todos os três microsserviços
- Os componentes de nuvem com os quais cada um interagiu durante a solicitação
- Métricas por segmentos
- A linha do tempo da solicitação, incluindo o status, o código de resposta e a duração de cada comunicação com componentes downstream
Figura 3: Mapa de rastreamento distribuído
Figuraa 4: Logs de rastreamento
Limpeza
Você deve limpar os recursos criados ao executar essa demonstração para evitar cobranças inesperadas. Para fazer isso, execute o script na pasta raiz onde você clonou o repositório do GitHub
Usando bash:
Usando o PowerShell:
Conclusão
Neste último post da série de blog sobre a implementação de observabilidade para suas aplicações .NET na AWS, demonstrei como implementar o rastreamento distribuído usando o AWS X-Ray em uma carga de trabalho .NET para coletar, registrar e transmitir eventos de rastreamento para o AWS X-Ray. Também demonstrei como o Amazon CloudWatch usa esses rastros gerados pela sua aplicação para mostrar o mapa, relacionamento e dependências de todos os microsserviços do sistema
Para saber mais sobre implementações de métricas ou logs, confira as outras duas partes desta série:”.NET – observabilidade com Amazon CloudWatch e AWS X-Ray: Parte 1 — Métricas” e “Observabilidade do .NET com o Amazon CloudWatch e o AWS X-Ray: Parte 2 — Registro em log”
A observabilidade vai além de instrumentar sua aplicação .NET para gerar rastreamentos, logs e métricas. Você pode aproveitar os recursos do CloudWatch para monitoramento, alarmes, detecção de anomalias e muito mais. Consulte a página Recursos do Amazon CloudWatch para saber mais e, para experiência prática, confira o One Observability Workshop.
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre o autor
Ulili Nhaga é Cloud Application Architect na Amazon Web Services em San Diego, Califórnia. Ele ajuda os clientes a migrar, modernizar, arquitetar e criar aplicativos nativos de nuvem altamente escaláveis na AWS. Fora do trabalho, Ulili adora jogar futebol, correr, andar de bicicleta, churrasco brasileiro e aproveitar o tempo na praia.
Revisores
Kevin Lira é um arquiteto de soluções sênior na AWS, trabalhando na indústria de FSI. Sua experiência profissional anterior inclui desenvolvimento de software, liderança técnica e arquitetura em outras indústrias. Bacharel em Sistemas de Informação e Especialista em Computação Flexível e Tecnologias Microsoft.
Me siga no LinkedIn: https://www.linkedin.com/in/kevinlira/
Leonardo Bonato Bizaro é consultor de Professional Services no time de ProServe LATAM. Presente desde 2022, vem abraçando a grande oportunidade recebida através da constante busca de experiência e aprendizado na AWS para crescimento e desenvolvimento profissional.