Siteüberwachung mit Scheduled Tasks
Geschrieben von: Christoph Wille 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 TestscriptsNatü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 ÜberwachungsscriptJetzt 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 ÜberwachungsscriptsAnstatt 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 TasksDas 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ßbemerkungNun 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! Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Den Webserver umsiedeln (IIS 4 oder 5) Links zu anderen Sites
AspEventLog Komponente Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |