понедельник, 16 декабря 2013 г.

Статистика по почтовым сообщения Exchange 2010

Представим себе ситуацию, когда нам необходимо получить некую статистику по работе почтового сервера.
Например сколько писем было получено или отправлено за тот или иной период времени. Сколько было обработано локальных запросов, а сколько внешних?
Получения данной информации воспользуемся командлетом Get-MessageTrackingLog из EMS

Простой запуск данного командлета выведет на экран содержимое всех (по умолчанию хранится информация за последние 30 дней) лог-файлов почтового сервера (Message Tracking Logs). Вернее не всех, а лишь части, ограниченной тысячью записей. Чтобы снять это ограничение, воспользуемся ключем -resultsize unlimited

Get-MessageTrackingLog -resultsize unlimited

выведет нам список всех записей, доступных в лог-файлах.



Например нам нужно узнать, сколько сообщений было отправлено пользователям домена mail.ru за период с 1 по 10 декабря 2013 года. Для получения данной информации нам нужно установить ограничение временного интервала. За это отвечают параметры Start и End. Так как нам нужно получить список отправленных сообщений, то нам необходимо установить отбор по типу события "Send". Делается это при помощи ключа EventId. В итоге наша команда принимает вид:

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -End "12/10/2013" -EventId "Send"
Добавим вывод только нужных нам полей, например время события, отправитель сообщения, тема сообщения (данное действие делается лишь для наглядности вывода, если необходимо просто подсчитать количество сообщений, то ограничение, накладываемое функцией Select-Object можно не использовать)

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -End "12/10/2013" -EventId "Send" | Select-Object timestamp, sender, recipients, messagesubject

Теперь из списка всех отправленных сообщений выделим те, которые отправлялись получателям домена mail.ru
Для этого добавим выборку

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -End "12/10/2013" -EventId "Send" | Where {$_.Recipients -like "*@mail.ru"} | Select-Object timestamp, sender, recipients, messagesubject

Теперь на осталось только посчитать строчки, которые у нас получились.
Сделать это можно двумя способами.

1) воспользоваться командлетом Measure-Object

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -End "12/10/2013" -EventId "Send" | Where {$_.Recipients -like "*@mail.ru"} | Select-Object timestamp, sender, recipients, messagesubject | Measure-Object

2) передать вывод полученной нами команды в переменную, для которой затем воспользоваться командой count


$col = Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -End "12/10/2013" -EventId "Send" | Where {$_.Recipients -like "*@mail.ru"} | Select-Object timestamp, sender, recipients, messagesubject

$col.count

При должной фантазии можно получить вывод разнообразной интересной информации. Например получить количество всех сообщений полученных из вне за период с 1 по 10 декабря 2013 года.
Для этого воспользуемся конструкцией вида:

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -End "12/10/2013" -EventId "Receive" | Where {$_.Sender -notlike "*@yourdomain.com"} | Select-Object timestamp, sender, recipients, messagesubject | Measure-Object

*yourdomain.com нужно заменить на имя вашего почтового домена.
В общем, как мне кажеться, суть понятна :)

А если переформулировать задачу и попробовать получить TOP-10 адресов, которые отправили самое большое число сообщений за  период с 1 декабря 2013 года.
Для начала получим список отправленных сообщений и выведем значения полей Sender и MessageId :

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -EventId "Send" | Select-Object Sender, MessageId
Затем из полученного списка возьмем только уникальные строки:

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -EventId "Send" | Select-Object Sender, MessageId | Get-Unique -AsString
Сгруппируем полученный результат по отправителю:

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -EventId "Send" | Select-Object Sender, MessageId | Get-Unique -AsString | Group-Object -Property Sender
Отключим отображение поля MessageId, оно нам больше не нужно. Затем отсортируем выведенный результат в порядке уменьшения количества сообщений.

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -EventId "Send" | Select-Object Sender, MessageId | Get-Unique -AsString | Group-Object -Property Sender | Select-Object name,count | sort count -desc
Ну и последним шагом оставим лишь первые TOP-10 отправителей и наведем небольшую красоту:

Get-MessageTrackingLog -resultsize unlimited -Start "12/01/2013" -EventId "Send" | Select-Object Sender, MessageId | Get-Unique -AsString | Group-Object -Property Sender | Select-Object name,count | sort count -desc | select -first 10 | ft -auto


P.S. для справки:
операторы сравнения
Get-Unique
Group-Object
Select-Object

Комментариев нет:

Отправить комментарий