Как посмотреть smtp логи exchange

exchange smtp log tail

Чем мне нравится Linux так это простыми и удобными консольными инструментами. Такими например как tail и grep с помощью которых очень удобно смотреть лог-файлы. Я постоянно пользуюсь именно этими двумя командами для анализа протокола почтового сервера в Linux. К сожалению в Microsoft Exchange эти команды отсутствуют и приходится искать альтернативные инструменты чтобы посмотреть например smtp логи exchange.

О чем речь

Собственно сразу оговорюсь, что речь идет исключительно о просмотре текстовых лог-файлов, в которые данные поступают постоянно построчно. В Linux с помощью команды tail можно вывести например только последние несколько строк либо введя команду tail -f /var/log/имялогфайла выводит на экран непрерывно все поступающие строки в реальном времени. Это очень удобно когда нужно отловить ошибку.

Вторая команда grep в самом примитивном применении (без использования регулярных выражений) позволяет фильтровать вывод той же команды tail, например, только строками содержащими определенный фрагмент. Например:

tail -f /var/log/mail.log | grep user@mail.ru

Такая команда будет выводить непрерывно в реальном времени все строки почтового лога в которых указан адрес user@mail.ru. Либо тот же grep можно использовать в аналогичной конструкции с командой cat для поиска по всему лог-файлу:

cat /var/log/mail.log | grep user@mail.ru

Вот примерно такого же простого функционала хотелось найти и для анализа лог-файлов Exchange. Конечно приведенные в статье примеры вы можете использовать не только для анализа лог-файлов smtp сервиса exchange, но и для анализа любых других текстовых данных, например логов web-сервера и т.п.

PowerShell для просмотра log файлов

Первым приходит на ум использование команд из PowerShell. Первая же команда заменяет сразу и tail и cat, а имя ей Get-Content. В самом простом применении она выведет все содержимое файла на экран:

get-content c:\log\smtp.log

Если мы хотим вывести например только несколько последних строк то добавим ключ -tail.

get-content c:\log\smtp.log -tail 10

Данная команда выведет 10 последних строк. Если необходимо выводить непрерывно все вновь поступающие данные, то добавим ключ -Wait.

get-content c:\log\smtp.log -Wait

Следующая команда позволяет фильтровать содержимое по части строки почти так же как это делает grep. Имя этой команды Select-String. Выполняется она примерно следующим образом:

get-content c:\log\smtp.log | select-string "user@mail.ru"

Данный пример находит все строки в лог файле содержащие user@mail.ru и выводит их на экран. Если необходимо чтобы данные выводились в реальном времени то добавляем ключ -wait как было показано в предыдущем примере.

get-content c:\log\smtp.log -wait | select-string "user@mail.ru"

Вот пожалуй самые близкие аналоги tail и grep в Windows Power Shell. Преимущество использования этих команд в том, что они уже предустановлены в системе и вам не надо ничего придумывать. Но есть конечно и альтернативные варианты с более удобным функционалом.

Сторонние приложения для просмотра log-файлов в Windows

Речь идет о сторонних аналогах команды tail. Наиболее удобным мне показался вариант Tail fro windows, который вы можете найти на сайте https://sourceforge.net/projects/wintail/. Преимущество данной команды в том, что она умеет открывать в одном окне несколько log файлов, а так же умеет подсвечивать выводимые строки по найденному участку, это порой удобнее чем фильтровать.

wintail для просмотра логов в windows

Использовать программу очень просто. Достаточно скачать ее, положить в папку на сервере, затем запускать например wintail.exe «путь\к\лог\файл.log». В меню Highlighing можно указать достаточное количество шаблонов по которым подсвечивать нужные строки. Все файлы автоматически открываются с отмеченной галочкой Follow tail, и отображают поступающие данные в реальном времени.

Смотрим последние SMTP логи Exchange в одном окне

Ну и на последок написал для себя небольшой скрипт запуска wintail, который отображает сразу 2 актуальных лога smtp службы Exchange. Используется на Exchange 2013/2016 но вы можете адаптировать его под свои нужды.

$DATE=Get-Date -UFormat "%Y%m%d"
c:\prg\WinTail.exe "C:\program files\microsoft\exchange server\v15\transportroles\logs\frontend\protocollog\smtpreceive\recv$DATE-1.log" "C:\program files\microsoft\exchange server\v15\transportroles\logs\frontend\protocollog\SmtpSend\SEND$DATE-1.log"

Отредактируйте пути согласно вашим настройкам. Сохраните этот файл с расширением ps1 например на рабочем столе сервера и запускайте просмотр лога smtp службы exchange в пару кликов.

Оцените статью
Добавить комментарий

Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.

  1. Игорь

    Прям то, что искал, спасибо тебе большое, дружище!!!

    Ответить
    1. dkplayer автор

      Рад что мой скромный опыт оказался полезен 🙂

      Ответить
  2. Юрий

    Невозможно оценить статью на 5, потому что «Невозможно проверить Referrer»

    Ответить
    1. dkplayer автор

      Странно, у меня все работает 🙂 Наверное у вас в браузере блокируется скрипт оценки или какие-то его компоненты 🙂

      Ответить
  3. Аноним

    Отличная статья! Как раз то что нужно!

    Ответить