Назад | Перейти на главную страницу

Как отслеживать использование в Exchange 2003?

Нам было поручено отслеживать использование Exchange 2003, похоже, что в Exchange 2003 Standard нет встроенного компонента отчетности. Означает ли это использование сторонних служб отчетности или я могу использовать приемники событий или журналы, чтобы передавать данные об использовании в SQL Server для отложенной обработки?

Больше всего мне хотелось бы знать следующие области:

  1. Количество сообщений, отправленных / полученных пользователем и в целом.
  2. Сколько непрочитанных сообщений в почтовом ящике пользователей.
  3. Время входа в систему (примечание: BackupExec «входит» в почтовые ящики)

Я также открыт для предложений хороших показателей для измерения восприятия функций конечным пользователем, например, количество контактов, элементов календаря, запросов на собрания, заметок и т. Д. В магазине.


Решение

Я решил использовать 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 с графиками для каждого почтового ящика плюс итоговая сумма. Все это было сделано на примерах, которые я нашел в Интернете. Несомненно, есть коммерческие предложения, чтобы сделать подобное, но час или два написания сценариев более рентабельны (для меня) и дают мне открытое решение, которое я могу изменить или добавить по мере необходимости.

Я не знаю ни одной готовой программы, которая бы делала то, о чем вы говорите. Вы можете написать сценарий для различных механизмов сбора данных и сообщить об этих данных, как считаете нужным, но вы говорите о довольно «индивидуальном» решении.

  1. Вы можете получить это из журналов отслеживания сообщений. Файлы журнала представляют собой текст в формате ASCII, а различные идентификаторы событий перечислены здесь: http://support.microsoft.com/kb/821905 Я обычно запускаю с включенным "отслеживанием сообщений" во всех моих производственных установках просто потому, что это слишком удобно, чтобы не включать его. Вы действительно получаете небольшое снижение производительности при включении, но я думаю, что оно того стоит.

  2. Это может быть сценарий. Вам нужно будет запустить сценарий от имени пользователя, у которого есть права открывать каждый почтовый ящик пользователя. (Вы можете удалить надоедливые ACE «Запретить - получать как», размещенные в корне организации, но имейте в виду, что пакеты обновлений и обновления могут их восстановить. I всегда в любом случае удалите эти надоедливые ACE - «администратор» должен иметь возможность открывать любой почтовый ящик.) Было бы неплохо написать сценарий, но у меня сегодня нет времени. Пользователи могут создавать правила на стороне сервера, которые будут перенаправлять непрочитанные сообщения в другие папки, поэтому это может не дать вам точного показателя.

  3. Для этого вам нужно будет проанализировать журнал безопасности на компьютерах с Exchange Server. Если вы хотите игнорировать «входы в систему» ​​из Backup Exec, вам также необходимо сделать это там. (В любом случае, почему Backup Exec "входит в систему"? Вы делаете резервное копирование на "кирпичном уровне"? Крик ... Я избегаю этого любой ценой. Если мне нужно восстановить элемент в E2K8, я просто восстанавливаю страницу базы данных -уровневое резервное копирование в RSG.) Атрибут «последнего входа в систему», поддерживаемый хранилищем информации, является однозначным, поэтому единственный другой способ получить его, помимо анализа журнала безопасности, - это «опрос» этого значения. Это было бы крайне неэффективно.

Если вы не задумывались об этом, я бы отслеживал размер почтового ящика и количество элементов (чтобы вычислить средний размер каждого элемента). В прошлом я обнаруживал «злоупотребление» «драгоценным» пространством Exchange IS. Теперь, когда E2K3 Standard имеет ограничение в 72 ГБ, это не такая уж большая проблема. Даже в этом случае он может рассказать вам кое-что о шаблонах использования ваших пользователей.

Похоже, было бы забавно собрать эту систему!