During the course of debugging Windows Azure applications on a daily basis I have accumulated several tips, tricks, and debugging techniques that are specific to the Azure platform.  I plan to create a series of blog posts to share a lot of the information that my team uses internally to troubleshoot Windows Azure.  The first one will start off with some of the resources that you can find once you RDP into an Azure VM.

Debugging Windows Azure Series

  1. Resources on the VM
  2. Getting Tools onto the VM, Part 1

 

 

Resources on the VM

One of the keys to troubleshooting an issue is understanding the overall environment and what resources and log files are available.  The C: drive contains config info and local storage, the D: drive contains Windows and WaAppAgent logs, and the E: drive contains the customer’s role code. 

 

C: - log files, LocalResource folders, etc

  • You can use the C: drive for any local temporary storage while debugging (ie. WinDBG, tools, dump files, log files, etc).  I usually create C:\Scratch to load all of my troubleshooting tools.
  • C:\Config - Service configuration information
    • <DeploymentID>.<RoleName>.<index>.xml
      This is the main configuration information for your role.  If you update your service configuration (either updating the config via the management portal or doing an in-place upgrade) there will be multiple copies of the XML file, where the <index> is a counter incremented by one for each new config version.  You can find the following information in this file:
      • Deployment Name
      • Service Name
      • Certificates
      • Host process
      • cscfg settings and values
      • LocalStorage folders
      • InputEndpoints, InternalEndpoints and port mappings
    • <GUID>.ccf
      • OS Version
      • Cluster name
      • Deployment ID
      • VM Size (look for <ProcessorCount>)
      • ipconfig info
  • C:\Resources - LocalStorage, log files, AspNetTemp
    • Directory\<GUID>.<RoleName>.DiagnosticStore - IIS Logs, Failed Request (freb) logs
    • Directory\<guid>.<role>.DiagnosticStore\Monitor\Tables - All diagnostics collected by the Azure diagnostics monitor (event logs, role logs, WAD diagnostics, etc).
    • Temp\<GUID>.<RoleName>\RoleTemp - Host process logs
    • Directory\<GUID>.<RoleName>.<LocalStorage name> - Folder for a <LocalStorage> as defined in the service model (.csdef).

 

 

D: - Windows (%SystemDrive%, %SystemRoot%, etc), agent logs

  • D:\Packages\GuestAgent - agent logs
    • WaAppAgent.exe runs from this location
    • WaAppAgent.exe.log - Log file for agent showing instance startup details.
    • WaAppAgent.<index>.log – Historic log files

 

E: - Virtual drive containing service package

This drive is created when the guest agent deploys the service package.  Note that this is dynamically created and may end up being the F: drive, G: drive, etc.

  • _entrypoint.txt - DLL containing the entry point for the host process to call.
  • RoleModel.xml – XML file including <Startup> tasks and <Sites> configuration elements.  Also includes msbuild information and target .NET framework version.
  • <GUID>.csman - PackageManifest contains a list of all files in the package (copy/paste to Visual Studio to get readable format)
  • \Base\x64 - The host process that runs the service’s code.
  • \Approot - The customer’s code, aspx pages, DLLs, etc.
  • \Sitesroot\<index> – This is the folder where the full IIS site is run from.  When the role is deployed, the files from \Approot are copied to this \Sitesroot folder and then IIS will be configured to run the site from \Sitesroot.  Any temporary test changes to the role (web.config changes, new DLLs, etc) should be placed here.