четверг, 18 сентября 2008 г.

Как посчитать количество сообщений обработанных сервером Exchange?

Перед тем как внедрять Exchange Server в организации необходимо рассчитать мощность сервера. Для этого используются утилиты типа LoadSim или JetStress. Они создают нагрузку на сервер по заданным вами параметрам, и вы можете определить, удовлетворяет ли ваш сервер заданным или планирующимся нагрузкам.
А как быть когда вам нужно измерить текущую нагрузку на сервер? Соответствует ли она запланированной или нагрузка возросла?
Что если ваш сервер загружен почтовым потоком. Как определить, возрос почтовый поток или вас атакуют спамеры?
Нужно анализировать логи! Логично, но как и какие? Сложность так же заключается в том, что Microsoft не предоставляет инструмента для подобного анализа.
Для решения поставленной задачи нам понадобится утилита Log Parser. Я уже писал об этой утилите и о том как ей пользоваться для анализа журналов безопасности.
Аудит журнала безопасности или Чем анализировать события аудита NTFS
Теперь мы используем ее для анализа Message Tracking логов.
Для тех, кто хоть раз сталкивался с проблемами хождения почты наверняка знаком с инструментом Message Tracking Center (MTC). Лично я не раз (и не два) использовал этот инструмент для определения дошло ли письмо до адресата или нет. В организациях где больше одного Exchange Server'а данный инструмент вообще не заменим. Он сможет показать весь путь письма от его возникновения и до окончания передачи. Через какие сервера, внутри организации, он проследовало письмо или где оно застряло.
Работает этот инструмент очень просто. Он анализирует логии, в которых храниться вся информация, которая происходит с письмом от момента его возникновения и до момента доставки или не доставки. К сожалению единственное, что этот инструмент не делает это не может подсчитать количество сообщений. А производя трекинг не может вывести более тысячи записей. Но логи, с которыми он работает можно проанализировать вручную при помощи утилиты Log Parser. Скачать утилиту можно по следующей ссылке - http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

Где лежат лог фалы можно посмотреть в свойствах сервера, через оснастку ESM. Как показано на скриншоте.
Если бы не их объем, то легко можно было бы открыть их в Microsoft Excel и наложить фильтр по нужным полям, но к сожалению Excel 2003 может открыть только 65535, а в Excel 2007 только 1048576, строк. Этого может оказаться мало. Да и времени на обработку уйдет гораздо больше. Если уметь пользоваться Log Parser, то проще воспользоваться им.
Для того, что бы собрать необходимые данные я использовал следующую строку запроса:

LogParser.exe" "SELECT MSGID INTO result.txt FROM 20080902.log GROUP BY MSGID " -i:TSV -nSkipLines:2 -o:CSV
Программа сделает выборку из файла 20080902.log по полю MSGID, сгруппирует их и запишет результаты в файл result.txt. В лог файле две первые строчки являются служебными и их нужно пропустить. Для этого мы используем параметр -i:TSV -nSkipLines:2, а параметр -o:CSV сообщает программе, что результаты нужно записать в формате CSV.
Для того, что бы можно делать выборку за определенный период времени я использую строку такого вида:
LogParser.exe" "SELECT Time, MSGID INTO result.txt FROM 20080902.log WHERE Time LIKE '8:%%' GROUP BY MSGID, Time" -i:TSV -nSkipLines:2 -o:CSV
Обратите внимание, в части SELECT добавилось поле Time. В запросе появился фильтр WHERE Time LIKE с параметром '8:%%', который сообщает, что нас интересует все, что начинается на 8:. В поле Time время храниться в следующем виде “8:0:0”, без незначащих нулей перед цифрой.
Т.к. мы добавили в запрос новое поле, строка группировки получила вид GROUP BY MSGID, Time.
В результате мы получили выборку только тех данных которые нам нужны. Все, что осталось сделать это посчитать кол-во строк. Это можно сделать при помощи той же утилиты, но в качестве входного файлы мы даем ей наш результирующий файл.
LogParser.exe" "SELECT COUNT(*) INTO result_COUNT.txt FROM result.txt " -i:CSV -o:CSV
В результате мы получим файл, который будет содержать количество строк, а в нашем случае количество писем, обработанных сервером за определенное время.
После этого я вставил результирующие данные в Excel и сделал график (см. рисунок в начале статьи), который можно отправлять руководству.

7 комментариев:

  1. Миша, хороший пост, только нужно вставить было в конце эту таблицу и график.

    ОтветитьУдалить
  2. Коллеги, спасибо за ваши комментарии. немного отредактировал пост, думаю так лучше. :)

    ОтветитьУдалить
  3. кажись в строчке
    LogParser.exe "SELECT MSGID INTO result.txt FROM 20080902.log WHERE GROUP BY MSGID " -i:TSV -nSkipLines:2 -o:CSV

    WHERE - лишнее
    ?

    ОтветитьУдалить
  4. Да, это опечатка. Спасибо вам, что обратили внимание. Исправленно!

    ОтветитьУдалить
  5. Просто интересно ... а как рассчитать колличество спама, который свалится на твой почтовый сервер? Цифра может быть от 50% до 99% от всех сообщений ... а это огого разброс.
    (Кстати отсюда можно рассчитывать необходимость транспортного сервера) При это спаммеры процесс чисто случайный и зависит от очень многих параметров (даже от положения Луны) :)

    ОтветитьУдалить
  6. "свалится" - мы говорим о предсказании? :)

    ОтветитьУдалить