I saw that there are a lot of people that use tracing infrastructure that is offered by .NET framework to trace information in Windows Azure Tables. Basically, after we configure the configuration file, the only thing that we need to do is to call the Trace class and write data to it.
In the configuration file of our application we need to add a new trace listener that is able to write all the trace information to Azure Tables.
If we check the Azure Tables of our account we will see that a new table was created with the following structure:
If we want to order events based on the event tick count, we need to be aware that this will be valid only for events that were generated by the same processor (Pid). For different processor on the same machine the EventTickCount can be different.
Never try to order all the event of a Trace table from Windows Azure based on the EventTickCount. You can use it in combination with Pid. Also, the TimeStamp column of Azure Table store the time when the message was written to Azure Table and not the moment when the event was generated.
Trace.WriteLine(“Some trace data”);
Trace.TraceWarning(“Some worning information”);
Trace.TraceError(“An error that appeared in the application.”);
We can do a log of thinks with this class. It is not something new.In the configuration file of our application we need to add a new trace listener that is able to write all the trace information to Azure Tables.
<system.diagnostics>
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics” name="DiagToAzureTables"></add>
</listeners>
</trace>
</system.diagnostics>
Next step is to add the listener to the trace listener collection each time when your application start. At this step I prefer to set auto-flush to true. In this way all the content will be send automatically to the trace and the risk to lose data when the machine is instable and crash is very low.System.Diagnostics.Trace.Listeners.Add(myListener);
System.Diagnostics.Trace.AutoFlush = true;
On the internet you will find a lot of implementation of trace listener. The one that I prefer to use is the most common one. One of the implementation can be found in the following location http://www.wou.edu/~rvitolo06/WATK/Labs/WindowsAzureDebugging/Source/Assets/CS/AzureDiagnostics/TableStorageTraceListener.cs If we check the Azure Tables of our account we will see that a new table was created with the following structure:
- PartitionKey - D10 of event timestamp >> 30
- RowKey - D19 of event timestamp
- EventTickCount – event timestamp
- Level - event type
- EventId – event id,
- Pid - event process id
- Tid - event thead id
- Message - event message
is correlated to the time when the system/process have been
started.
Remarks: Base on the hardware configuration we can have a frequency tick per second or per nanoseconds. We can determine what is the frequency using StopWatch.Frequency.If we want to order events based on the event tick count, we need to be aware that this will be valid only for events that were generated by the same processor (Pid). For different processor on the same machine the EventTickCount can be different.
Never try to order all the event of a Trace table from Windows Azure based on the EventTickCount. You can use it in combination with Pid. Also, the TimeStamp column of Azure Table store the time when the message was written to Azure Table and not the moment when the event was generated.
Nice, but why would want somebody to do this, instead of using the built-in Diagnostics Monitor, which anyway will periodically transfer the collected data to azure tables? (http://msdn.microsoft.com/en-us/library/windowsazure/hh411548)
ReplyDeleteI wouldn't want to have an Azure application that will usually have hundreds of role instances, all writing directly to a table storage service ..