Debugging Azure Production Role; Intellitrace in VS 2012

Allgemein

Bisher stellte die Fehlersuche in einer produktiven Azure Web-, oder Worker Role immer eine Herausforderung dar. Die Verwendung der Azure Diagnostics API in Verbindung mit Traces innerhalb des Source Code stellt eine Möglichkeit zur Verfügung Bugs, welche nicht in der lokalen Entwicklungsumgebung auftreten, ausfindig zu machen und diese zu fixen.

Mit Visual Studio 2012 hat Microsoft eine sehr elegante weiterführende Möglichkeit integriert, produktive Azure Services unter Verwendung von IntelliTrace zu debuggen.  Hierzu werden keine speziellen Debug Builds oder Remote Debugging Konfigurationen benötigt. Auch muss der Azure Service nicht mit VS 2012 erstellt oder IntelliTrace beim Publish des Service aktiviert worden sein.

 

imageDie größte Einschränkung vorab: IntelliTrace ist leider auch in Visual Studio 2012 erst ab der Ultimate Version verfügbar. D. h. um das beschriebene Verfahren durchführen zu können muss die Ultimate Edition von Visual Studio 2012 installiert sein. Visual Studio Premium, Professional oder die kostenfreie Express Edition unterstützen IntelliTrace nicht. 

Ist man jedoch in dem Genuss einer 2012 Ultimate Edition steht dem eleganten Debuggen von produktiven Azure Diensten nichts im Weg.

 

 

Vorbereitungen

Das Sammeln der IntelliTrace Informationen in dem produktiven Azure Service erfolgt mit einer PowerShell Erweiterung. Deshalb muss sichergestellt werden, dass der Azure Service auch mit einer kompatiblen PowerShell Version gestartet worden ist.

Legt man einen neuen Cloud Service an, so findet sich in der Datei  ServiceConfiguration.Cloud.cscfg im Element <ServiceConfiguration> ein Attribut osFamily.

image

osFamily=1 steht hierbei für eine dem Azure Service zugrundeliegende virtuelle Maschine mit Windows Server 2008 SP2. Hier muss darauf geachtet werden, dass der Wert auf 2 geändert wird. Die 2 steht für eine zugrundeliegende virtuelle Maschine mit Windows Server 2008 R2.

Windows 2008 R2 verfügt über eine kompatible PowerShell Version welche für das Sammeln der IntelliTrace Informationen benötigt wird. Die aktuelle Version der PowerShell kann durch Eingabe von:

image

 

$Host.Version

 

in einem PowerShell Fenster ermittelt werden. Minimal sollte die Major Version 2.0 in der dem Azure Service zugrundeliegenden virtuellen Maschine installiert sein.

Um die PowerShell Version feststellen zu können und das Sammeln der IntelliTrace Informationen zu beginnen muss sich zunächst via RDP auf die dem Azure Service zugrundeliegende VM aufgeschaltet werden. Dies kann im Portal oder sehr komfortabel über den Servermanager innerhalb von Visual Studio erfolgen.

 

image

Einfach im Server Explorer den gewünschten Service auswählen und mit rechter Maustaste “Connect using Remote Desktop” anklicken. Alternativ kann auch über das Azure Portal eine entsprechende Verbindung aufgebaut werden. Sollte keine Verbindung möglich sein, bzw. die Auswahl “Connect using Remote Desktop” nicht zur Verfügung stehen, muss überprüft werden, ob beim Deploy des Azure Service die Option “Allow Remote Desktop connection” aktiviert wurde.

 

Sammeln von IntelliTrace Informationen

Nach erfolgreicher Anmeldung an der virtuellen Maschine des Azure Service via RDP kann von folgender URL: http://www.microsoft.com/en-us/download/details.aspx?id=30665 der sog. “IntelliTrace Collector for Visual Studio 2012” geladen werden. Hierbei handelt es sich um ein selbst entpackendes Exe mit einem enthaltenen CAB File. Wichtig ist, dass nichts auf dem produktiven Server installiert werden muss!

Das in dem EXE File enthaltene CAB File muss in einem Verzeichnis (im Beispiel C:IntelliTrace) mit folgendem Kommando entpackt werden.

image

Es bietet sich an, das IntelliTrace File mit den gesammelten Informationen im gleichen Verzeichnis oder einem Unterverzeichnis anlegen zu lassen. Deshalb sollte dem Verzeichnis Schreib-, und Leserechte für den User “Everyone” zugewiesen werden.

Nach Entpacken des CAB Files kann eine PowerShell Session gestartet werden und innerhalb dieser das Modul “Microsoft.VisualStuido.IntelliTrace.PowerShell.dll” geladen werden.

image

Als nächsten Schritt kann mit dem Kommando “Start-IntelliTraceCollection” unter Angabe des ApplicationPools unter dem der Service ausgeführt wird, des CollectionPlan “collection_plan.ASP.NET.trace.xml” und dem Verzeichnis in dem das IntelliTrace File abgelegt werden soll das Sammeln der IntelliTrace Informationen gestartet werden.

image

Achtung: Der App-Pool wird neu gestartet!

Jetzt kann der Cloud Service getestet werden und alle “IntelliTrace Events” und “Call Information” werden gespeichert. Das Sammeln der Informationen kann mit “Stop-IntelliTraceCollection” und Angabe des App-Pools wieder beendet werden. 

image

In dem beim “Start-IntelliTraceCollection” angegeben Verzeichnis findet sich das erzeugte IntelliTrace File. Dieses kann in die lokale Umgebung kopiert und dort in Visual Studio 2012 geöffnet werden.

Interessant ist vor allen Dingen die neue Anzeige aller WebRequest anhand derer man schnell zu den jeweiligen Ereignissen navigieren und diese debuggen kann.

image

Es steht die komplette IntelliTrace Funktionalität zur Verfügung um alle Aktivitäten, welche auf dem Server in der Zeit in der das Sammeln der IntelliTrace Informationen auf dem Server gestartet war, zu debuggen.

image

 

Fazit

Das “historische Debuggen” mit Hilfe von IntelliTrace ist (insbesondere weil keine zusätzliche Software auf den produktiven virtuellen Servern installiert werden muss) eine sehr gelungene Möglichkeit produktive Umgebungen zu debuggen und Fehler schnell zu erkennen bzw. zu beheben.

Als Wermutstropfen bleibt jedoch die Tatsache, dass dies den Besitzern der Ultimate Edition von Visual Studio vorbehalten bleibt.

Windows Azure Kosten und Preise

Der Azure Kostenkalkulator ermöglicht bereits einen belastbare Kalkulation der zu erwartenden monatlichen Kosten einer Azure Lösung.

Malte Lantin (Product marketing Manager Microsoft Deutschland GmbH) hat auf den “Windows Azure Information Day” am 03.09.2012 in Unterschleißheim eine sehr gute und kompakte Übersicht der Kostenberechnung einer Azure Lösung zusammengefasst. Die von Malte Lanting zusammengetragen Informationen finden sich auch fragmentiert auf dem Azure Portal. Die Zusammenfassung von Malte erspart jedoch einige Zeit des Suchens. Teile seines Vortrages habe ich in diesem Blog zusammengefasst.

Übersicht

image

Zu beachten ist die Berechnung der Stundennutzung bei Compute. Hier zählen nicht die wirklichen “Nutzungsstunden” sondern es werden “Zeitstunden” berechnet. D. h. fährt man z. B. eine zusätzliche Instanz eines Compute Service um 13:59 hoch und um 14:01 wieder herunter fallen hierfür zwei Compute Stunden an! Beim Start um 13:01 und Shutdown um 13:59 jedoch nur eine Compute Stunde. Dies sollte unbedingt beim Starten von Instanzen berücksichtigt werden. Insbesondere bei automatischen Scaling Mechanismen (z. B. Autoscaling Application Block (WASABI) sollte dies unbedingt berücksichtigt werden. 

 

Websites

Für die kostenlos verfügbaren Websites ergeben sich folgende Einschränkungen:

image

Nach Erreichung bzw. Überschreitung des Limits von 165 MB ausgehendem Datenvolumen für die maximal 10 kostenlosen Websites (pro Subscription) sind diese faktisch nicht mehr erreichbar bzw. offline. Für den Betrieb eines Blogs oder einer minder frequentierten Internet Präsenz erscheint dies jedoch mehr als ausreichend.

Sollte das Übertragungsvolumen trotzdem nicht ausreichen, kann sehr einfach auf den Reserved Mode gewechselt werden. Im Reserved Mode sind die Einschränkungen bzgl. Datentransfer aufgehoben und der verfügbare Speicher steigt auf 10 GB.

image

 

Virtual Machines

Aktuell gilt für die Virtual Machines noch ein Nachlass von 33% auf die Kosten. Sobald die Preview Phase abgeschlossen ist, fallen die Nachlässe weg.

image

Interessant ist die Preisgestaltung bei Betrieb einer VM inklusive SQL Server Installation

image

Die Preise erscheinen im Vergleich zu einer on-premise Installation des SQL Server bzw. der Verwendung der SQL Database (aka SQL Azure) sehr konkurrenzfähig. Eine Aussage ob und wie die Preisgestaltung evtl. notwendiger Client CALs gehalten wird konnte Malte Lantin zum jetzigen Zeitpunkt noch nicht geben. Diese wichtige Information soll aber in den nächsten Wochen nachgereicht werden.