Como instalar DebugDiag e importar regras em Azure Cloud Services através de Startup Tasks

by Leonardo Villar

Este artigo descreve as etapas de como instalar DebugDiag versão 2.1 em Web e Worker Roles de Azure Cloud Services utilizando startup tasks. Nota: Nesse artigo, os passos foram aplicados em uma Worker Role, mas os passos são os mesmos se forem aplicados em uma Web Role.

Preparando o instalador do DebugDiag e o arquivo de configuração com a regra:

1. Faça o Download do DebugDiag Debug Diagnostic Tool v2 Update 1 (O procedimento foi feito utilizando a versão x64 do DebugDiag 2 Update 1, mas também foi testado com a versão 1.2 e ele funciona muito bem)

2. Instale o DebugDiag em uma máquina onde você pode criar a regra da maneira que quiser, e depois de criada e ativa, você pode clicar no botão Exportar no lado inferior direito da ferramenta e exportar para um arquivo chamado "DebugDiagRule.ddconfig" . Para obter informações sobre como criar regras em DebugDiag, consulte Configuring DebugDiag to Automatically Capture a Full User Dump on a Managed Function:

Nota: Para um ambiente de VMs em Azure Cloud Services, é altamente recomendável que os arquivos de usuário, como dumps neste caso, sejam gerados no disco C: que é a unidade "user" e não no disco D: (sistema) ou disco E (aplicação). Você pode configurar o "Userdump Path" para C:\DebugDiagDumps na criação das regras, ou você pode editar o arquivo exportado (ver mais informações no passo 3).

 

image

 

 

image

3. A fim certificar-se de que os dumps serão gerados na unidade C: da instancia do seu Cloud Service, utilizando o bloco de notas, você pode abrir o arquivo "DebugDiagRule.ddconfig" que você criou no passo anterior, e procure por "DumpPath "e verifique se ele está configurado para "C:\DebugDiagDumps". Veja o exemplo:

<DebugDiag MaxClrExceptionDetailsPerSecond="30" MaxClrExceptionStacksPerSecond="20" MaxClrExceptionStacksPerExceptionType="10" MaxClrExceptionStacksTotal="100" MaxNativeExceptionStacksPerSecond="30"><Rules><Rule TargetType="PROCESS" TargetName="WaWorkerHost.exe" UFEActionType="" UFEActionLimit="0" MaxDumpLimit="10" MatchingLeakRuleKey="" PageheapType="" RuleType="CRASH" Active="TRUE" RuleName="Crash rule for all instances of WaWorkerHost.exe" DumpPath="C:\DebugDiagDumps"><Exceptions><Exception ExceptionCode="E0434352" ExceptionName="CLR (.NET) 4.0 Exception - System.NullReferenceException" ExceptionData="System.NullReferenceException" ExceptionData2="" ExceptionDataCheck="FALSE" ActionType="FULLDUMP" ActionLimit="3"/></Exceptions><Events/><Breakpoints/></Rule></Rules></DebugDiag>

Nota: Se o diretório definido no DumpPath não existir no servidor onde a regra será importada, o DebugDiag irá cria-lo.

4. Para as Roles (Web ou Worker Role)

a. Em Solution Explorer no Visual Studio, abaixo de “Roles” no projeto do seu Cloud Service, clique com o botão direito na role (WebRole ou WorkerRole) e selecione Add>New Folder. Crie uma pasta chamada Startup

b. Clique com o botão direito na pasta Startup e selecione Add>Existing Item. Selecione o instalador do DebugDiag que você baixou e o arquivo de configuração do DebugDiag que você exportou e adicione os dois na pasta Startup.

image

Definir as Startup Tasks para as suas roles:

Startup Tasks permitem que você execute operações antes da inicialização da Role. Neste caso, vamos usar uma Startup Task para a instalação DebugDiag e uma outra task para importar o arquivo de configuração que contém a regra, exportado anteriormente. Para mais informações sobre as Startup Tasks, veja: Execução de tarefas de inicialização do Azure.

1. Adicione as seguintes linhas no arquivo ServiceDefinition.csdef abaixo de WebRole or WorkerRole em todas as roles que você deseja instalar o DebugDiag:

<Startup>

<Task commandLine="Startup\Installer.cmd" executionContext="elevated" taskType="simple"/>

<Task commandLine="Startup\ImportDebugConfig.cmd" executionContext="elevated" taskType="simple"/>

</Startup>

A configuração acima irá executar o console de comando install.cmd e ImportDebugConfig.cmd com privilégios de administrador. Com isso, as tasks irão instalar DebugDiag e logo depois importar o arquivo de configuração que contém a regra.

2. Crie o arquivo Installer.cmd com o seguinte conteúdo:

 if not exist "%ProgramFiles%"\DebugDiag\ msiexec /i %~dp0DebugDiagx64.msi /qn

O script de instalação irá primeiro verificar se a pasta do DebugDiag já existe, caso não, ele irá instalar o DebugDiagx64.msi em modo silencioso.

Nota: Se você desinstalar DebugDiag manualmente, a pasta do DebugDiag continuará a existir dentro do diretório C:\Program Files, então, o instalador não irá instalar o DebugDiag tendo em vista que a pasta já existe. Este artigo destina-se a ter o DebugDiag instalado e configurado novamente no caso de a instancia sofrer um reboot, reimage, novas instancias e etc.

3. Crie o arquivo ImportDebugConfig.cmd com o seguinte conteúdo:

 "%ProgramFiles%\DebugDiag\DebugDiag.Collection.exe" /importConfig %~dp0DebugDiagRule.ddconfig –DoNotPrompt

O script ImportDebugConfig irá importer o arquivo de configuração. Depois disso, a regra será criada e ativada.

No caso do DebugDiag já tiver essa regra (mesmo nome), o comando irá subscrever.

NOTA:

Use um editor de texto simples, como o bloco de notas para criar este arquivo. Se você usar o Visual Studio para criar um arquivo de texto e, em seguida, renomear para ".cmd" o arquivo ainda pode conter um UTF-8 Byte Order Mark, e executar a primeira linha do script irá resultar em um erro.

4. Adicione os arquivos Installer.cmd e ImportDebugConfig.cmd à role, clicando com o botão direito sobre a pasta Startup dentro da Role e selecionando Add> Existing Item. Assim, a Role agora deve ter os arquivos DebugDiagRule.ddconfig, DebugDiagx64.msi, Installer.cmd e ImportDebugConfig.cmd:

image

Fazendo o Deploy do seu serviço:

Quando você faz o deploy do seu serviço para o Azure Cloud Services, as startup tasks irão executar a instalação do DebugDiag e a importação do arquivo de configuração contendo a regra. A instalação e a configuração do DebugDiag são muito rápidas. Então, logo após isso, a instancia estará “pronta” e você pode acessar via RDP e verificar a instalação e configuração do DebugDiag e então ter certeza de que tudo está funcionando bem.