Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Siteüberwachung mit Scheduled Tasks

Geschrieben von: Christoph Wille
Kategorie: Server

This printed page brought to you by AlphaSierraPapa

Eine Website, die auch nur für kurze Zeit offline ist, kann in der heutigen Zeit zu einem der größten Probleme für eine Firma werden. Deshalb sollte man seine Site überwachen, und zwar möglichst automatisch. Es gibt zwar viele Dienste, die Siteüberwachung anbieten - aber warum nicht selber machen, wenn man es dann gratis in der Hand hat?

Um eine effiziente Siteüberwachung zu machen, reicht es einfach nicht, nur den Webserver zu pingen. Damit es wirklich Sinn macht, muß man sich am Server Testscripts ablegen, die dann remote von anderen Maschinen aus durch Überwachungsscripts aufgerufen, und auf Fehlerbedingungen ausgewertet werden. Diese Überwachungsscripts sollten in bestimmten Zeitintervallen laufen, und den Administrator automatisch verständigen (und vielleicht sogar noch anderweitig aktiv werden).

Genau diese Anforderungen werden wir heute mit je einem Testscript und einem Überwachungsscript erfüllen. Am Ende des Artikels zeige ich dann, wie man mit Windows Bordmitteln auch noch die Intervall-gesteuerte Überwachung implementiert: mit Scheduled Tasks.

Erstellen eines Testscripts

Natürlich ist die erste Frage, was ich am Server testen will. Natürlich kann ich die Datenbankintegrität checken, Verbindungen zu Kreditkartenservern und so weiter. Für den heutigen Artikel beschränke ich mich aber auf etwas einfaches: die Überwachung, ob man sich zur Datenquelle verbinden kann. Die Implementierung findet sich in der Datei ServerTestScript.asp (die klarerweise am zu testenden Server abgelegt sein muß).

<%
On Error Resume Next
strConnStr = "Provider=SQLOLEDB;Data Source=strangelove;Initial Cat..."
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConnStr

' ein eigenes Fehlerformat schadet nicht! Hier simpel...
If Err.Number <> 0 Then
  Response.Write Err.Description
Else
  Response.Write "Success-Status"
End If

' das unbedingt hier hinten!
conn.Close
Set conn = Nothing

Response.End
%>

Es findet sich keinerlei Rocket Science, aber: man sollte wirklich versuchen, so viel an brauchbarer Fehlerinformation zurückliefern, wie nur möglich - denn sonst erschwert man sich die Fehlersuche nur unnötig.

Das Überwachungsscript

Jetzt haben wir das Script, das wir am Server aufrufen wollen. Uns fehlt sozusagen "nur noch" das WSH (Windows Scripting Host) Script, mit dem wir das Script am Server aufrufen, und eine entsprechende Nachricht ins Eventlog schreiben, und vielleicht auch noch dem Administrator eine Email schicken. Um Features erweitern kann man diese Liste sicherlich <g />.

Klingt nach viel Arbeit, ist es aber nicht. Denn wir verwenden Komponenten, die uns die meiste Arbeit abnehmen, und noch dazu gratis sind: AspTear (für den Zugriff auf das Testscript), AspEventLog (zum Mitloggen der Events) und CDONTS. Letzteres ist Teil einer Windows 2000 Server Installation, die anderen kann man downloaden - die Links dazu finden sich am Ende des Artikels.

Wenden wir uns nun dem Code in ScheduledTask.vbs zu. Der Hauptprogrammteil sieht wie folgt aus:

Const EVENTLOG_SUCCESS = 0
Const EVENTLOG_ERROR_TYPE = 1
Const EVENTLOG_WARNING_TYPE = 2
Const EVENTLOG_INFORMATION_TYPE = 4

Const Request_POST = 1
Const Request_GET = 2

Const cstrDefaultSender = "automated@dev.alfasierrapapa.com"
Const cstrDefaultSubject = "SiteWatcher Script Alert"

Const cPage2Test = "http://localhost/aspheute/sitecheck/servertestscript.asp"
Const cSuccessMessage = "Success-Status"

' main functionality
strGetResponse = RetrievePage(cPage2Test)
If (0 <> StrComp(strGetResponse, cSuccessMessage)) Then
  strError = "SiteCheck failed at " & Now() & " with error message: " & strGetResponse
  LogEvent EVENTLOG_WARNING_TYPE, strError
  ' SendMailToAdmin "christophw@dev.alfasierrapapa.com", strError
Else
  LogEvent EVENTLOG_SUCCESS, ("SiteCheck Script succeeded at " & Now())
End If

Etliche Konstanten (die meisten für die Komponenten), und ein relativ kurzer Teil von acht Zeilen, die das Überwachen durchführen. RetrievePage ruft unser Datenbanktestscript auf, wird ein Fehler geliefert, wird dieser mittels LogEvent gemeldet, und wäre SendMailToAdmin nicht auskommentiert, bekäme ich auch noch eine Email mit der Fehlermeldung geschickt.

Also spielt sich alles in Hilfsfunktionen ab, die sich am Ende des Scripts finden:

Function RetrievePage(ByVal strUrl)
 Set xobj = CreateObject("SOFTWING.ASPtear")
    
 On Error Resume Next
 ' URL, action, payload, username, password
 strRetval = xobj.Retrieve(strUrl, Request_GET, "", "", "")
 Set xObj = Nothing

 If Err.Number <> 0 Then
    If Err.Number >= 400 Then
        strErrMsg = "Server returned error: " & Err.Number
    Else
        strErrMsg = "Component/WinInet error: " & Err.Description
    End If
    strRetVal = strErrMsg & vbCrlf & "Raw Response:" & vbCrlf & strRetVal
 End If
 RetrievePage = strRetVal
End Function

Sub LogEvent(ByVal nType, ByVal strInfo)
 ' nach dem Testen der Komponente die folgende Zeile aktivieren
 ' On Error Resume Next
 Dim xObj, bResult
 Set xObj = CreateObject("SOFTWING.ASPEventlog")

 bResult = xObj.Open()
 bResult = xObj.ReportEvent(nType, strInfo)
 bResult = xObj.Close()
 Set xObj = Nothing
End Sub

Sub SendMailToAdmin(ByVal strEmailAddress, ByVal strMessageText)
 ' nach dem Testen der Komponente die folgende Zeile aktivieren
 ' On Error Resume Next
 Set objMail = CreateObject("CDONTS.NewMail")
 objMail.From = cstrDefaultSender
 objMail.To = strEmailAddress
 objMail.Subject = cstrDefaultSubject
 objMail.Body = strMessageText
 objMail.Send
 Set objMail = Nothing
End Sub

Mit diesen hat man ein tolles Überwachungsscript für einen Scheduled Task - allerdings sollte man das Script vorher auf der Kommandozeile ausführlich testen, weil in einem Scheduled Task ist das nicht sonderlich ideal.

Testen des Überwachungsscripts

Anstatt jetzt und sofort den Scheduled Task anzulegen, werden wir das Script direkt an der Kommandozeile testen, und zwar mittels cscript.exe:

cscript.exe ScheduledTask.vbs

Wenn alles OK läuft (am Server), dann bekommt man folgenden Eintrag im Eventlog:

Liefert der Server einen Fehler, könnte dies im Eventlog so vermerkt werden:

Diese beiden Eintragstypen erhält man auch, wenn man das Script nun als Scheduled Task laufen läßt.

Einrichten des Scheduled Tasks

Das Einrichten eines Scheduled Tasks geschieht über das Scheduled Tasks Applet in der Systemsteuerung:

Dort wählt man (klarerweise) Add Scheduled Task aus - dies startet einen netten kleinen Wizard, der uns bei der Erstellung des Tasks zur Seite steht. Die Infoseite kann man getrost vergessen. Interessant wird es auf der zweiten Seite, auf der man das Programm aussuchen kann, das man starten möchte. Standardmäßig bekommt man eine Liste von installierten Applikationen.

Das interessiert uns aber wenig - wir müssen nach unserem Script Browsen. Wenn man das Script ausgewählt hat, bekommt man den Scheduling-Schritt "vorgesetzt":

Den Namen kann man wählen, wie man möchte. Allerdings dürften einige nun ob der eingeschränkten Scheduling-Möglichkeiten enttäuscht sein - nur im Wizard ist es so dürftig, die Korrektur von täglich auf wiederkehrenden Zeitrahmen kann man später machen.

Weiter geht es mit den Einstellungen für den täglichen Task. Die einzige Änderung, die ich durchgeführt habe, ist, daß ich den Task wiederholend eingestellt habe.

Ein wichtiger Schritt ist die Festlegung des Accounts, mit dessen Privilegien das Script abgearbeitet wird. Normalerweise sollte man nicht das Administratorenkonto verwenden, sondern für Scheduled Tasks ein eigenes anlegen.

Eigentlich sind wir nun mit der Konfiguration fertig, allerdings gibt uns der Wizard im letzten Schritt (siehe Screenshot) die Möglichkeit, die erweiterten Konfigurationsmöglichkeiten sofort einzusehen.

Nun können wir von täglich auf beliebige Zeiträume umstellen, indem wir auf den Scheduling-Tab wechseln:

Noch ist zwar anscheinend nichts gewonnen, aber: die richtig interessanten Informationen finden sich hinter dem Advanced Button versteckt:

Repeat Task ist genau das, was wir gesucht haben. Die Checkbox markieren, und den gewünschten Testzeitraum (alle x Minuten) eintragen. Damit haben wir den Scheduled Task fertigkonfiguriert - und dessen Ablaufergebnisse finden wir ab sofort in der Ereignisanzeige (aber die kennen Sie ja bereits vom Test unseres Scripts).

Schlußbemerkung

Nun haben Sie ein Grundgerüst für die Überwachung Ihrer Websites. Sie können beliebige Aktionen sowohl zum Testscript als auch zum Überwachungsscript hinzufügen - bis hin zum automatisierten Serverneustart!

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010419.zip

Verwandte Artikel

Den Webserver umsiedeln (IIS 4 oder 5)
http:/www.aspheute.com/artikel/20020729.htm
Erstellen eines HTTP Test Tools
http:/www.aspheute.com/artikel/20000508.htm
Filesystem-Watcher leicht gemacht
http:/www.aspheute.com/artikel/20040517.htm
IIS, was machst du gerade?
http:/www.aspheute.com/artikel/20011204.htm
Kommandozeilen-Programme aufrufen
http:/www.aspheute.com/artikel/20010516.htm
Schluß mit lustig Teil 3 - das Hfnetchk Tool
http:/www.aspheute.com/artikel/20010928.htm
Virtuelle Verzeichnisse umbenennen
http:/www.aspheute.com/artikel/20030911.htm
Webseiten automatisiert scrapen
http:/www.aspheute.com/artikel/20010910.htm

Links zu anderen Sites

AspEventLog Komponente
http://www.alphasierrapapa.com/IisDev/Components/AspEventLog/
AspTear Komponente
http://www.alphasierrapapa.com/IisDev/Components/AspTear/

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.