Exchange: Wie liest man die Nachrichtenverfolgung

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:

Nachrichtenverfolgung

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

image

Hier die Ansicht aus Outlook

image

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:

image

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:

image

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:

image

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.

8 thoughts on “Exchange: Wie liest man die Nachrichtenverfolgung”

  1. Kann man auch als Sender alle Nutzer einer Domain wählen?

    Beispiel:
    Get-MessageTrackingLog -Start „01/01/2022 09:00:00“ -End „05/11/2022 17:00:00“ -Sender „*@firma.de“ | ConvertTo-Html > „C:\Users\Admin\Documents\messagetrack.html“

    Bei mir ist das Ding nämlich leer.

    Reply
  2. Hallo Frank,
    bei mir werden nur die letzten 30 Tage angezeigt, liegt es an der Konfiguration vom TransportService?

    MessageExpirationTimeout : 2.00:00:00
    MessageRetryInterval : 00:15:00
    MessageTrackingLogEnabled : True
    MessageTrackingLogMaxAge : 30.00:00:00
    MessageTrackingLogMaxDirectorySize : 1000 MB (1,048,576,000 bytes)
    MessageTrackingLogMaxFileSize : 10 MB (10,485,760 bytes)

    Reply
  3. Hallo.
    Jetzt sehe ich, dass Exchange 2010 die Mails des entsprechenden Anwender erreicht haben.
    In seinem Postfach tauchen diese aber trotzdem nicht auf.
    Wie gehe ich jetzt weiter vor?
    Der Anwender bekommt von allen möglichen Domains Mails und kann auch versenden.
    Aber in der Domain, in der er angelegt wurde und arbeitet, da erreichen ihn keine Mails.
    Also user001@xyz.de wurde in der Domäne xyz.de angelegt. Es erreichen ihn aber keine Mails aus der Domäne xyz.de.

    Reply
  4. Inwiefern unterscheidet sich das Konstrukt:
    Get-MessageTrackingLog -Start $start -End $end | Where-Object {$_.MessageSubject -match „test“}
    vom simpleren:
    Get-MessageTrackingLog -Start $start -End $end -MessageSubject „test“
    ???

    Bei längeren Zeiträumen (z.B. im letzen Monat) kann es zu sehr großen Listen des ersten Befehls kommen mit dem Fehler:
    Warnung: Es sind mehr Ergebnisse verfügbar, als aktuell angezeigt werden. Erhöhen Sie den Wert des ResultSize-Parameters, um sie anzuzeigen.

    Da kann man natürlich noch ein „-ResultSize unlimited“ reinquetschen…
    Oder eben gleich das gewünschte -MessageSubject mitgeben und sich den zweiten Befehl sparen.

    Reply
  5. Wenn man den Fehler „{[Stage: PostCreate];StoreDriver.Rules; message is deleted by mailbox rules}“ findet, aber das Postfach keine Rule hat, kann man sich ansehen welche Rule damit gemeint ist?

    Reply
  6. Hallo Frank

    ich bekomme beim ausführen der Grafischen Nachrichtenverfolgung in Exchange 2013 folgende Fehlermeldung:

    Das Eingabeobjekt kann an keine Parameter des Befehls gebunden werden, da der Befehl keine Pipelineeingaben akzeptiert oder die Eingabe und deren
    Eigenschaften mit keinem der Parameter übereinstimmen, die Pipelineeingaben akzeptieren.
    + CategoryInfo : InvalidArgument: (DUFEX03:PSObject) [Get-MessageTrackingLog], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Get-MessageTrackingLog
    + PSComputerName : dufex03.xxx.xxx

    Hast du eine Idee wo der Fehler liegt
    Danke Alfred

    Reply

Leave a Comment