Bliżej chmury publicznej - Przeglądanie oraz eksport logów Message Tracking z Exchange Online

Każdy administrator systemu pocztowego Exchange Server zarówno On-Premise jak i Online prędzej czy później spotka się z pytaniem od użytkownika: Ktoś wysłał mi wiadomość kilka godzin temu, natomiast ja w dalszym ciągu jej nie otrzymałem. Czy możesz mi pomóc? W praktyce wygląda to tak, że wiadomość taka została z jakiejś przyczyny odrzucona, nastąpiła pomyłka/literówka w adresie odbiorcy lub pojawił się inny powód niedostarczenia wiadomości. W przypadku pojawienia się takich problemów z pomocą przychodzi narzędzie Message Tracking, które jest dostępne w Exchange Online w Office 365.

Message Tracking

Za pomocą narzędzia Message Tracking administrator systemu pocztowego może ustalić przyczynę problemów związanych z dostarczeniem poczty. W szczegółowych logach MT znajdują się informacje takie jak: adres nadawcy, adres odbiorcy, message id, status wiadomości oraz data. Dostęp do takich informacji można uzyskać za pomocą interfejsu Webowego lub za pomocą PowerShella.

Message Tracking via Web

W celu uzyskania dostępu do Message Tracking za pomocą interfejsu webowego należy zalogować się do systemu Exchange Online do konsoli zarządzającej za pomocą adresu https://outlook.office365.com/ecp/ przy użyciu poświadczeń administracyjnych. Następnie przejść do zakładki mail flow -> message trace. W zakładce message trace (Rys.1) należy wprowadzić odpowiednie parametry takie jak zakres czasowy (date range), status dostarczenia (delivery status), dodatkowo można wskazać konkretnego nadawcę (dender) lub odbiorcę (recipient)

Rys. 1. Message Tracking – parametry

Po wyborze odpowiednich parametrów przechodzimy do następnego etapu za pomocą przycisku search. Pojawi się nowe okno Message Trace Results w którym zostanie wyświetlona lista wyszukanych wiadomości (Rys. 2)

Rys. 2. Message Tracking – listing wyszukanych wiadomości

Po wyszukaniu odpowiedniej wiadomości można podejrzeć szczegółowy status danej wiadomości za pomocą przycisku „ołówka”. We właściwościach wiadomości zostanie wyświetlona szczegółowa informacja na temat zdarzeń dla danej wiadomości, które zostały przedstawione na Rysunku 3

Rys. 3. Message Tracking – szczegóły dostarczenia wiadomości

W przypadku gdy okres przeszukiwania wiadomości byłby starszy niż 7 ostatnich dni Message Tracking wykorzysta mechanizm historycznego wyszukiwania i prześle podsumowanie na wskazaną skrzynkę pocztową. Pojawią się tutaj dodatkowe opcje w których trzeba określić czy jest to wiadomość wychodząca czy przychodząca do naszego systemu (Direction), adres IP (Original client IP address), tytuł raportu (Report Title) oraz adres na który zostanie wysłany raport (Notification email address).

Message Tracking via PowerShell

Dokładnie takie same czynności jakie zostały omówione w sekcji Message Tracking via Web można wykonać za pomocą wiersza poleceń w PowerShellu. Mamy tutaj do dyspozycji dwa rodzaje komend:

  • Get-MessageTrace – komenda wyszukuje wiadomości z ostatnich 7 dni.
  • Start-HistoricalSearch – komenda uruchamia wyszukiwanie historycznych wiadomości do 90 ostatnich dni i przesyła raport na wskazany adres mailowy.

W celu wyszukania wszystkich wiadomości z ostatnich 48 godzin należy użyć poniższego polecenia (Rys. 4)

 Get-MessageTrace | Select SenderAddress,RecipientAddress,Received,Status,Subject

Rys. 4. Wyszukiwanie wiadomości z ostatnich 48 godzin za pomocą PowerShella

Skrypt

Należy pamiętać o tym, że logi z Message Tracking w Exchange Online przechowywane są do 90 dni po tym okresie są automatycznie kasowane. Natomiast w Exchange On-Premise to administrator decyduje jak długo informacje z Message Tracking są przechowywane.

Często spotykam się z sytuacją kiedy trzeba wrócić do historii wiadomości starczych niż 90 dni. W takim wypadku należy wdrożyć rozwiązanie, które przenosi bieżące logi z Message Tracking „na bok” i w każdym momencie możemy do nich wrócić.

Poniższa część skryptu łączy się do naszej subskrypcji za pomocą wskazanych poświadczeń. Skrypt pobiera logi z Message Tracking z ostatniego dnia i je eksportuje, zapisując je do lokalnego środowiska. Dalej logi można przechowywać w dłuższym czasie niż 90 dni. Skrypt taki należy uruchamiać codziennie za pomocą zaplanowanych zadań. Do uruchamiania skryptów wymagana jest instalacja Windows Azure Active Directory for Windows Powershell.

 $user = "login@nazwasubskrypcji.onmicrosoft.com"
$pass = "password" | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($user,$pass)
Connect-MsolService -Credential $cred
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid -Credential $cred -Authentication Basic –AllowRedirection
Import-PSSession $session -AllowClobber
$from=(Get-Date -Hour 0 -Minute 0 -Second 0).AddDays(-1)
$to=(Get-Date -Hour 23 -Minute 59 -Second 59).AddDays(-1)
$logi=((Get-Date).AddDays(-1)).ToString("yyyy/MM/dd")
Get-MessageTrace -StartDate $from -EndDate $to | select SenderAddress, RecipientAddress, Received, Status, Subject | Out-File c:\Logs-$logi.txt
Get-PSSession | Remove-PSSession

Podsumowanie

W Exchange Online w Office 365 brakuje mechanizmu przeszukiwania logów z Message Tracking starszych niż 90 dni w związku z tym warto zastanowić się uruchomieniem skryptu eksportu logów „na bok” np. do lokalnego środowiska lub innego zasobu uruchomionego na Azure.

Jest jeszcze jeden mankament o którym należy pamiętać: w Exchange Online nie ma typowych logów SMTP znanych z Exchange On-Premises, które były włączane na connectorach. Mam nadzieję, że w przyszłości również w Exchange Online mechanizm taki zostanie zaimplementowany

/Bartłomiej Prokocki