Tracing in Microsoft Azure Cloud Service

Setting Up the Tracing

Since it took me some time to figure out again what to do to see the tracing output of my Microsoft Azure Worker Role in a Cloud Service, here are some hints.

First, read How To Enable Diagnostics in a Cloud Service. Following the step-by-step description solves most of the issues. I think it’s worth mentioning that there is no need to do any coding to enable tracing when following these steps. One just have to add the tracing messages themselves to the code.

Then, I created a new Cloud Service and a new Storage Account in the Microsoft Azure Management portal.

Before publishing the Cloud Services, I changed the size of the VM from the default value “Small” to “ExtraSmall” in the ServiceDefinition.csdef file. This size fits for testing purposes and is way cheaper.

After publishing the service to Windows Azure, I had to adjust the diagnostics settings manually. No idea why Azure was not using the settings of the config files – maybe I missed some. I used the Server Explorer of Visual Studio. Just right-click on the role node in the Windows Azure / Cloud Services tree, and make sure to take the proper deployment slot (production or staging). Then select Update Diagnostics Settings… and set the required values of the Application logs tab page.

Diagnostic Settings

Accessing the Output

To access the output, I use the Server Explorer of Visual Studio too. There is no need to install third-party tool for this.

The trace output can be found under the Storage node. Find the Storage Account created for the Cloud Service and open the Tables node. There should be a WADLogsTable item. If not, check all steps described by How To Enable Diagnostics in a Cloud Service and if you have updated the diagnostics settings. Double-clicking the WADLogsTable item will open the table containing the trace output.

Links

How To Enable Diagnostics in a Cloud Service

Take Control of Logging and Tracing in Microsoft Azure (a little bit outdated, but still helpful)

Azure Execution Models (describes and compares Azure Virtual Machines, Web Sites and Cloud Services)

HowTo: Completely Delete Virtual Machine in Windows Azure

Creating a virtual machine in Windows Azure is quite simple. Open the management console, select the Virtual Machines tab, click New, select the kind of VM, enter some additional data, and wait a while. Then the machine is up and running. Simple!

The deletion seems to be that simple too, but it isn’t. Select the machine to be removed, click the Delete button, confirm, and the machine will be deleted.

As an Azure newbie (as I am at the time of writing), one should read the confirmation question carefully. Besides asking if the VM should be really deleted, it states “The associated disks will not be deleted from your storage account.”

Well, not so bad, one might think, I’ll delete the disk from the storage by myself. Just switch to the Storage tab, select the account, switch to the containers tab, open the vhds, select the VM’s vhd, press the Delete button, confirm … and get stuck. Azure cannot delete the vhd, telling “Blob ‘Vm.vhd’ is in use as virtual machine disk ‘VM’, so the blob cannot be deleted.”

To delete the vhd, one has to go to the Virtual Machines management, select the Disks tab, and delete the disk here. Deleting the disk, one can (and in this case should) delete the associated vhd too, selecting the appropriate option. Only then the vhd is also deleted from the storage. In case you decide to obtain the vhd, you can remove it later from the Storage management tab.

Keeping the disk has one big advantage: it helps you to save money. A VM can be rebuilt from this disk. In case you do not need a VM for a while, delete it, keep the disk, and rebuild the VM when needed.

You should also take a look at the Cloud Services tab of the management console. Azure creates, from what I saw, a cloud service every time a virtual machine is created. The cloud service, of course, is not deleted when the VM is deleted. One has to delete it separately.