CheckSMTPFlow

Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. Für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanzieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Ich denke dass mittlerweile fast alle Exchange Server irgendwie eine Verbindung zum Internet haben. Nur wir überwachen Sie, ob die Mailfunktion auch gewährleistet ist ?. Wie Sie sicher wissen, kann ein Mailserver bis zu drei Tage eine Nachricht immer wieder erneut zustellen. Nicht alle senden dazwischen eine "Ich versuche es weiter"-Mail. In der heutigen schnelllebigen Zeit ist jedoch die Verlässlichkeit und Antwortzeit eines Mailsystems immer wichtiger.

Also sollten Sie eben diese Funktion auch überwachen. Und dies geht natürlich wieder einmal am besten mit einem Skript, welches Testmails versendet, die Antworten einsammelt, auswertet und bei Bedarf auch Alarm schlägt. Etwas Statistik wäre auch nicht schlecht.

Das Prinzip

Der Test der Verbindung erfolgt durch den regelmäßigen Versand von SMTP-Nachrichten an bestimmte Adressen und der Auswertung der Rückantworten. Dazu sind mehrere Wege denkbar:

FRAGEN SIE auf jeden Fall den Betreiber des ECHO-Systems, dass Sie seinen Service als regelmäßige Gegenstelle verwenden dürfen !!

In alle Fällen wird aber eine Nachricht mit dem Betreff an den Absender zurück gesendet. Kann eine Software nun diese Rücknachricht der vorher ausgehenden Nachricht zuordnen, dann lassen sich damit Ausfälle oder Verzögerungen erkennen und messen. Nichts anderes macht das Script.

Diese Messungen sind niemals repräsentativ, sondern geben immer nur die Laufzeit zwischen ihrem System und genau einer Gegenstelle wieder. Auch findet keine Aufschlüsselung nach den Zwischenstationen statt.

Allerdings sollten Sie auch die Risiken und Probleme einer solchen Überwachung in ihre Überlegung mit einbeziehen:

So viel zur Theorie. Was funktioniert das Script nun tatsächlich ?

Funktionsweise

Das Script benutzte die CDO 1.21-Library, die auf jedem Exchange Server vorhanden ist, um sich mit einem Exchange Postfach zu verbinden und mit diesem die Nachrichten zu versenden. Sie sind also gut beraten, wenn Sie hierfür einen eigenen Benutzer im Active Directory mit einem Postfach anlegen und das Script mit eben diesem Benutzernamen starten.

Das Skript verbindet sich mit dem Postfach und liest alle eingegangen Nachrichten im Posteingang. Dabei nutzt er den Datum-Zeitstempel im Betreff und die Empfangzeit von Outlook um die "Roundtrip-Zeit" zu errechnen und auszugeben.

Am Ende sendet das Script eine Mail an die konfigurierte Adresse mit einem besonders aufbereiteten Betreff. Die aktuelle Zeit wird im Betreff so hinterlegt, dass sie bei einer Rücknachricht auch einfach wieder erkannt werden kann. Der Body selbst bleibt bis auf einen kleinen Hinweise, den Sie auch anpassen können, leer.

Diese Ansicht erhalten Sie nur, wenn Sie die Zeile "oMapiMessage.delete" aus dem Skript auskommentieren, da das Skript alle verarbeitete Nachrichten löscht.

CheckSMTP Version 1.x hat die Nachrichten liegen lassen und einen XML-Report erstellt. Damit wurde das  Postfach aber relativ groß und die Verarbeitung sehr aufwändig. Ab CheckSMTPFlow 2.0 werden die Ergebnisse der Nachrichten in einer CSV-Datei und der RRD-Datenbank gespeichert.

Download

checksmtpflow.2.6.vbs.txt

http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.2.10-win32-perl58.zip
Sie benötigen noch RRDTOOL. Ich habe mit der Version 1.2.10 für Windows gearbeitet. In dem Archiv finden Sie RRDTOOL.EXE im Verzeichnis \rrdtool\release.

Kopieren Sie einfach beide Programme in ein Verzeichnis. Das VBScript müssen sie die Erweiterung umbenennen.

Aufgrund der "Ähnlichkeit" der versendeten Nachrichten kann es Spamfilter geben, die diese Nachrichten als Wiederholungen einstufen und entsprechend filtern. Sie müssen dann die Spamfilter entsprechend anpassen.

Konfiguration und Alarmschwellen

Dieser Abschnitt ist wichtig. Ohne passende Konfiguration wird CheckSMTPFlow nicht funktionieren.

Das Script arbeitet mit drei Alarmschwellen, die voneinander abhängig sind:

Beachten Sie bitte, dass die maximale Zeit ohne Statusmeldung nicht kleiner als das Aufrufintervall + die erlaubte Roundtripzeit sein sollte, da sie sonst sehr viele Meldungen erhalten werden. Allerdings müssen Sie vor dem Einsatz vorab im Script einige weitere Randbedingungen einrichten und Parameter konfigurieren.

Randbedingungen

Das Konto darf nicht "verborgen" sein, da sonst CDO das Postfach nicht auflösen kann !

Parameter

Nun der etwas aufwändigere Teil. Das VBscript benötigt einige Parameter, die Sie im Script selbst setzen müssen.

Die Aktivitäten des Scripts werden in einer Protokolldatei und in einer XML-Ausgabedatei abgelegt. Die XML-Datei können Sie z.B. mit dem Internet Explorer einfach anschauen. Das VBScript legt ein passendes Stylesheet gleich mit an. Wenn Sie CheckSMTPFlow später im Regelbetrieb einsetzen, sollten Sie aber die Parameter im Script so ändern, dass nur noch sehr wenig protokolliert wird oder die Dateien löschen.

Aufruf

Damit die Tests auch aussagekräftig sind, sollten Sie das Script natürlich regelmäßig arbeiten lassen. Dazu gibt es wieder zwei Wege.

C:\>cscript CheckSMTPFlow
C:\>cscript CheckSMTPFlow loop

Seit Windows 2000 kann der MSTASK-Planer auch Skripte beim "Startup" starte und permanent laufen lassen. Ich rate aber dennoch eher zum regelmäßigen Aufruf per MSTASK, da damit Abbrüche des Script /(z.B. Exchange Server nicht erreichbar etc.) abgefangen werden

Achten Sie darauf, dass das Script wirklich um Mitternacht losläuft, alle 10 Minuten bis 23:59 wiederholt wird und ein vorher laufender Task abgebrochen wird. Zudem muss der ausführende Benutzer natürlich die Berechtigungen auf das Postfach und zum Versand von Mail haben.

In der Übersicht der geplanten Auftrags sollte der Auftrag dann wie hier angezeigt auftauchen.

Die Arbeit des Scripts können Sie im Protokollfile nachvollziehen. CheckSMTPFlow legt beim Start eine Textdatei an,  in die es alle Aktionen abhängig vom eingestellten Protokollgrad niederschreibt. Sie sollten nach einigen Tagen Betrieb die Protokollfunktionen auf 1 oder 2 reduzieren, so dass nur noch wichtige Meldungen und Fehler aufgeschrieben werden. Dazu muss folgende Zeile angepasst werden

objDebug.target = "file:3 console:6 " ' ie eventlog

Eine höhere Ziffer protokolliert "mehr". so protokolliert folgende Zeile nur noch minimale Meldungen und Fehler

objDebug.target = "file:1 console:1"

Folgende Zeile protokolliert zusätzlich noch Warnungen

objDebug.target = "file:2 console:2"

Auswertung (RRDTOOL oder CSV)

CheckSMTPFlow erlaubt mehrere Möglichkeiten der Auswertung und Nutzung:

Alarmierung per Mail

Das Script überwacht die folgenden beiden Kriterien:

Wenn einer der beiden Kriterien über dem Schwellwert ist, wird eine Nachricht an den entsprechenden Kontakt generiert. So erhalten Sie schnell eine Information bei einem Fehler. Diese Funktion ist losgelöst von den folgenden statistischen Funktionen. Im Postfach tauchen dann Mails in der folgenden Art auf:

Der Empfänger kann natürlich auch ein öffentlicher Ordner, ein Verteiler oder ein SMS-Empfänger sein, solange die Zieladresse als SMTP-Adresse von Exchange erreichbar ist.

CSV-Bericht

Seit Version 2.0 erstellt CheckSMTPFlow keine XML-Datei mehr. Aktuell werden die extrahierten Ergebnisse in einer CSV-Datei abgelegt. Der Aufbau ist sehr einfach und kann problemlos anderweitig ausgewertet werden.

Die Bedeutung der einzelnen Spalten erschließt sich sehr einfach

Grafik mit RRDTool

Viel interessanter ist daher die Übernahem der Messwerte in eine permanente Datenbank, die zudem, auch entsprechende Bilder erstellen kann. Aus diesem Grund kann CheckSMTPFlow die ermittelten Daten auch an das Programm "RRDTOOL" übermitteln, welches die Informationen in eine RRD-Datenbank ablegen und auch wieder ausgeben kann.

RRDTOOL ist ein sehr mächtiges Werkzeug. Die Inhalte der Datenbank können Sie nicht nur als Grafik ausgeben, sondern auch als XML-Datei anderweitig weiter verarbeiten.
Das Erzeugen der Grafik kann CheckSMTPFlow übernehmen,  wobei hier dann für jede Mail eine Grafik erzeugt wird. Besser ist es diesen Prozess zu trennen und das Bild z.B.: durch ein CGI-Script auf dem Webserver dynamische erzeugen zu lassen. Siehe dazu auch RRDTool

ACHTUNG:
Erwarten Sie nicht, dass nach den ersten Aufrufen schon eine Grafik angezeigt wird. RRDTool muss einige Messwerte haben, um die Grafiken sinnvoll aufzubereiten. Was in der Datenbank steht können Sie mit RRDTOOL dump datenbankname als XML-Datei ausgeben. Dies kann nach wenigen Minuten schon Auskunft über die Daten geben. Eine Grafik sollten sie nach ein paar Stunden anschauen können.

Das Script legt beim ersten Start eine RRD-Datenbank an, die folgende Datenreihen enthält:

Die RRD-Datenbank ist natürlich nur ein Speicher für die Messwerte. Dank RRDTOOL könne Sie die Daten jederzeit auch wieder aus der Datenbank als XML-Datei exportieren.

Aktuell werden die Daten in einer RRD-Datei mit drei RRA gehalten. Die Einstellung ist so gewählt, dass ausreichend Messwerte für eine tägliche Ansicht erstellt werden und sowohl 7 als auch 30 Messwerte zusammengefasst werden, um wöchentliche und monatliche Auswertungen mit geringeren Daten zu erhalten. Dies kann im Source natürlich angepasst werden, wenn Sie mehr Daten speichern wollen.

Ausgabe im Web

Natürlich hat nun kein Anwender was davon, wenn die Daten einfach so erfasst und die Bilder erstellt werden. Daher können Sie diese Werte natürlich auch in einem Intranet bereitstellen. und das geht über zwei Wege:

Statische Grafik mit IIS

Das Script erzeugt schon die Grafiken. Definieren sie einfach den Ausgabepfad so, dass Sie die Bilder in einem Verzeichnis des Webeservers ablegen. Dann müssen Sie nur noch eine kleine Webseite oder ein Sharepoint Bild-Webpart erstellen, die diese Grafik verlinkt. Als Vorbereitung legt das Script die Bilder schon in einem eigenen Verzeichnis ".\web" ab, so dass Sie dieses direkt veröffentlichen können:

Da in dem Verzeichnis "nur" Bilder liegen, muss der IIS auch kein Skript ausführen können. Kontrollieren Sie im IIS-Manager aber noch die Authentifizierung und andere Parameter, die sie eventuell für ihr Umfeld anpassen wollen. In diesem Beispiel kann die tägliche Statistik nun mit einem Browser über folgende URLs angezeigt werden:

http://servername/checksmtpflow/checksmtpflow-day.png

Natürlich können Sie das Bild damit auch in ihr Intranet oder jede andere Webseite einbinden.

Grafik mit RRDTool

Wie oben schon beschrieben, können die Grafikgenerierung von CheckSMTPFlow deaktivieren und nur die RRD-Datenbank erstellen lassen. RRDTool lässt sich nämlich wunderbar als CGI-Script oder aus einem Perl-Script innerhalb des Webservers ausführen. Dann werden die Bilder nicht alle 10 Minuten auf Verdacht generiert, sondern der Webserver generiert dieser im Moment des Aufrufs der Seite in Echtzeit aus der Datenbank.

Informationen, wie sie RRDTOOL im IIS oder Apache integrieren, um aus der Datenbank eine Grafik zu generieren, finden Sie auf MRTG Monitoring und den dort vorhandenen Links zu anderen Seiten.

Denkbare Weiterentwicklungen

Weitere Links

Keywords: VBScript Code Tools CheckSMTPFlow