Нам было поручено отслеживать использование Exchange 2003, похоже, что в Exchange 2003 Standard нет встроенного компонента отчетности. Означает ли это использование сторонних служб отчетности или я могу использовать приемники событий или журналы, чтобы передавать данные об использовании в SQL Server для отложенной обработки?
Больше всего мне хотелось бы знать следующие области:
Я также открыт для предложений хороших показателей для измерения восприятия функций конечным пользователем, например, количество контактов, элементов календаря, запросов на собрания, заметок и т. Д. В магазине.
Я решил использовать PowerShell для сбора статистики из Exchange, поскольку при переходе к Exchange 2007 и PowerShell 2.0 появилось больше возможностей для сбора данных, и я могу опираться на существующие основы.
Сценарий запускается в 04:00 каждый день и полагается на сервер SQL 2005/2008 и LogParser, установленные на сервере с доступом к журналам отслеживания сообщений Exchange.
Я создал командную строку с помощью LogParser.exe, а затем перенес ее в COM-объект, который я использую в сценарии PowerShell в следующей функции:
function Execute-LogParserQueryToSQL([string] $Query)
{
Write-Host $Query
$LogParser = New-Object -com MSUtil.LogQuery
$Input = New-Object -comObject MSUtil.LogQuery.W3CInputFormat
$Output = New-Object -comObject MSUtil.LogQuery.SQLOutputFormat
$Output.server = "<your server>"
$Output.database = "<your database>"
$Output.username = "<your username>"
$Output.Password = "<your password>"
$Result = $LogParser.ExecuteBatch($Query, $Input, $Output)
return $Result
}
Функция для циклического просмотра любых журналов, созданных вчера или ранее (может выполнять несколько операций, если по какой-то причине не удается запустить один день), затем удаляет файл журнала. Если вы используете отслеживание сообщений для каких-либо других целей, не удаляйте файл журнала, используйте какой-либо другой механизм для «пометки его как использованного».
function Execute-SentReceivedSummary()
{
$TodaysLog = ("{0}.log" -f,(Get-Date -f yyyyMMdd))
$MessageTrackingDir = "D:\Exchange\Logs\PORSCHE.log"
$LogsToParse = Get-ChildItem -Path $MessageTrackingDir
$SentEmailQuery = "SELECT Date,Sender-Address AS Account,Count(*) AS Count INTO DailySentEmailByUser FROM '{0}' WHERE Event-ID=1027 GROUP BY Sender-Address,Date"
$ReceivedEmailQuery = "SELECT Date,Recipient-Address AS Account,Count(*) AS Count INTO DailyReceivedEmailByUser FROM '{0}' WHERE Event-ID=1028 GROUP BY Recipient-Address,Date"
foreach ($Log in $LogsToParse)
{
if ($Log.ToString() -ne $TodaysLog)
{
$Query = ($SentEmailQuery -f,$Log.FullName)
Execute-LogParserQueryToSQL $Query
$Query = ($ReceivedEmailQuery -f,$Log.FullName)
Execute-LogParserQueryToSQL $Query
Remove-Item $Log.FullName
}
}
return $true
}
В конце концов мы решили, что общий размер и количество элементов в почтовом ящике были более полезными показателями. У некоторых сотрудников было огромное количество непрочитанных сообщений, но они проверяли свою электронную почту каждый день (обычно, потому что это были электронные письма типа FYI, а тема сообщала им все, что им нужно было знать).
Поскольку нам нужен был только живой (хотя и до 24 часов), мне нужно было усечь таблицу перед вставкой новых данных:
function Truncate-TotalsTable()
{
$SqlConnection = new-object system.data.oledb.oledbconnection
$SqlConnection.connectionstring = "<your connect string>"
$SqlConnection.open()
$Query = "TRUNCATE TABLE TotalsTable"
$SqlCommand = New-Object system.data.oledb.oledbcommand
$SqlCommand.connection = $SqlConnection
$SqlCommand.commandtext = $Query
$SqlCommand.executenonquery()
$SqlConnection.close()
return $true;
}
Затем мы используем WMI для извлечения данных из Exchange Server и их передачи в SQL:
function Execute-MailboxTotalsQuery()
{
$Result = Truncate-TotalsTable
$Count = 0;
$SqlConnection = new-object system.data.oledb.oledbconnection
$SqlConnection.connectionstring = "<your connect string>"
$SqlConnection.open()
$MailboxReport = Get-Wmiobject -class Exchange_Mailbox -Namespace ROOT\MicrosoftExchangev2 -ComputerName <your exchange server>
foreach ($Mailbox in $MailboxReport)
{
$MailboxDN = $Mailbox.MailboxDisplayName
$TotalItems = [int]$Mailbox.TotalItems
$TotalSize = [int]$Mailbox.Size
$MailboxDN = $MailboxDN -replace "'","''"
$Query = [String]::Format("INSERT TotalsTable Values ('{0}',{1},{2})",$MailboxDN, $TotalItems, $TotalSize)
$SqlCommand = New-Object system.data.oledb.oledbcommand
$SqlCommand.connection = $SqlConnection
$SqlCommand.commandtext = $Query
$Result = $SqlCommand.executenonquery()
$Count = $Count + $Result
}
$SqlConnection.close()
return $Count;
}
После использования LogParser для просмотра журнала событий безопасности результаты, которые мы получили, оказались не такими полезными. Идентификатор события, на который мы смотрели, был 540, который охватывал как входы в Outlook, так и входы в OWA (и другие входы), мы решили, что объем работы, необходимый для его реализации, не стоит возврата. Частично это связано с тем, что вам нужно будет анализировать и фильтровать по телу сообщения, чтобы изолировать различные типы входа в систему, помимо события 540.
Я приветствую предложения и отправку других полезных сценариев PowerShell.
Я не знаю, можете ли вы делать все, что хотите, но существует множество сценариев для извлечения данных из Exchange. В моем случае меня интересует только количество сообщений и общий размер каждого почтового ящика. Сценарий Perl, который запускается каждую ночь, собирает эту информацию и записывает ее в базу данных MySQL. Затем он использует данные из базы данных для создания электронной таблицы Excel с графиками для каждого почтового ящика плюс итоговая сумма. Все это было сделано на примерах, которые я нашел в Интернете. Несомненно, есть коммерческие предложения, чтобы сделать подобное, но час или два написания сценариев более рентабельны (для меня) и дают мне открытое решение, которое я могу изменить или добавить по мере необходимости.
Я не знаю ни одной готовой программы, которая бы делала то, о чем вы говорите. Вы можете написать сценарий для различных механизмов сбора данных и сообщить об этих данных, как считаете нужным, но вы говорите о довольно «индивидуальном» решении.
Вы можете получить это из журналов отслеживания сообщений. Файлы журнала представляют собой текст в формате ASCII, а различные идентификаторы событий перечислены здесь: http://support.microsoft.com/kb/821905 Я обычно запускаю с включенным "отслеживанием сообщений" во всех моих производственных установках просто потому, что это слишком удобно, чтобы не включать его. Вы действительно получаете небольшое снижение производительности при включении, но я думаю, что оно того стоит.
Это может быть сценарий. Вам нужно будет запустить сценарий от имени пользователя, у которого есть права открывать каждый почтовый ящик пользователя. (Вы можете удалить надоедливые ACE «Запретить - получать как», размещенные в корне организации, но имейте в виду, что пакеты обновлений и обновления могут их восстановить. I всегда в любом случае удалите эти надоедливые ACE - «администратор» должен иметь возможность открывать любой почтовый ящик.) Было бы неплохо написать сценарий, но у меня сегодня нет времени. Пользователи могут создавать правила на стороне сервера, которые будут перенаправлять непрочитанные сообщения в другие папки, поэтому это может не дать вам точного показателя.
Для этого вам нужно будет проанализировать журнал безопасности на компьютерах с Exchange Server. Если вы хотите игнорировать «входы в систему» из Backup Exec, вам также необходимо сделать это там. (В любом случае, почему Backup Exec "входит в систему"? Вы делаете резервное копирование на "кирпичном уровне"? Крик ... Я избегаю этого любой ценой. Если мне нужно восстановить элемент в E2K8, я просто восстанавливаю страницу базы данных -уровневое резервное копирование в RSG.) Атрибут «последнего входа в систему», поддерживаемый хранилищем информации, является однозначным, поэтому единственный другой способ получить его, помимо анализа журнала безопасности, - это «опрос» этого значения. Это было бы крайне неэффективно.
Если вы не задумывались об этом, я бы отслеживал размер почтового ящика и количество элементов (чтобы вычислить средний размер каждого элемента). В прошлом я обнаруживал «злоупотребление» «драгоценным» пространством Exchange IS. Теперь, когда E2K3 Standard имеет ограничение в 72 ГБ, это не такая уж большая проблема. Даже в этом случае он может рассказать вам кое-что о шаблонах использования ваших пользователей.
Похоже, было бы забавно собрать эту систему!