Share via


Скрипт для устранения неполадок в Exchange ActiveSync

Исходная статья опубликована в среду, 1 февраля 2012 г.

Группа технической поддержки Exchange довольно часто рассматривает проблемы, когда мобильные устройства, использующие протокол Exchange ActiveSync (EAS), направляют слишком много запросов к серверу Exchange, что приводит к исчерпанию ресурсов сервера и в конечном счете к атаке типа "отказ в обслуживании". Худшим итогом такой ситуации является то, что сервер становится недоступным для других пользователей, которые могут не использовать протокол EAS для подключения. Мы подробно описали эту проблему и привели возможные способы ее устранения в статье базы знаний:

2469722 Ошибка подключения с помощью Exchange ActiveSync из-за нехватки ресурсов Exchange

Недавно такую ошибку обнаружили в устройствах Apple iOS 4.0, которые предпринимали повторную попытку синхронизации каждые 30 с (см.TS3398). Другим примером могут стать некоторые устройства, которые не умеют обрабатывать ответ "почтовый ящик полон" от сервера Exchange, что приводит к нескольким попыткам переподключения. Это может приводить к тому, что такие устройства будут пытаться подключиться и выполнить синхронизацию с почтовым ящиком более 60 раз в минуту, что ведет к быстрому расходу заряда аккумулятора в устройстве и снижению производительности на сервере.

Управление мобильными устройствами и распределение доступных серверных ресурсов среди различных типов клиентов может быть очень сложной задачей для ИТ-администраторов. Отследить, какие устройства приводят к исчерпанию ресурсов в сервере клиентского доступа Exchange 2010/2007 или сервере Exchange 2003 переднего плана, очень непростая задача. Как говорится в статье выше, полезную статистику из журналов IIS (см. примечание ниже) можно извлечь с помощью средства Log Parser, но у большинства администраторов нет времени или опыта написания запросов для извлечения таких сведений из огромных журналов.

Цель этой статьи — представить пользователям сообщества Exchange новый скрипт PowerShell, который позволяет определять устройства, вызывающие исчерпание ресурсов, выявлять тенденции в производительности и автоматически создавать отчеты для непрерывного мониторинга. С помощью этого скрипта можно легко и быстро проводить детализацию действий пользователей с протоколом EAS, что может быть очень непростой задачей при работе с журналами IIS, которые могут разрастаться до нескольких гигабайт. Скрипт упрощает выявление пользователей с несколькими устройствами EAS. Его также можно использовать для определения нормальной интенсивности операций EAS, которую затем можно использовать для сравнения и отчетов при отклонении от нормы. Он также предлагает функцию автоматического мониторинга, которая позволяет направлять уведомления по электронной почте.

Примечание. Скрипт работает с журналами IIS на серверах Exchange 2010, Exchange 2007 и Exchange 2003.
Все операции между мобильными устройствами, использующими протокол EAS, и Microsoft Exchange записываются в журналах IIS на серверах CAS/FE в формате W3C. Поля W3C по умолчанию, включенные в ведение журнала, различаются в версиях IIS 6.0 и 7.0/7.5 (в IIS 7.0 используются такие же поля, как и в 7.5). Этот скрипт работает в обеих версиях.

Журналы IIS

Поскольку для EAS используется HTTP, все запросы EAS по умолчанию регистрируются в журналах IIS. Иногда администраторы могут отключить журналы IIS для экономии пространства на серверах. Чтобы определить, включено ли ведение журналов, и найти расположение файлов журналов, выполните следующие действия.

IIS 7

  1. В диспетчере IIS разверните имя сервера, например ExchangeServer (Contoso\Administrator).
  2. В представлении "Просмотр возможностей" дважды щелкните "Ведение журнала" в разделе IIS.

IIS 6

  1. В диспетчере IIS щелкните правой кнопкой мыши имя веб-сайта (в большинстве случаев это веб-сайт по умолчанию) и выберите команду "Свойства".
  2. Перейдите на вкладку "Веб-сайт".

За что отвечают мобильные устройства при взаимодействии с сервером?

Прежде, чем погрузиться в детали скрипта, давайте рассмотрим некоторые важные требования к мобильным устройствам, использующим EAS для взаимодействия с Microsoft Exchange.

  • Когда на мобильное устройство возвращается неожиданный ответ от сервера, оно само должно обработать этот ответ и повторить попытку подключения через разумный интервал. Кроме того, устройства отвечают за обработку времени ожидания, которое возникает за пределами IIS и может быть вызвано сетевыми задержками.
  • Вместе с каждым запросом, отправляемым устройством в IIS/Exchange, оно также должно указывать значение User-Agent.

Что происходит при использовании скрипта?

В скрипте для анализа журналов IIS и формирования результатов используется средство анализа журналов Microsoft Log Parser 2.2. Скрипт создает разные SQL-запросы для Log Parser на основании заданных переключателей (см. таблицу ниже). В предыдущей публикации блога Exchange 2003 - Active Sync reporting в обсуждении Log Parser речь идет о схожих вопросах. Та статья все так же применима к Exchange 2010 и 2007. С момента той публикации в протокол EAS были добавлены новые команды, которые используются в данном скрипте при обработке журналов.

Вот список команд EAS, о которых скрипт будет сообщать в результатах:

Sync, SendMail, SmartForward, SmartReply, GetAttachment, GetHierarchy, CreateCollection, DeleteCollection, MoveCollection, FolderSync, FolderCreate, FolderDelete, FolderUpdate, MoveItems, GetItemEstimate, MeetingResponse, Search, Settings, Ping, ItemOperations, Provision, ResolveRecipients, ValidateCert

Дополнительные сведения о каждой команде EAS см. в статье ActiveSync HTTP Protocol Specification на портале MSDN.

Помимо этих команд скрипт также заносит в журнал следующие параметры.

  1. Пользователь

  2. Имя пользователя

  3. Тип устройства

  4. Идентификатор устройства

  5. Агент пользователя

  6. sc-bytes: доступен, только этот тег был включен в журналах IIS.

  7. cs-bytes: доступен, только этот тег был включен в журналах IIS.

  8. time-taken (в миллисекундах): доступен, только этот тег был включен в журналах IIS.

  9. Общее количество запросов или запросов с определенным идентификатором устройства

  10. Общее количество всех кодов состояния 4xx

  11. Общее количество всех кодов состояния 5xx (дополнительные сведения см. в статье базы знаний 318380 для IIS 6.0 и 943891)

  12. Коды состояния 409. 409 (конфликт) - Нельзя провести сбор по URI запроса до тех пор, пока не будет создан один или несколько промежуточных сборов. Сервер НЕ ДОЛЖЕН создавать такие промежуточные сборы автоматически (Ср.: RFC 4918)

  13. Коды состояния 500. После того как устройство отправляет команду OPTIONS, можно получить ответ 500 от сервера с ошибкой MissingCscCacheEntry. Это может происходить в результате проблемы со сходством, когда имеется массив CAS с выходом в Интернет, выступающий в качестве прокси-сервера для запросов к внутреннему массиву CAS. Когда массив, обращенный в Интернет, отправляет запрос во внутренний массив, сервер CAS отвечает с кодом 401. При следующем сеансе связи запрос обрабатывается другим сервером CAS во внутреннем массиве. В данном случае решением может стать устранение проблемы со сходством для массива CAS.

  14. Коды состояния 503. В настоящее время серверу не удается обработать запрос из-за временной перегрузки или обслуживания. Подразумевается, что это временное состояние, которое будет устранено после некоторой задержки. Если время задержки известно, его МОЖНО указать в заголовке Retry-After. Если заголовок Retry-After не указан, клиенту СЛЕДУЕТ выполнить обработку ответов с кодом 500.

    Примечание. Наличие кода состояния 503 не предполагает, что сервер обязан его использовать при перегрузке. Некоторые серверы просто могут отказывать в соединении (Ср. RFC 2616)

  15. Коды состояния 507. Код 507 (Недостаточно места) означает, что не удалось применить метод для ресурса, поскольку сервер не может сохранить представление, необходимое для успешного завершения запроса. Это состояние считается временным. Если запрос, в ответ на который получен такой код состояния, был результатом действия пользователя, то его НЕЛЬЗЯ повторять, пока он не будет отправлен повторно в результате отдельного действия пользователя. (Ср.RFC 4918)

  16. Коды состояния 451. Exchange 2007/2010 возвращает ответ HTTP 451 клиенту EAS, когда обнаруживает, что устройство должно использовать "более подходящий массив" CAS для подключений EAS. Логика определения "более подходящего" массива CAS основывается на использовании сайтов Active Directory и том, имеет ли массив CAS выход в Интернет. Если указано свойство ExternalUrl виртуального каталога Microsoft-Server-ActiveSync, то считается, что массив CAS имеет выход в Интернет для подключений EAS. ( Ср.: статьи TechNet Служба Exchange ActiveSync возвратила ошибку HTTP 451 и Общие сведения по передаче данных через прокси-соединения и перенаправление
    )

  17. Ошибки TooManyJobsQueued. Дополнительные сведения об ошибках TooManyJobsQueued см. в статье базы знаний 2469722, указанной выше.

  18. OverBudget. Бюджет — это объем доступа, который могут иметь пользователь или приложение в определенном окружении. Бюджет представляет, сколько подключений может иметь пользователь либо какой объем операций он может выполнять в течение одной минуты . (Ср. статья TechNet)

  19. Следующий набор общих кодов состояния:

    InvalidContent, ServerError, ServerErrorRetryLater, MailboxQuotaExceeded, DeviceIsBlockedForThisUser, AccessDenied, SyncStateNotFound, DeviceNotFullyProvisionable, DeviceNotProvisioned, ItemNotFound, UserDisabledForSync

Что можно делать с этим скриптом?

Можно обрабатывать журналы для получения следующих данных.

  1. Обращения от пользователя или устройства с определенным идентификатором (например, пользователи/устройства с максимальным числом запросов, отправленных серверу)
  2. Обращений за час/день (помогает определить частоту запросов, отправленных пользователем или устройством, временное значение указывается в секундах)
  3. Обращения устройства с заданным порогом (здесь можно указать ограничение на обращения/запросы, например, если нужны все пользователи, отправляющие 1000 запросов в час/день, и т. д.)
  4. Экспорт результатов в CSV
  5. HTML-отчет по результатам
  6. Отчеты по электронной почте для мониторинга (формат CSV/HTML)

Необходимые компоненты

Перед запуском этого скрипта, убедитесь, что на компьютере установлены следующие компоненты:

Параметры скрипта

Параметр Обязательный Тип Описание
ActiveSyncOutputFolder Обязательный System.String Выходной каталог для CSV- и HTML-файлов
ActiveSyncOutputPrefix Необязательный System.String Строка префикса для имени выходного файла
CreateZip Необязательный System.Management. Automation.SwitchParameter Создает ZIP-файл. Может использоваться только с SendHTMLReport
CreateZipSize Необязательный System.In32 Пороговый размер файла. По умолчанию 2 МБ. После превышения файл сжимается. Требует наличия параметров SendHTMLReport и CreateZip
Date Необязательный System.String Задает дату для анализа. Формат даты: ММ-ДД-ГГГГ
DeviceId Необязательный System.String Идентификатор устройства Active Sync для анализа
DisableColumnDetect Необязательный System.Management. Automation.SwitchParameter Отключает возможность добавлять в отчет дополнительные столбцы, которые могли быть включены пользователями, например столбец "затраченное время" Примечание. Этот переключатель следует использовать при выполнении скрипта с несколькими файлами, у которых могут быть различные заголовки W3C.
Help Необязательный System.Management. Automation.SwitchParameter Выводит описание переключателей
ReportBySeconds Необязательный System.Int32 Создает отчет по времени, указанному в секундах
Hourly Необязательный System.Management. Automation.SwitchParameter Создает отчет за каждый час
HTMLReport Необязательный System.Management. Automation.SwitchParameter Создает HTML-отчет
HTMLCSVHeaders Необязательный System.String

CSV-заголовки IIS для экспорта в –HTMLReport.

По умолчанию: "DeviceID,Hits,Ping,Sync,FolderSync,DeviceType,User-Agent"

IISLogs Обязательный System.Array

Каталог журналов IIS. Пример: - IISLogs D:\Server,'D:\Server 2'

LogParserExec Обязательный System.String Путь к LogParser.exe
MinimumHits Необязательный System.Int32 Минимальное число обращений, для которого будет создаваться CSV- или HTML-отчет
SendEmailReport Необязательный System.Management. Automation.SwitchParameter Включить отчеты по электронной почте
SMTPRecipient Необязательный System.String Получатель SMTP
SMTPSender Необязательный System.String Отправитель SMTP
SMTPServer Необязательный System.String SMTP-сервер
TopHits Необязательный System.Int32

Возвращаемое максимальное число обращений. Пример: TopHits 50, нельзя использовать с переключателями Hourly и ReportBySeconds

Как используется этот скрипт?

Ниже приведены некоторые примеры (с командами) использования этого скрипта и ситуации, в которых их уместно использовать.

Больше 1000 обращений

Следующая команда проводит синтаксический анализ всех журналов IIS в папке W3SVC1 и возвращает только те обращения пользователей и устройств, число которых превышает 1000.

.\ActiveSyncReport.ps1 -IISLog "C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Program Files (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -MinimumHits 1000

[В команде выше скрипт ActiveSyncReport.ps1 находится в корне диска C:, переключатель -IISLog задает расположение журналов IIS по умолчанию, переключатель -LogparserExec указывает расположение исполняемого файла приложения Log Parser, переключатель -ActiveSyncOutputFolder задает расположение, где будут сохранены выходные данные или результирующий файл, переключатель MinimumHits со значением "1000" — это параметр скрипта, описанный в таблице выше]

Вывод:

image

Обычно, если устройство отправляет больше 1000 запросов в день, это считается "интенсивным использованием". Если число вхождений (запросов) больше 1500, может иметь место проблема с устройством или средой. В этом случае следует провести дальнейший анализ устройства и активности его пользователя.

Был один случай, когда мы заметили, что некоторые пользователи очень часто обращались к своему серверу Exchange по протоколу EAS (примерно 25 000 обращений, 1000 обращений в час), что приводило к исчерпанию ресурсов сервера. После дальнейшего анализа мы заметили, что все такие запросы пользователей завершались ошибкой 507 на почтовых серверах. Поговорив с этими пользователями EAS мы обнаружили, что в это время они превышали ограничение в 25 МБ для своих почтовых ящиков и пытались удалить почту из разных папок, чтобы вернуться в допустимый предел. В таких ситуациях также можно обнаружить ответы HTTP 503 (TooManyJobsQueued) в журналах IIS для запросов EAS, о чем говорится в статье базы знаний 2469722.

Выделение конкретного идентификатора устройства

Следующая команда выполняет синтаксический анализ всех журналов IIS в папке C:\IISLogs, ищет устройство с идентификатором xxxxxx и выводит для него почасовую статистику.

.\ActiveSyncReport.ps1 -IISLog " C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Program Files (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports –DeviceID xxxxxx -Hourly

Вывод:

image

Полученные данные позволяют выбрать пользователя или устройство и просмотреть почасовую динамику. Это может помочь определить, являются ли причиной проблемы действия программы или пользователя.

Был один случай, когда нам пришлось искать, какие устройства меняли записи календаря. Мы просмотрели действия пользователей и устройств и отсортировали их по разным командам, которые они отправляли на сервер. После этого мы проанализировали, какие пользователи/устройства отправляли команду MeetingResponse и с какой частотой, временным интервалом и другими сопутствующими деталями. Это помогло ограничить поиск связанными пользователями и их действиями с календарем и более эффективно решить базовую проблему.

Также следует обратить внимание на команду "Options". Если ее выполнение для устройства оканчивается ошибкой, то в журнале IIS возвращается код ошибки HTTP 409.

Выделение одного дня

Следующая команда проводит синтаксический анализ только файлов, соответствующих дню 12-24-2011 в папке W3SVC1, и выводит в отчет только обращения, число которых превышает 1000.

.\ActiveSyncReport.ps1 -IISLog "C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Program Files (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -MinimumHits 1000 –Date 12-24-2011

Вывод:

image

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

Что следует искать?

При анализе журналов IIS с помощью этого скрипта нужно искать одну конкретную команду, которая отправляется снова и снова. Важна частота конкретных отправляемых команд, также очень важно, когда какая-либо команда часто завершается ошибкой, такие случаи требуют внимательного анализа. Также следует оценивать и сравнивать время ожидания между исполнением определенных команд. Обычно команды, на выполнение которых тратится больше времени или которые вызывают задержку ответа от сервера, должны попадать в список подозреваемых для дальнейшего анализа. Однако имейте в виду, что команда Ping является исключением, поскольку она выполняется относительно долго и часто появляется журналах, что, тем не менее, является нормальной ситуацией.

Если вы замечаете постоянные ошибки подключения устройства с кодом ошибки 403, это может означать, что для устройства не включен доступ по протоколу EAS. Иногда пользователи мобильных устройств жалуются на проблемы с подключением, не понимая, что они неправильно вводят свои учетные данные (это понятно, такие ошибки распространены при работе на мобильных устройствах). При просмотре журналов можно детально заняться таким пользователем и обнаружить, что его устройство сталкивается с ошибкой после отправления команды "Provision".

Создание отчетов для отслеживания

Можно создавать отчеты или формировать электронные сообщения с такими отчетами и сведениями по операциям пользователя.

Следующая команда проводит синтаксический анализ всех журналов IIS в папке W3SVC1 и выводит в отчет только обращения, число которых превышает 1000. Кроме того, она создает HTML-отчет с результатами.

.\ActiveSyncReport.ps1 -IISLog "C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Program Files (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -MinimumHits 1000 -HTMLReport

Следующая команда проводит синтаксический анализ всех файлов в папках "C:\Server1_Logs" и "D:\Server2_Logs" и направляет созданный отчет по электронной почте на адрес "user@contoso.com".

.\ActiveSyncReport.ps1 -IISLog "C:\Server1_Logs",”D:\Server2_Logs” -LogparserExec “C:\Program Files (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -SendEmailReport -SMTPRecipient user@contoso.com –SMTPSender user2@contoso.com -SMTPServer mail.contoso.com

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

Константин Пападакис (Konstantin Papadakis) и Брайан Дрепол (Brian Drepaul)

Выражаем особую благодарность:
M. Amir Haque, Will Duff, Steve Swift, Angelique Conde, Kary Wall, Chris Lineback и Mike Lagase

Это локализованная запись блога. Исходная статья находится по адресу: A script to troubleshoot issues with Exchange ActiveSync