Accessing Windows Azure Diagnostics Logs With LINQPad

If you are using Windows Azure Diagnostics with the DiagnosticMonitorTraceListener you will most likely have a table in your storage account called WADLogsTable with a ton of data in it. It can be a bit overwhelming.

A colleague and I wanted to get two simple pieces of information: an event’s date and the corresponding message. Furthermore, we only wanted events that had happened today. Here’s what we came up with using LINQPad and the Azure Storage Driver.

First, make sure you’re using a table storage account as your database. In my case, my connection is called mycloudstorageaccount.

Then simply perform your query. If you want to copy/paste, here’s the text version:

from l in WADLogsTable
where l.PartitionKey.CompareTo(DateTime.Today.Ticks.ToString("d19")) > 0
select new
{
	DateTime = new DateTime(l.EventTickCount.Value),
	l.Message
}

Oh, and don’t forget to check out the SQL tab if you are interested in the « low level stuff. » It will show the actual URL that was used to query Windows Azure.

LINQPad Driver for Azure Table Storage

I promise, this is the last you will see on this subject today (from my part, anyway). It’s for those who were not online yesterday and/or are in a different time zone and/or didn’t see my post from yesterday and/or don’t speak French.

I’ve been working quite a bit with Windows Azure lately and particularly with Table Storage. I used to use SQL Server Mangement Studio to work with SQL Server and I found Azure Storage Explorer (screenshot on the left), which is actually pretty good for working with all three storage options: queues, tables and blobs.

However, I’m a pretty heavy user of LINQPad (which has completely replaced SSMS for me for a while) and, although it’s totally possible to access Azure table storage with « standard LINQPad, » I was missing a few essential features, so I whipped up a LINQPad driver to easily query Azure Table Storage.

What does it do? It allows you to add storage accounts as connections in LINQPad. It supports the local emulator as well as actual cloud storage. With every connection, you get all the right references as well as a typed data context based on the account’s tables.

I think I included everything you can expect from a typed data context, which will work like a charm with auto-completion if you have a LINQPad license. For anything that’s not already there, the data context exposes a TableClient property that is a CloudTableClient instance. That should be enough to do anything you want.

There’s also a couple of other « bonus » features, such as displaying the requested URL in the « SQL » tab of LINQPad:

The whole thing is open sourced and available on GitHub. It’s even compiled and packaged if you’re interested but don’t want to deal with code.

If you work with Table Storage and LINQPad (if you haven’t adopted LINQPad yet, it might be the right excuse to test it), don’t hesitate to check the driver out. It would be nice if it got thoroughly tested and if I had feedback.

Driver Azure Table Storage pour LINQPad

Vous connaissez LINQPad ? Scott Hanselman le recommande systématiquement dans liste annuelle d’outils pour développeurs. En ce qui me concerne, je m’en sers pratiquement tous les jours—enfin, quand je développe.

linqpad

À la base, c’est un logiciel qui vous permet d’exécuter des requêtes Linq :

linq_query

Mais ça permet aussi d’exécuter des bouts de code arbitraires, juste pour voir ce que ça donne :

code_sample

La fonctionnalité que j’utilise le plus c’est définitivement celle-ci, mais ces derniers temps je travaille de plus en plus avec Windows Azure et notamment Table Storage. Bien que LINQPad supporte des requêtes sur SQL Azure, j’étais un peu embêté quand il s’agissait d’effectuer rapidement des requêtes sur le Table Storage. Du coup, j’ai décidé d’écrire un driver pour le supporter !

Le driver permet d’ajouter des comptes de stockage (storage accounts) en tant que connexions LINQPad :

add_storage_account

Une fois que vous avez ajouté le compte—qui peut être votre compte de développement local, si l’émulateur est activé, ou un compte sur le cloud—vous le verrez apparaitre dans la liste de connexions avec ses tables et leurs colonnes.

linqpad_tables

La suite c’est du LINQPad “comme d’habitude”. Enfin, si vous avez vos habitudes, sinon vous pouvez commencer par un clic droit sur une table pour insérer une des requêtes par défaut.

Evidemment, pour ce faire, il faut télécharger le driver. Vous avez deux choix :

Petit warning : on est en version 1.0.0-beta. Ça veut dire que je n’ai pas testé le code, mais qu’il a l’air de marcher. Si vous utilisez Azure Table Storage et LINQPad et que vous voulez tester le driver, tout feedback est bienvenu !