QStatus interaktiv

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.

Wenn Sie den Microsoft Operation Manager einsetzen, dann ist QStatusMOM vielleicht eine interessante Option.

Diese Skript funktioniert aktuell nur mit Exchange 2000/2003 und nicht mit Exchange 5.5 oder 2007, da es per WMI eine Verbindung zum Server aufbaut.

Für jeden Administrator sind die Warteschlangen einer Exchange Umgebung kritische Punkte, die einer Überwachung bedürfen. Wann immer irgendwo der Nachrichtenfluss stoppt, sollten Sie als Administrator am schnellsten Bescheid wissen, wenn ein Knoten in der Leitung ist. Leider sind die Hilfsmittel von Exchange selbst hier nicht besonders berauschend. Zwar hat der Exchange 2003 System Manager die Warteschlangen aus dem virtuellen SMTP-Server heraus auf die Ebene des Servers hoch geholt, aber wenn Sie einen schnellen Überblick über mehrere Server benötigen, dann heißt es wieder viel herum klicken.

Natürlich erlauben Programm wie MOM  und PERFMON die Überwachung der Warteschlange, aber manchmal sind viele Elemente in der Warteschlange während einer Spitzenzeit "normal" während Sie ein anderes mal als aufgelaufene Objekte zu melden wären. Die interessante Angabe des Alters und damit die "Verweildauer" in der Warteschlange ist so nicht zu erkennen.

Alternativ könnten Sie natürlich das Diagnoseprotokoll hoch schrauben und im Eventlog nach den Problemmeldungen des Connectors suchen. So werden aber auch temporäre Aussetzer gemeldet, die vielleicht nur einige Minuten anhalten, z.B. beim Patchen oder Durchstarten eines Servers. Letztlich ist das Alter der ältesten Mail meiner Meinung nach das ausschlaggebende Kriterium.

Warteschlangen per WMI überwachen

Seit Exchange 2000 kann aber mittels WMI sehr einfach der Status einer Warteschlange ausgelesen werden. Kombiniert man diese Abfrage noch mit einer Liste der gewünschten Exchange Servern kann sehr schnell manuell ein Überblick gewonnen werden. Wenn es die Bandbreite und Performance erlaubt, könnte so eine Überprüfung auch periodisch ausgeführt werden. Die Ausgabe könnte dann als Webseite (XML/HTML) erfolgen oder bei Überschreitung von Grenzwerten einen Alarm auslösen.

Interessant sind dabei zwei Namensräume innerhalb WMI

  • ExchangeQueue2Provider (Root\MicrosoftExchangeV2)
    Dieser Zweig enthält die Klassen "Exchange_SMTPLink", "Exchange_SMTPQueue" und "Exchange_QueuedSMTPMessage", mit der umfangreiche EInblicke in die Warteschlange samt der darin liegenden Nachrichten möglich sind
  • ExchangeQueueProvider (Root\CIMV2\Applications/Exchange)
    Dieser Bereich erlaubt seit Exchange 2000 den Zugriff auf die Klassen "ExchangeLink" und "ExchangeQueue".

Für den Zweck einer Warteschlangenüberwachung eignet sich Root\CIMV2\Applications/Exchange am besten, da damit sowohl auf Exchange 2000 als auch 2003 zugegriffen werden kann und die erforderlichen Daten bereit gestellt werden.

So funktioniert es

Das Skript besteht im wesentlichen aus einer Funktion, welche eine WMI-Verbindung mit dem Server aufbaut, durch alle Warteschlangen durchläuft und die gewünschten Daten extrahiert und in eine XML-Datei abspeichert. Das eigentliche Hauptprogramm initialisiert einige Variablen und sucht im Active Directory alle Exchange Server um dann für jeden Server die Funktion aufzurufen. Natürlich kann sowohl über LDAP-Filter die Serversuche eingeschränkt oder auch eine statische Liste genutzt werden.

Die XML-Datei kann direkt auf den Webserver abgelegt werden. Die Formatumwandlung macht der Browser unter Zuhilfenahme des entsprechende Stylesheets. Zudem können Sie einen globalen Grenzwert für ein Alter in Minuten einstellen, so dass bei einer Überschreitung dieser Grenze eine Aktion ausgelöst werden kann.

Die Ausgabe

Sie können sich den "Schnappschuss" ihrer Warteschlangen einfach mit dem Internet Explorer anzeigen lassen

In dem Beispiel sehen Sie natürlich nur einen Server, bei dem anscheinend ein Mailboxstore gerade keine Mails annehmen kann. Die Sortierung schiebt die Warteschlangen mit dem ältesten Eintrag nach oben. Aber dies kann im Stylesheet natürlich sehr einfach geändert werden.

Zudem können Sie einen Grenzwert konfigurieren, bei dessen Überschreitung eine Mail an eine vordefinierte Adresse gesendet wird. Die Mail enthält dann alle Warteschlagen mit Nachrichten, die älter als die eingestellte Grenze sind.

Damit der Mailversand funktioniert, muss auf dem Server mindestens ein Windows-SMTP-Server installiert sein.

Das Skript

Das Skript kann natürlich nur eine Momentaufnahme ihrer Warteschlangen ermitteln und je mehr Server es sind, desto mehr Zeit wird es auch benötigen. für schnelle Meldungen sind daher aktive Überwachungen wie MOM2005 und Eventlogs besser geeignet. Aber besonders wenn Sie ihre Exchange Connectoren aufgrund veränderter WAN-Verbindungen umstellen oder andere größere Änderungen der Leitwege (IP aber auch Exchange) vornehmen, dann kann dieses Skript hilfreich bei der Erkennung "Sitzenbleibern" sein.

Dieses Skript ist kein öffentlicher Download
Dieses Skript ist nicht public, da es in "Single Server" Umgebungen eigentlich nicht gebraucht wird und der Einsatz umso interessanter wird, je mehr Server in der Exchange Organisation sind. Und ist hier genau mein Tätigkeitsbereich.
Informationen, warum, einige Skripte nicht öffentlich sind, finden Sie auf nicht public.

Ehe das Skript aktiv genutzt werden kann, müssen ein paar Parameter eingestellt werden.

  • MaxAge-Grenze
    Es muss eine Maximalzeit definiert werden, die eine Mail in der Warteschlange liegen darf. Erst wenn eine Mail länger in der Warteschlange verweilt, geht das Skript von einem Fehler aus.
  • Timezone
    Die Abfrage per WMI liefert eine GMT-Zeit. Leider gibt es in VBScript keine einfache Möglichkeit, von der lokalen Zeit auf GMT umzurechnen. Daher habe ich den einfachen Weg gewählt, die Differenz einfach als Konstante anzugeben. Hier ist während der Sommerzeit in Deutschland einfach "2" einzutragen und im Winter eine "1".
  • Daten für Mail
    Wenn QStatus eine Mail im Fehlerfall generieren soll, dann sind hier die entsprechenden Daten zu hinterlegen. Als VBScript ist es am einfachsten eine Mail per CDO/MAPI zu versenden. Eine Mail funktioniert natürlich nur dann, wenn zur Übertragung keine Dienste erforderlich sind, die durch den Fehler beim Connector ein Problem haben

Und dann müssen Sie natürlich dafür sorgen, dass das Skript regelmäßig gestartet wird.

Weitere Links