Zur Fehleranalyse bei Mail Problemen wird immer gern die Nachrichtenverfolgung (Message Tracking) benutzt um Fehler zu finden. Sei es weil ein Benutzer meldet dass er eine Mail nicht bekommen hat oder weil gerade alle Benutzer keine Mails empfangen oder senden können.
Um die Ursache eines Problems zu finden (oder dem Benutzer nachzuweisen das er die Mail bekommen hat), muss man allerdings wissen, was die einzelnen Einträge in der Nachrichtenverfolgung zu bedeuten haben. In diesem Beitrag geht es daher um die wichtigsten Merkmale in der Nachrichtenverfolgung.
Vorwort
Ich nutze hauptsächlich die Exchange Management Shell um die Message Tracking Logs zu durchsuchen. Mit ein bisschen Übung kommt man mit der Shell schneller zum Ziel als mit der grafischen Oberfläche die bei Exchange 2010 existiert. Ein weiterer Grund ist, das die Nachrichtenverfolgung mit der GUI in Exchange 2013 in der Form nicht mehr existiert (Abhilfe weiter unten). Die Shell ist also das Mittel der Wahl. Mit Exchange 2013 hat sich auch der Nachrichtenfluss geändert, da die Transport Rolle in die Mailbox Rolle integriert wurde, einen Überblick über den Nachrichtenfluss gibt es hier.
Grundlagen
Mails werden anhand der MessageID identifiziert. Um den Weg einer Mail zu verfolgen, sollte nicht der Betreff, Absender oder Empfänger verwendet werden, sondern die MessageID. Die MessageID ist für jede Mail eindeutig, Empfänger, Betreff und Absender können gleich sein, wie folgendes Beispiel zeigt:
In dem Screenshot sieht man eine Nachricht mit dem Betreff „Testmail 1“, die 10 Mal im Log auftaucht, augenscheinlich handelt es sich hier um eine einzige Mail, tatsächlich sind es aber 3 unabhängig von einander gesendete Mails, welches an der unterschiedlichen MessageID zu erkennen ist
Hier die Ansicht aus Outlook
Es gilt also sich nicht allein auf Betreff, Absender oder Empfänger zu verlassen, möchte man eine Mail gezielt verfolgen, sollte die MessageID verwendet werden, hier das Beispiel zu der Mail um 21:24 Uhr:
Nur die oben gezeigten Einträge gehören zu der Mail von 21:24.
Message Tracking Log durchsuchen
Um per Shell das Message Tracking Log zu durchsuchen wird das CMDlet „Get-MessageTrackingLog“ verwendet. Der Befehl an sich bietet schon einen guten Parametersatz um die Ausgabe entsprechend einzuschränken. Hier findet sich die Dokumentation mit allen möglichen Parametern.
Mit welchen Parametern „Get-MessageTrackingLog“ aufgerufen wird, hängt natürlich davon ab, was man sehen oder erreichen möchte. Hier also ein paar einfache Beispiele:
Alle Mails der letzten 24 Stunden:
$start = (get-date).AddDays(-1) $end = get-date Get-MessageTrackingLog -Start $start -End $end
Alle Mails an administrator@frankysweb.de
Get-MessageTrackingLog -Recipients administrator@frankysweb.de
Alle Mails an administrator@frankysweb.de binnen der letzten 10 Minuten
$start = (get-date).AddMinutes(-10) $end = get-date Get-MessageTrackingLog -Start $start -End $end -recipients administrator@frankysweb.de
Mails binnen der letzten Woche mit dem Betreff „Test“
$start = (get-date).AddDays(-7) $end = get-date Get-MessageTrackingLog -Start $start -End $end | Where-Object {$_.MessageSubject -match "test"}
Mails von testmail@frankysweb.de an administrator@frankysweb.de binnen der letzten 12 Stunden mit dem Betreff „Test“
$start = (get-date).AddHours(-12) $end = get-date Get-MessageTrackingLog -Start $start -End $end -sender testmail@frankysweb.de -recipients administrator@frankysweb.de| Where-Object {$_.MessageSubject -match "test"}
Wenn die Tracking Logs mehrerer Server durchsucht werden sollen, muss noch ein weiteres CMDLet vorangestellt werden.
Für Exchange 2010:
Get-TransportServer | Get-MessageTrackingLog
Für Exchange 2013:
Get-TransportService | Get-MessageTrackingLog
Message Tracking Log deuten
Neben der Spalte MessageID gibt natürlich weitere wichtige Spalten die dabei helfen den Weg einer Mail nachzuvollziehen. Die wohl nützlichsten Spalten und eine Erklärung was sie bedeuten:
- TimeStamp: Enthält den Zeitpunkt des Eintrags, jeder Eintrag bekommt einen eignen Zeitpunkt, so lassen sich auch Probleme mit hohen Durchlaufzeiten analysieren
- Source: Hier wird die Exchange Komponente angezeigt, die für das Ereignis zuständig war
- EventID: Hier wird der Ereignistyp angezeigt, als Beispiel SEND / RECEIVE
- Recipient: Enthält den oder die Empfänger der E-Mail
- Sender: Enthält den Absender der E-Mail
- MessageSubject: Enthält den Betreff der E-Mail
Alle Einträge der Nachrichtenverfolgung sind im Technet beschrieben. Der entsprechende Artikel findet sich hier. Hier mal ein Beispiel:
In der ersten Zeile sehen wir das eine Mail via SMTP (Source = SMTP) empfangen wurde (EventID = Receive). Ebenfalls ist erkennbar wer Empfänger und Absender der Mail ist. Die zweite Zeile zeigt das die Mail in das Postfach (Source = STOREDRIVER) zugestellt wurde (EventID = Deliver). An der MessageID ist erkennbar das es sich dabei um die gleiche Mail handelt und nicht um zwei Mails mit gleichem Betreff etc.
Das Beispiel oben zeigt die Konsole von Exchange 2010, die es in der Form bei Exchange 2013 nicht mehr gibt. Allerdings habe ich ein Powershell Script erstellt, welches ebenfalls eine GUI für Exchange 2013 zur Verfügung stellt:
https://www.frankysweb.de/exchange-2013-gui-fr-die-nachrichtenverfolgung/
Nächstes Beispiel:
Wie schon weiter oben erwähnt wird es hier recht schwierig die Mail ohne das Feld MessageID zuzuordnen, da es sich hier offensichtlich um mehrere Mails handelt, die nur den gleichen Absender, Empfänger und Betreff haben. Das sieht man häufig wenn die erste Mail nicht angekommen ist und es daher mehrmals versucht wird.
In diesem Beispiel sind aber die EventIDs ganz interessant: HARECEIVE, HADISCARD und HAREDIRECT lassen erkennen, dass es sich um eine Umgebung mit mehreren Mailbox-Servern (Exchange 2013) handelt. Hier ist also Shadow Redundancy im Spiel.
Es ist sehr empfehlenswert sich intensiv mit der Nachrichtenverfolgung zu beschäftigen, so können Probleme meist schnell identifiziert werden.