Exchange ActiveSync의 문제를 해결하는 스크립트





최초 문서 게시일: 2012년 2월 1일 수요일

Exchange 지원 팀은 EAS(Exchange ActiveSync) 프로토콜을 사용하는 모바일 장치에서 Exchange 서버로 너무 많은 요청을 보내 서버의 리소스가 부족해짐으로써 DOS(서비스 거부) 공격을 초래하는 상황에 대한 문의를 비교적 자주 받는 편입니다. 이러한 상황에서 최악의 경우에는 연결 시 EAS 프로토콜을 사용하지 않는 다른 사용자가 서버를 사용하지 못하게 될 수도 있습니다. 다음 기술 자료 문서에 이 문제 및 가능한 문제 완화 방법에 대한 설명이 나와 있습니다.

2469722(영문일 수 있음) Exchange의 리소스 사용으로 인해 Exchange ActiveSync를 사용하여 연결할 수 없음

최근에 이 문제가 발생한 경우는 Apple iOS 4.0 장치에서 30초마다 전체 동기화를 다시 시도한 사례였습니다(TS3398(영문일 수 있음) 참조). 또한 Exchange 서버로부터의 ‘사서함 꽉 참’ 응답을 처리하는 방법을 인식하지 못하는 일부 장치의 경우도 예로 들 수 있습니다. 이러한 상황이 발생하면 해당 장치에서 분당 60회 이상 사서함과의 연결 및 동기화를 시도하여 장치 배터리가 빠르게 소모되고 서버에 성능 문제를 일으키게 됩니다.

모바일 장치를 관리하고 여러 클라이언트 유형 간에 사용 가능한 서버 리소스를 균형 있게 조정하는 것은 IT 관리자에게 까다로운 작업일 수 있습니다. Exchange 2010/2007 CAS(클라이언트 액세스 서버) 또는 Exchange 2003 FE(프런트 엔드) 서버에서 리소스 소진 문제를 발생시키는 장치를 추적하는 것은 쉬운 작업이 아닙니다. 이 문서의 앞부분에서 언급한 것처럼, Log Parser를 사용하여 IIS 로그에서 유용한 통계를 추출할 수는 있지만(아래 참고 사항 참조) 대부분의 관리자에게는 쿼리 초안을 작성해 긴 로그에서 그러한 정보를 추출해 낼 수 있는 시간과 전문적인 지식이 없습니다.

이 게시물에서는 Exchange 커뮤니티의 모든 회원에게 리소스 소진 문제를 발생시키는 장치를 식별하는 데 사용할 수 있는 새로운 PowerShell 스크립트를 소개하여 성능 추세를 파악하고 지속적인 모니터링을 위해 보고서를 자동으로 생성할 수 있도록 합니다. 이 스크립트를 사용하면 사용자의 EAS 작업을 쉽고 빠르게 파악할 수 있습니다. IIS 로그의 크기가 수 GB에 달할 정도로 큰 경우 EAS 작업을 파악하려면 시간이 매우 많이 걸릴 수 있습니다. 이 스크립트를 통해 여러 EAS 장치를 소유한 사용자를 쉽게 확인할 수 있습니다. 이 스크립트는 정상적인 EAS 작업 기간 중에는 기준 설정 도구로 사용하다가, 문제 상황이 발생하면 비교 및 보고용 도구로 사용할 수 있습니다. 또한 이 스크립트에서는 전자 메일 알림을 받는 데 사용할 수 있는 자동 모니터링 기능도 제공됩니다.

참고: 이 스크립트는 Exchange 2010, Exchange 2007 및 Exchange 2003 서버의 IIS 로그에 대해 작동합니다.
EAS 프로토콜 및 Microsoft Exchange를 사용한 모바일 장치 간의 모든 통신은 CAS/FE 서버의 IIS 로그에 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(영문일 수 있음)도 보고해야 합니다

스크립트 사용 시 표시되는 내용

이 스크립트는 Microsoft Log Parser 2.2를 사용하여 IIS 로그 구문을 분석하고 결과를 생성합니다. 이때 사용되는 스위치(아래 표 참조)에 따라 Log Parser에 대해 서로 다른 SQL 쿼리를 작성합니다. 이전 블로그 게시물(Exchange 2003 – Active Sync 보고(영문일 수 있음))에 이와 유사한 항목을 다루는 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 명령에 대한 자세한 내용은 MSDN에서 ActiveSync HTTP 프로토콜 사양(영문일 수 있음)을 참조하십시오.

이러한 명령 외에 다음 매개 변수도 스크립트에 의해 기록됩니다.

  1. 사용자
  2. 사용자 이름
  3. 장치 유형
  4. 장치 ID
  5. 사용자-에이전트
  6. sc-bytes: IIS 로깅에서 이 태그를 사용하도록 설정한 경우에만 제공됩니다.
  7. cs-bytes: IIS 로깅에서 이 태그를 사용하도록 설정한 경우에만 제공됩니다.
  8. time-taken(밀리초): IIS 로깅에서 이 태그를 사용하도록 설정한 경우에만 제공됩니다.
  9. 총 요청 수(장치 ID별)
  10. 모든 4xx 상태 코드의 총 수
  11. 모든 5xx 상태 코드의 총 수(자세한 내용은 KB 318380(IIS 6.0) 및 KB 943891 참조)
  12. 409 상태 코드: 409(충돌) – 중간 컬렉션을 하나 이상 만들 때까지는 Request-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은 장치에서 EAS 연결을 위해 ‘보다 효율적인’ EAS를 사용해야 한다고 판단하는 경우 EAS 클라이언트로 HTTP 451 응답을 반환합니다. ‘보다 효율적인’ CAS를 판단하는 데 사용되는 논리는 Active Directory 사이트 및 CAS가 ‘인터넷 연결’ 항목으로 간주되는지 여부를 기준으로 합니다. Microsoft-Server-ActiveSync 가상 디렉터리에 대해 ExternalUrl 속성이 지정되어 있으면 해당 CAS는 EAS 연결용의 인터넷 연결 CAS로 간주됩니다(참조: TechNet 문서 Exchange ActiveSync에서 HTTP 451 오류가 반환됨프록시 및 리디렉션 이해).
  17. TooManyJobsQueued 오류: ‘TooManyJobsQueued’에 대한 자세한 내용은 위에 참조 항목으로 나와 있는 KB 2469722(영문일 수 있음)를 참조하십시오.
  18. OverBudget: 예산이란 사용자나 응용 프로그램이 특정 설정에 대해 가질 수 있는 액세스 권한으로, 1분의 기간 동안 사용자가 수행할 수 있는 작업 또는 설정할 수 있는 연결의 수를 나타냅니다(참조: TechNet문서).
  19. 다음의 일반 상태 코드(영문일 수 있음) 하위 집합

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

스크립트로 수행할 수 있는 작업

이 스크립트를 사용해 로그를 처리하여 다음 세부 정보를 파악할 수 있습니다.

  1. 사용자/장치 ID별 적중 수(서버로 가장 많은 수의 요청을 보낸 사용자/장치)
  2. 시간/일별 적중 수(사용자/장치에서 보낸 요청 빈도를 확인하는 데 도움이 됨. 시간 값은 초 단위로 입력됨)
  3. 임계값 제한이 지정된 장치의 적중 수(시간/일별로 1천 개의 요청을 보내는 모든 사용자 등과 같이 적중/요청 수의 제한을 지정할 수 있음)
  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 임계값 파일 크기입니다(기본값: 2MB). 임계값을 초과하면 파일이 압축됩니다. SendHTMLReport 및 CreateZip이 true여야 합니다.
Date 선택 System.String 구문 분석 대상 날짜를 지정합니다. MM-DD-YYYY 형식으로 날짜를 입력합니다.
DeviceId 선택 System.String 구문 분석 대상 Active Sync 장치 ID입니다.
DisableColumnDetect 선택 System.Management.
Automation.SwitchParameter
사용자가 활성화했을 수 있는 보고서에 열(예: time-taken)을 더 추가하는 기능을 비활성화합니다.

참고: W3C 헤더가 서로 다를 수 있는 여러 파일에 대해 스크립트를 실행하는 경우에는 이 스위치를 반드시 사용해야 합니다.
Help 선택 System.Management.
Automation.SwitchParameter
스위치 설명을 출력합니다.
ReportBySeconds 선택 System.Int32 초 단위로 입력된 값을 기준으로 보고서를 생성합니다.
Hourly 선택 System.Management.
Automation.SwitchParameter
시간 단위로 보고서를 생성합니다.
HTMLReport 선택 System.Management.
Automation.SwitchParameter
HTML 보고서를 만듭니다.
HTMLCSVHeaders 선택 System.String

–HTMLReport로 내보낼 IIS CSV 헤더입니다.

기본값: “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에는 사용할 수 없습니다

스크립트 사용 방법

아래에는 스크립트 사용 방법 및 이유에 대한 몇 가지 예제와 명령이 나와 있습니다.

적중 1천 회 이상

다음 명령은 W3SVC1 폴더의 모든 IIS 로그를 구문 분석한 다음 사용자 및 장치의 적중 수가 1천 회보다 많은 경우만 보고합니다.

.\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 스위치는 출력 또는 결과 파일을 저장해야 하는 위치를 제공하고, 값이 ‘1000’인 MinimumHits는 위 표에서 설명한 스크립트 매개 변수입니다.

출력:

이미지

일반적으로 장치가 매일 1천 회 이상의 요청을 보내면 ‘높은 사용량’으로 간주합니다. 적중(요청)이 1500회를 초과하면 장치나 환경에 문제가 있을 수 있습니다. 이 경우에는 장치 및 해당 사용자의 작업을 추가로 조사해야 합니다.

실제로 EAS를 통한 Exchange 서버 적중 수가 많은 사용자(최대 적중 2만 5천 회, 시간당 1천 회)가 여러 명 있는 경우 서버에서 리소스가 소진되는 사례가 있었습니다. 이 경우를 자세히 조사한 결과 모든 사용자의 요청이 백 엔드의 사서함 서버에서 507 오류를 발생시키는 것으로 확인되었습니다. 해당 EAS 사용자와의 면담을 통해 이 기간 동안 사용자의 사서함 크기 제한(25MB)에 도달하여 사서함을 크기 제한 이하로 유지하기 위해 여러 폴더에서 메일 삭제를 시도한 것으로 나타났습니다. 이러한 상황에는 KB 2469722(영문일 수 있음)에서 설명하는 것처럼 EAS 요청에 대해 HTTP 503(‘TooManyJobsQueued’) 응답도 IIS 로그에 표시될 수 있습니다.

특정 장치 ID 분리

다음 명령은 C:\IISLogs 폴더의 모든 IIS 로그를 구문 분석하고 장치 ID 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

출력:

이미지

위의 정보를 토대로 하여 사용자/장치를 선택하고 시간별 추세를 파악할 수 있습니다. 그러면 문제의 원인이 사용자 작업인지 프로그래밍 관련 사항인지를 확인할 수 있습니다.

실제로 일정 항목을 수정하는 장치를 찾아야 하는 사례가 있었으며, 이를 위해 사용자/장치 작업을 확인하고 사용자/장치가 서버로 보내는 명령별로 작업을 정렬했습니다. 그런 후에는 ‘MeetingResponse’ 명령을 보내는 사용자/장치와 해당 빈도, 기간 및 추가 관련 정보를 집중적으로 파악했습니다. 이를 통해 문제 범위를 관련 사용자 및 해당 사용자의 일정 관련 작업으로 좁혀서 기본 일정 문제를 보다 효율적으로 해결할 수 있었습니다.

장치와 관련하여 확인해야 하는 또 다른 명령 및 오류는 ‘Options’ 명령과, 이 명령이 장치에 대해 정상적으로 실행되지 않아 IIS 로그에 HTTP 409 오류 코드가 반환되었는지 여부입니다.

특정 날짜 분리

다음 명령은 W3SVC1 폴더에서 2011년 12월 24일과 일치하는 파일만 구문 분석하고 해당 날짜에 대해 적중 수가 1천 회보다 많은 경우만 보고합니다.

.\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

출력:

이미지

위의 정보를 토대로 하여 요청을 많이 보내는 사용자를 파악할 수 있으며, 각 열에서 사용자가 보내는 명령의 종류도 확인할 수 있습니다. 그러면 보다 통제 가능하며 효율적인 방식으로 문제를 해결할 수 있습니다.

확인해야 하는 정보

스크립트를 통해 IIS 로그를 분석할 때는 계속해서 발송되는 특정 명령 하나를 찾아야 합니다. 로그에서 중요한 정보는 특정 명령이 발송되는 빈도 및 자주 실패하는 명령이므로 이 사항을 추가로 파악해야 합니다. 또한 특정 명령 실행 간의 대기 시간도 비교해야 합니다. 일반적으로 실행 시간이 오래 걸리거나 서버로부터의 응답을 지연시키는 명령이 의심 항목일 가능성이 크므로 추가 조사가 필요합니다. 단, Ping 명령은 실행 시간이 오래 걸리며 로그에도 자주 표시되지만 이는 정상적인 현상이므로 예외입니다.

장치 연결이 계속해서 실패하고 403 오류 코드가 표시되는 경우에는 장치가 EAS 기반 액세스를 사용하도록 설정되어 있지 않을 수 있습니다. 모바일 장치 사용자가 실제로 자격 증명을 올바르게 입력하지 않았음을 모른 채로 연결 문제에 대해 불만을 제기하는 경우가 드물지 않은데요. 사실 모바일 장치에서는 입력 시 실수를 저지르기가 쉽습니다. 로그를 확인할 때 특정 사용자의 작업을 중점적으로 살펴보면 ‘Provision’ 명령 실행 후 사용자 장치에 오류가 발생함이 확인될 수 있습니다.

모니터링용 보고서 작성

보고서를 작성하거나 보고서 및 사용자 작업 정보가 포함된 전자 메일을 생성할 수 있습니다.

다음 명령은 W3SVC1 폴더의 모든 IIS 로그를 구문 분석한 다음 적중 수가 1천 회보다 많은 경우만 보고합니다. 또한 결과가 포함된 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를 참조하십시오.


Comments (0)