I recently upgraded a Azure Cloud Service from the 2.3 SDK to the 2.5 SDK. I keep the IIS log files for analysis but after the upgrade I noticed that I stopped getting the files uploaded to the storage account.
Digging around I found this was an issue with the Azure 2.5 SDK and that the workaround is to modify the OnStart method in your WebRole.cs file. This requires a restart of your app before you’ll start seeing the IIS log files copied over to your storage account.
One thing that I didn’t expect is that the Azure Diagnostics only copied newer files. I guess this makes sense, so I went digging around for a way to copy the older files to the storage account.
Here’s what I came up with.
Connect via Remote Desktop to the Web Role in Server Explorer.
Open a Poweshell prompt and download AzCopy.
PS> invoke-webrequest http://aka.ms/downloadazcopy -OutFile AzCopy.msi
Run the AzCopy.msi installer and open the Microsoft Azure Storage Command Line. This opens a command window with the path to the azcopy executable already in the path.
Now before I could go further I wanted to place the log files in the same directory structure that Azure Diagnostics already supports. Querying the storage account I see they are located in the following location:
But where are the files located on the Azure Cloud virtual machine? Digging around I see that the log files are stored at the location
To make this easier to see on the command line, I created a configuration file with all the arguments I needed to pass to AzCopy. Here’s my configuration file (excluding private information)
/Source:C:\Resources\Directory\<deployment_id>.<Site_Name>.DiagnosticStore\LogFiles\Web /Dest:https://<account>.blob.core.windows.net/wad-iislogfiles/WAD/<deployment_id>/<Site_Name>_IN_<Instance>/ /DestKey:<storage account key> /S /BlobType:block /V
Knowing this I could now use AzCopy to copy the old IIS log files up to the storage account using the following AzCopy command.
After AzCopy was done copying the files, I repeated the same operations on the other nodes in the Azure Cloud Service and verified the files were there by using the BlobTransferUtility, that I use to copy the files locally.