HowTo: Health Monitoring mit ASP.NET

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="malcolm.x.sheridan@nab.com.au"
             from="someone@contoso.com"
             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)

2 Kommentare bisher »

  1. Peter Gfader sagt

    am 19. März 2009 @ 12:09

    Wow!!
    so enfach gehts :-)

    Wir haben dazu immer einen globalen Exception Handler in global.asax verwendet… ( Application_Error event )

    lg aus Sydney
    Peter

    Super blog!!

  2. HowTo: Elmah in ASP.NET MVC (& IIS7) fürs Errorlogging | Code-Inside Blog sagt

    am 9. Juni 2009 @ 01:45

    [...] habe bereits mehrfach über Errorlogging (und Logging im Allgemeinen) geschrieben, jedoch habe ich heute in einem ASP.NET MVC Projekt eine [...]

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: