Se você é como eu, certamente é um profissional extremamente preocupado com a performance das aplicações que você constrói efetivamente ou participa do processo de construção.
Recentemente, ao encontrar alguns problemas de performance em uma aplicação de teste que “roda” no ambiente de cloud service (Web Role) do Windows Azure, saí a procura de ferramentas para monitorar o comportamento da aplicação no ambiente de produção para, antes de qualquer medida corretiva, pudesse encontrar os pontos de gargalo da aplicação.
Fiquei surpreso e naturalmente empolgado ao descobrir que a própria Microsoft disponibiliza tais ferramentas dentro de sua plataforma de desenvolvimento para web (ASP.NET), de seu sistema operacional para servidores, o Windows Server (a partir da versão 2008) e por inércia, dentro da plataforma de cloud computing da empresa, a saber, o Windows Azure.
Windows Azure Diagnostic Monitor (WADM)?
Windows Azure Diagnostic Monitor (em português, “Monitor de Diagnósticos do Windows Azure”) é um componente de software disponível dentro da estrutura de cloud que possui o objetivo de coletar dados operacionais da aplicação em análise. Além de coletar e armazenar tais informações, WADM permite ainda a visualização remota das mesmas (desde que devidamente configurado).
Muito embora o recurso esteja presente e a disposição do desenvolvedor, ele precisa ser ativado/habilitado. Assim, no post de hoje, gostaria de apresentar o processo necessário para que você consiga habilitar o WADM em sua infraestrutura de cloud.
Habilitando o WADM
Para que possamos apresentar a assertividade do processo apresentado aqui, criaremos um projeto de cloud (com ASP.NET MVC 4) no Visual Studio 2012 (para o VS 2010 o processo é o mesmo) e faremos as alterações necessárias para a habilitação do recurso.
Algumas observações importantes são:
- Trabalharemos neste post com o conceito de cloud services, mais especificamente, web roles. Entretanto, o processo funcionaria da mesma forma para uma worker role.
- Para demonstrar a funcionalidade, utilizaremos o compute emulator do Windows Azure, entretanto, o processo é rigorosamente o mesmo para colocar esta funcionalidade no ar no ambiente de produção.
Para demonstrar na prática o conceito apresentado neste post, o que faremos como primeiro passo é evidentemente, criar um novo projeto no Visual Studio do tipo “Cloud” adicionando um web project “ASP.NET MVC 4”. Disclaimer: Estou imaginando que você esteja familiarizado com este processo de criação e por isso, não o demonstrarei aqui.
Uma menção importante neste momento é que, o que possibilita a coleta de dados operacionais da aplicação em roles é justamente o módulo de diagnóstico e por este motivo, precisamos o “importar” do Windows Server para nossa aplicação. O termo é “importar”, mas na prática, funciona como um ponteiro do monitor para a aplicação.
O que precisamos fazer neste instante é visualizar o arquivo *.cscdef da web role. Isso porque precisamos verificar se o módulo de diagnóstico já foi importado por padrão no momento da criação do projeto. Caso o módulo já tenha sido importado por padrão, ao iniciar a web role, o Windows Azure automaticamente inicia a coleta dos dados. Caso contrário, precisamos realizar algumas configurações manuais (como a seguir).
Vamos aos passos necessários (são apenas dois) necessários para habilitar nosso monitor de diagnósticos?
Passo 1. Verifique o arquivo de definição quanto a importação do diagnóstico
O primeiro passo a ser dado no sentido de habilitar o recurso de diagnóstico da aplicação é verificar se o respectivo módulo importado a mesma. Para isso, vá até o arquivo de definições de sua role (com a extensão *.csdef) e verifique as linhas destacadas em verde na Figura 1 encontram-se também no corpo de seu código. Se sim ótimo, primeira etapa concluída. Senão, adicione-as, conforme apresentado na figura.
Figura 1. Verificando adicionando as linhas de importação do módulo de diagnóstico
Passo 2. Verificando se os valores estão corretamente atribuídos
A próxima etapa consiste em verificar se os valores para cada uma das propriedades que fazem com que as coisas aconteçam, estão corretamente atribuídos. Como você já deve saber, o arquivo responsável por carregar tais atribuições é aquele com a extensão *.cscfg. Em seu projeto devem existir duas opções deste arquivo: Local e Cloud. Ambos serão úteis em seus respectivos ambientes, portanto, verifique se o trecho de código apresentado pela Figura 2 encontra-se disponível em ambos. Em caso positivo, mais uma etapa foi superada. Em caso negativo, você deverá adicionar tais linhas.
Figura 2. Atribuindo os valores para que o módulo de diagnóstico funcione corretamente
Neste ponto, precisamos informar ao Windows Azure, onde os dados provenientes do processo de monitoramento serão armazenados para posterior consulta. Nesta linha, duas observações importantes sobre o trecho de código apresentado anteriormente são:
- Note que para este exemplo, a propriedade “value” está com valor “UseDevelopmentStorage=true”. Isso significa que estaremos utilizando o esquema de armazenamento proporcionado pelo emulador do Windows Azure.
- Você pode realizar o mesmo processo utilizando um ambiente de armazenamento de produção. Bastaria para isso adicionar o trecho de código apresentado pela Figura 3 (a seguir).
Figura 3. Atribuindo valores para o monitor para ambiente de produção
Pronto! Tecnicamente nossa role está pronta para iniciar a coleta dos dados. O que precisamos agora é adicionar um contador de ocorrências. Para testar exemplificar o funcionamento, utilizarei um contador de performance (já disponível na plataforma .NET) – o Performance Counter.
Os passos para realizar esta tarefa são:
- Edite o arquivo “WebRole.cs”;
- Sobrescreva o método “OnStart” com o código apresentado pela Figura 4;
- Execute o projeto (com Visual Studio em modo administrador);
Figura 4. Sobreescrevendo o método “OnStart” da web role
Os comentários no código da Figura 4 já explicam sua atividade mas, o de forma geral, o que estamos fazendo nada mais é do que, informar ao monitor de diagnósticos do Windows Azure, que ele deverá gerar logs de 30 em 30 segundos e, especificamente para o contador de performance do processador, estes logs deverão ser gerados de 5 em 5 segundos.
Pronto, nossa aplicação já está sendo monitorada. Agora, bastaria tratar tal armazenamento e utilizar um mecanismo como Linq, por exemplo, para montar relatórios detalhados exibindo os dados de logs.
Você já pode verificar de antemão o monitoramento da aplicação acontecendo através dos logs gerados nos diretórios utilizados localmente pelo emulador do Windows Azure, através do Azure Emulator UI (conforme apresentado pela Figura 5).
Figura 5. O emulador em execução e monitorando
Por hoje é só. Forte abraço a todos!
Facebook
Twitter
Instagram
LinkedIn
RSS