17 March 2009 ASP.NET, Health Monitoring, HowTo Robert Muehsig

imageDie Arbeit ist getan, die Website steht! Doch damit fangen die nächsten Probleme an. Kunden rufen an und sagen einem, dass sie eine Error-Page gesehen haben - also mal auf den Server schauen was da eigentlich los ist.
Mit diversen Logging Tools kann man sich über bestimmte Ereignisse informieren lassen - seit ASP.NET 2.0 gibt es auch einen eingebautes Health-Monitoring, dass man sehr einfach nutzen kann.

Eine einfache Konfigurationseinstellung
In meiner ASP.NET MVC Anwendung werfe ich einfach bei einer ActionMethode bewusst eine Exception:

        public ActionResult ThrowException()
        {
            throw new NotImplementedException("Message \\o/");
            return View();
        }

Das Health-Monitoring lässt sich einfach in der Web.config einstellen. Wir wollen in unserem Beispiel per Email über die Exception benachrichtigt werden.

Als erstes Mailsettings:

<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="your.email@company">
      <network host="your.smtp.host" port="25"/>
</smtp>
</mailSettings>
</system.net>

Zum Testen kann man auch einen anderen ASP.NET Trick anwenden - damit braucht man keinen SMTP Server.

Healthmonitoring:

<healthMonitoringenabled="true">
                  <eventMappings>
                        <clear/>
                        <add name="All Errors"
             type="System.Web.Management.WebBaseErrorEvent, System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
             startEventCode="0"
             endEventCode="2147483647"/>       
                  </eventMappings>
                  <providers>
                        <clear/>
                        <add name="EmailErrorProvider"
             type="System.Web.Management.SimpleMailWebEventProvider"
             to="[email protected]"
             from="[email protected]"
             buffer="false"
             subjectPrefix="An error has occured."
             bodyHeader="This email is generated from my application." />
                  </providers>
                  <rules>
                        <clear/>                     
                        <add name="Testing Mail Event Providers"
             eventName="All Errors"
             provider="EmailErrorProvider"
             profile="Default"
             minInstances="1"
             maxLimit="Infinite"
             minInterval="00:01:00"
             custom=""/>       
                  </rules>
            </healthMonitoring> 

Kurze Erklärung:
Als wichtigster Part registrieren wir uns auf ein Event und nutzen den SimpleMailWebEventProvider -der einfach eine Mail verschickt. Eine genauere Erklärung der einzelnen Teile findet sich in diesem Blogpost oder auf der MSDN Seite.

Ergebnis:

image

Im Text-Editor kann man allerdings die Mail nicht öffnen, da der Inhalt Base64 kodiert ist.
Man kann auch eigene Provider schreiben und sich auf beliebig viele Events registrieren und die tollsten Sachen damit machen - wer allerdings nur kurz per Mail informiert werden möchte, für den ist das eigentlich Ideal :)

[Download Demoanwendung]
(Achtung, Web.config für PickupDirectoryLocation anpassen)


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de