Exchange MessageTracking like a Ninja

7 września 2017 at 19:49

Dzisiaj na tapetę weźmiemy Message Tracking czyli przeszukiwanie logów poczty Microsoft Exchange dotyczących maili krążących pomiędzy serwerami pocztowymi.

Niby temat znany i na pierwszy rzut oka niewiele więcej odkrywczego w nim można napisać, ale jestem przekonany że prezentowana treść może się przydać w niejednym przypadku :)

Standardowe podejście w przypadku Message Trackingu to odpalenie w sesji Powershella z połączeniem do serwerów Exchange’a polecenia w stylu:

Ewentualnie dodanie warunków zawężających przeszukiwanie (np. data początku, data końca, Event SMTP itd.)

O ile w przypadku konkretnego adresu e-mail nadawcy lub odbiorcy sprawa jest banalnie prosta bo wystarczy wykonać polecenia w stylu:

O tyle w przypadku chęci wyszukiwania wiadomości mailowych wysłanych lub odebranych z całej domeny pocztowej ‚X’ ulega znacznej komplikacji. Dlaczego? Ano dlatego, że nie ma stosownego przełącznika określającego domenę. Ba nie ma nawet stosownego filtra, więc trzeba wykorzystać coś z czego każdy świadomy Administrator korzysta w ostateczności = warunek „where” – nie tego Tygryski zdecydowanie nie lubią :(

W przypadku naprawdę dużych środowisk pocztowych i szerokiego zakresu wyszukiwania należy oczekiwać, że zapytanie potrwa kilka godzin jeśli nie dni a przy okazji możemy otrzymać Out-Of-Memory…

A co jeśli np. potrzebujemy wykonać Message Tracking dla kilkudziesięciu różnych domen pocztowych? Kleić „like” w warunku? Puszczać osobne wyszukiwanie dla każdej domeny osobno? Jeśli komuś nie szkoda życia to niech próbuje… 😉

 

Ale można do tematu podejść bardziej kreatywnie i zamiast robić coś „jak wszyscy” – zrobić to jak IT Ninja 😉

Zadanie – wyszukanie informacji o wiadomościach e-mail, które wyszły z naszej organizacji do”Grupy Agora/Wyborcza”. W sposób tradycyjny – za miesiąc może znajdziecie wyniki 😉

  1. Należy pobrać i zainstalować narzędzie Logparser 2.2
  2. Należy zbudować odpowiednie zapytanie i składnię. Fakt to jest najtrudniejsze zadanie, które nastręcza trochę problemów zwłaszcza na początku, ale uwierzcie – warto. Różnica prędkości jest po prostu piorunująca w takich przypadkach.
  3. Wy-eksportować wyniki i cieszyć się zaoszczędzonym czasem :)

Więc do dzieła – wiadomości kilka.

  • LogParser standardowo instaluje się w ścieżce „C:\Program Files (x86)\Log Parser 2.2”
  • Składnia opiera się na wywołaniu narzędzia z „filtrem” oraz odpowiednimi parametrami wskazującymi na typ i miejsce składowania danych wejściowych oraz typ danych wyjściowych.
  • Część atrybutów pochodzących z plików wejściowych należy skonwertować do odpowiedniego typu/formy aby była poprawnie wyświetlana i interpretowana.

W praktyce sprowadza się to do:

Przy czym przy eksperymentach z LogParserem na pewno natraficie na kilka powszechnych „problemów”:

  • Niepoprawne wyświetlanie polskich znaków. Należy użyć przełącznika:

  • Błędy przy początkowych liniach w plikach MessageTrackingu. Ominięcie 4 pierwszych linii:

  • Podgląd na żywo wyników. Należy użyć poniższego a w wynikach zaznaczyć „Autoscroll”:

  • Wyświetlenie daty/czasu. To chyba największy problem, żeby dokonać odpowiedniej konwersji dat/czasów zapisywanych w plikach MessageTrackingu (ahhh Ci programiści…):

 

Dla niewytrwałych załączam niżej gotowca:

Użyte dodatkowo warunki na maile, które opuściły naszą organizację:

Natomiast wskazanie lokalizacji z logami MessageTrackingu to:

Standardowo ścieżka to „C:\Program Files\Microsoft\Exchange Server\TransportRoles\Logs\MessageTracking

Cała reszta to już tylko budowanie zapytania z warunkami na kolejne domeny np:

Zauważmy, że w składani LogParsera jest podobna bardziej do T-SQL niż do Powershella bo nie używamy tutaj wildcarda w formie gwiazdki ‚*’ tylko w formie procenta ‚%’

 

A jakie są efekty? Kilkadziesiąt minut i wyniki gotowe na ekranie, wyświetlane na żywo :)