응용 프로그램 문제 해결
AppFabric은 IIS에서 호스트하는 .NET Framework 버전 4 WCF 및 WF 서비스를 관리하기 위한 기능을 제공합니다. 이러한 기능에는 지속적 워크플로 서비스를 호스트하기 위한 안정성 메커니즘, 단순화된 응용 프로그램 구성 및 .NET Framework 4 WCF와 WF 서비스의 상태를 모니터링하는 도구가 포함됩니다. 이 섹션에서는 모니터링 도구를 사용하여 서비스 문제를 해결하는 방법에 대해 설명합니다.
대시보드를 사용하여 WCF 및 WF 서비스의 문제 해결을 시작합니다. IIS 관리자 내의 AppFabric 그룹에서 대시보드 아이콘을 클릭하여 대시보드 페이지를 표시합니다. 이 복합 페이지는 IIS의 특정 범위에 배포된 응용 프로그램의 상태에 대한 요약 보기와 보다 자세한 문제 해결 정보를 보기 위한 드릴다운 링크를 제공합니다. 대시보드에 표시된 메트릭과 관련 페이지에서 문제 해결에 필요한 정보를 자세히 제공하지 않는 경우에는 AppFabric 도구를 통해 System.Diagnostics 추적을 사용하도록 설정하여 WCF 또는 WF 응용 프로그램의 문제를 해결할 수 있습니다.
대시보드를 사용하여 문제 해결
분산 응용 프로그램의 경우 문제를 격리하는 것은 격리 환경에서 카운터 하나를 확인하거나 도구를 하나만 사용하는 것처럼 간단하지 않습니다. 분산 서비스 환경에서 문제를 해결할 때는 종종 여러 도구나 카운터의 데이터를 서로 연관시켜 문제의 원인에 대한 사실적인 그림을 만듭니다. 대시보드에는 응용 프로그램 문제 해결을 위해 정보를 서로 연관시키는 데 사용할 수 있는 세 가지 위젯, 즉 지속된 WF 인스턴스, WCF 호출 기록 및 WF 인스턴스 기록이 포함되어 있습니다. 이 중 뒤쪽 두 개의 위젯은 기록 메트릭으로, 대시보드 위쪽의 기간 시간 선택기(최근 1분, 최근 24시간 등)에 따라 표시되는 정보가 달라집니다.
세 가지 위젯 중 하나를 처음 열거나 볼 경우 해당 메트릭의 상태에 대한 상위 수준의 요약 보기가 표시되므로, 해당 수준에 문제가 있는지 여부를 빠르게 확인할 수 있습니다. 예를 들어, 지속된 WF 인스턴스 위젯은 처음에 지속성 저장소에 상태가 저장된 라이브 지속적 워크플로 인스턴스의 상태를 표시합니다. 이 위젯은 활성, 유휴 및 일시 중단 상태에 있는 지속된 인스턴스 수에 대한 요약 상태를 제공하므로, 지속된 워크플로 수준에서 문제가 있는 경우 사용자에게 빠르게 알릴 수 있습니다. 요약 페이지에 있는 링크를 클릭하면 특정 요약 카운터에 대한 추가 정보를 볼 수 있습니다.
지속된 WF 인스턴스 메트릭 사용
지속된 WF 인스턴스 위젯은 지속성 저장소에 상태가 저장된 라이브 워크플로 인스턴스의 상태를 표시합니다. 이 위젯은 활성, 유휴 및 일시 중단 상태에 있는 지속된 인스턴스의 수를 표시합니다. 각 머리글과 요약 개수는 원시 데이터가 포함된 지속된 WF 인스턴스 페이지의 링크입니다.
일시 중단된 인스턴스의 문제를 해결할 때 문제를 더 잘 이해하려면 대시보드에서 일시 중단된 인스턴스 링크를 클릭합니다. 그러면 지속된 WF 인스턴스 페이지에 일시 중단된 인스턴스가 모두 표시됩니다. 이 중 하나를 선택하면 화면 아래쪽에 있는 세부 정보 창이 일시 중단된 인스턴스에 대한 요약 정보로 채워집니다. 오류 탭에는 인스턴스가 일시 중단된 이유가 표시됩니다. 추가 정보가 필요하면 인스턴스를 마우스 오른쪽 단추로 클릭하고 추적된 이벤트 보기 옵션을 선택할 수 있습니다. 그러면 일시 중단된 워크플로 인스턴스에 대한 모든 추적된 이벤트가 표시된 추적된 이벤트 페이지로 이동됩니다. 이벤트는 기본적으로 가장 새로운 이벤트가 맨 위에 표시됩니다.
WCF 호출 기록 메트릭 사용
WCF 호출 기록 위젯은 수신되고 모니터링 저장소에 기록된 WCF 호출 수를 표시합니다. 머리글에는 완료된 호출, 발생한 예외 또는 제한이 적중된 횟수의 요약 개수가 표시됩니다. 첫 번째 열에는 완료된 호출이 가장 많은 상위 5개의 서비스가 표시됩니다. 두 번째 열에는 오류 유형별로 그룹화된 WCF 오류의 분석 결과가 표시됩니다. 세 번째 열에는 서비스 예외가 가장 많은 상위 5개의 서비스가 표시됩니다. 각 메트릭은 대시보드에 요약되어 있는 원시 데이터를 볼 수 있는 추적된 이벤트 페이지로 연결됩니다.
예를 들어, 실패한 호출에 대한 자세한 정보를 보려면 실패한 호출 요약 카운터를 클릭하고 추적된 이벤트 페이지로 이동합니다. 이 페이지는 IIS 계층 구조에서 선택된 범위에 대해 최근에 실패한 WCF 호출로 채워집니다. 이러한 이벤트 중 하나를 선택하면 화면 아래쪽에 있는 세부 정보 창이 채워집니다. 오류 탭에는 실패에 대한 예외 정보가 포함되어 있습니다. 실패한 호출에 대한 추가 컨텍스트가 필요한 경우 이벤트를 마우스 오른쪽 단추로 클릭하고 모든 관련 이벤트 보기 옵션을 선택할 수 있습니다. 그러면 추적된 이벤트 페이지가 새로 고쳐지고 첫 번째 호출과 관련된 모든 이벤트로 채워집니다.
참고
모든 관련 이벤트 보기 옵션을 사용하려면 응용 프로그램의 모니터링 수준을 종단 간 모니터링 이상으로 설정해야 합니다. 이 수준에서 모니터링 인프라는 종단 간 작업 ID(E2EActivityId)를 서로 연결하는 전송 이벤트를 수집합니다.
WF 인스턴스 기록 메트릭 사용
WF 인스턴스 기록 위젯은 활성화, 실패 및 완료된 워크플로 인스턴스의 수를 표시합니다. 첫 번째 열에는 활성화가 가장 많은 상위 5개의 서비스가 표시됩니다. 두 번째 열에는 실패한 인스턴스가 가장 많은 상위 5개의 서비스가 표시됩니다. 세 번째 열에는 실패한 인스턴스 중 복구된 인스턴스의 수가 표시됩니다. 예를 들어, 워크플로 인스턴스가 일시 중단되는 오류가 발생한 후 나중에 다시 시작되어 성공적으로 완료된 경우 실패 열과 복구됨 열에 모두 인스턴스의 수가 표시됩니다.
WF 인스턴스 기록 위젯의 정보를 사용하여 문제를 해결하는 것은 지속된 WF 인스턴스 위젯을 사용하는 것과 비슷합니다. 머리글 중 하나를 클릭하여 워크플로 인스턴스에 대한 요약 정보를 볼 수 있는 추적된 WF 인스턴스 페이지로 이동합니다. 그러나 WF 인스턴스 기록 위젯에는 이미 완료되었을 수 있는 워크플로 인스턴스가 표시되므로 지속된 WF 인스턴스 페이지에 표시되는 인스턴스 제어 작업은 표시되지 않습니다. 추적된 WF 인스턴스 페이지에서 인스턴스를 마우스 오른쪽 단추로 클릭하고 추적된 이벤트를 표시하여 인스턴스에 대한 하위 수준의 추적 데이터를 볼 수 있습니다.
System.Diagnostics 추적을 사용하여 문제 해결
AppFabric은 이벤트를 ETW(Windows용 이벤트 추적) 하위 시스템으로 내보내는 .NET Framework 4의 WCF 추적 및 WF 추적 고급 기능을 사용합니다. ETW는 빠른 이벤트 추적 인프라를 제공합니다. 그러나 일부 시나리오에서는 제공되는 모든 진단 정보를 확인해야 합니다. AppFabric에서는 응용 프로그램 또는 사이트 수준에서 System.Diagnostics 추적을 사용하도록 설정할 수 있습니다. 이 추적 정보는 디스크의 파일에 기록되며 서비스 추적 뷰어 도구를 통해 볼 수 있습니다.
경고
System.Diagnostics 추적을 사용하면 응용 프로그램의 성능이 저하되고 대량의 추적 파일이 생성됩니다. 따라서 응용 프로그램 문제를 해결할 경우에만 System.Diagnostics 추적을 사용하도록 설정해야 합니다.
분산 ASP.NET 응용 프로그램 문제 해결
작업 ID(이전 WCF 호출 기록 메트릭 사용 섹션에서 언급한 대로)를 사용하여 지속형 인스턴스 ID를 조회하고 여러 AppFabric 서버 시스템에서 WCF 서비스로 통신하는 ASP.NET 응용 프로그램의 문제 해결에 도움을 줄 수 있습니다. 이렇게 하려면 모니터링 수준이 종단 간 모니터링 이상으로 설정되어 작업 추적을 구성해야 합니다. 어떻게 이렇게 수행할 수 있는지 한 가지 예를 살펴봅시다.
ASP 및 IIS 모니터링 도구를 사용하여 웹 응용 프로그램을 모니터링하는 동안 관리자는 서비스와 통신하면서 ASP.NET 응용 프로그램에 대한 시간 제한 오류가 증가하는 것을 알게 됩니다. 관리자는 오류를 확인한 후 오류가 발생한 당시 활성인 작업 ID를 입수합니다. 관리자는 AppFabric 대시보드를 사용하여 동일한 작업 ID에 대한 쿼리를 만들어 실행합니다. 이벤트 하나가 반환됩니다. 서비스 X의 인스턴스 Y에 대한 수신 이벤트입니다. 관리자는 해당 이벤트와 연관된 메시지 흐름을 보고 “최대 동시 호출 수 제한 초과” 이벤트임을 알게 됩니다. 관리자는 서비스 요약 페이지를 살펴보고 “WCF 제한 적중”이 20으로 설정되어 있음을 알게 됩니다. 또한 관리자는 지난 24시간 동안의 호출을 보고 지난 30분 동안 급증했음을 알게 됩니다. 관리자는 다른 날짜들을 보고 매일 같은 시간에 같은 일이 발생함을 알게 됩니다. 따라서 관리자는 매일 해당 시간에 로드가 증가하므로 최대 동시 호출 수 제한 설정을 25로 증가시켜야 한다고 결론 내립니다. 관리자는 신중하게 살펴보고 WCF 서비스를 호출할 때 ASP.NET 응용 프로그램에 대한 시간 제한 오류가 감소함에 따라 제한 이벤트 발생이 크게 감소함을 알게 됩니다.
SQL Server 에이전트 Windows 서비스 작업
SQL Server 에이전트 Windows 서비스는 SQL Server 작업을 모니터링하고, 특정 관리 작업을 자동화하며, 필요에 따라 경고를 생성하고, 작업을 예약 및 실행합니다. SQL Server 작업은 다양한 데이터베이스 관련 작업을 처리하는 SQL Server 에이전트에 의해 순차적으로 수행되는 일련의 지정된 작업입니다. AppFabric이 SQL Server를 사용하도록 구성된 경우에는 SQL Server 에이전트를 사용하여 이벤트를 모니터링 데이터 저장소로 가져오고 저장소에서 정기적으로 이전 데이터를 제거합니다.
SQL Server 에이전트가 실행 중이 아닐 경우에는 SQL Server 설치 내에서 예약된 AppFabric 작업이 실행될 수 없습니다. 다음은 SQL Server 에이전트 Windows 서비스를 사용하여 이러한 작업이 예약된 대로 실행되도록 하기 위한 몇 가지 단계입니다.
SQL Server 에이전트 Windows 서비스의 상태를 확인하여 실행되고 있는지 확인합니다. 관리 도구를 클릭하고 서비스, **SQL Server 에이전트(MSSQLSVR)**를 차례로 선택한 다음 상태에 현재 시작됨이 표시되는지 확인합니다. 아닐 경우 서비스를 시작합니다.
저장소가 초기화될 때 다음 4개의 SQL Server 작업이 생성됩니다.
Microsoft_ApplicationServer_Monitoring_AutoPurge_<모니터링 DB 이름>
Microsoft_ApplicationServer_Monitoring_ImportWfEvents_<모니터링 DB 이름>
Microsoft_ApplicationServer_Monitoring_ImportWcfEvents_<모니터링 DB 이름>
Microsoft_ApplicationServer_Monitoring_ImportTransferEvents_<모니터링 DB 이름>
SQL Server 에이전트 Windows 서비스가 시작되었지만 AppFabric 작업이 실행되고 있지 않은 경우에는 작업이 마지막으로 실행될 때 오류가 발생했는지 확인합니다.
작업 인스턴스가 성공적으로 완료되었으나 이벤트 테이블에 이벤트가 없는 경우에는 모니터링 데이터 저장소 아래의 ASFailedStagingTable 테이블을 확인합니다. 이 테이블에는 실패 이유를 파악하는 데 도움이 될 수 있는 ErrorNumber 및 ErrorMessage 등의 특정 열이 포함되어 있습니다. 오류가 발생하지 않은 경우 이 테이블은 비어 있습니다.
AppFabric SQL Server 에이전트 작업이 실행되는 데 사용된 Windows ID(소유자)는 로그인한 사용자의 Windows ID여서는 안 됩니다. 대신 이 작업은 미리 구성된 AS_MonitoringDbJobsAdmin Windows 보안 계정의 ID로 실행되어야 합니다. 이 계정은 도메인 계정인 것이 좋습니다. 설치 후 Initialize-ASMonitoringDatabase cmdlet이 실행될 때 이 계정에는 모니터링 저장소에서 적절한 권한이 지정됩니다.
SQL Server 에이전트가 제출된 AppFabric Server 작업의 여러 소유자를 처리하는 방법은 다음과 같습니다.
SQL Server 에이전트 작업의 소유자가 도메인 계정인 경우 SQL Server는 도메인 컨트롤러에 연결하여 계정이 유효한지 확인합니다. 유효한 경우 도메인 계정으로 실행됩니다. 그렇지 않으면 로컬 계정으로 실행하려고 합니다.
SQL Server 에이전트 작업의 소유자가 로컬 sysadmin 계정인 경우 SQL Server 에이전트는 작업 단계에서 "RunAs" ID를 올바르게 처리하고 "Execute user as AS_MonitoringDbJobsAdmin" 명령을 실행합니다. 이 경우 작업은 AS_MonitoringDbJobsAdmin 계정의 ID로 실행됩니다.
참고
SQL Server Management Studio에서 작업의 "RunAs" ID를 보려면 작업을 마우스 오른쪽 단추로 클릭하고 속성을 클릭한 다음 고급 탭을 클릭합니다. 이 값은 AS_MonitoringDbJobsAdmin 계정으로 설정되어 있어야 합니다.
SQL Server 에이전트 작업의 소유자가 로컬 계정이지만 sysadmin이 아닌 경우에는 작업 단계에서 제공된 "RunAs" ID가 무시됩니다. 이 경우 SQL Server 에이전트 서비스는 작업을 로컬 소유자로 실행합니다.
연결이 끊긴 도메인 시나리오(예: 랩톱)에서 SQL Server 모니터링 작업의 ID가 도메인 사용자인 경우 SQL Server 에이전트는 도메인 컨트롤러에 연결하여 계정의 유효성을 검사하려고 합니다. SQL Server 에이전트 작업을 실행하는 컴퓨터가 도메인과의 연결이 끊어지면 이 검사가 실패합니다. 이 오류를 방지하기 위한 옵션에는 다음 두 가지가 있습니다.
두 가지 중 첫 번째이자 가장 간단한 옵션은 로컬 사용자 계정을 사용하여 작업을 구성하는 것입니다(즉, Initialize-ASMonitoringDatabase cmdlet 실행).
두 번째 옵션은 소유자가 도메인 계정을 사용하여 작업을 구성한 경우 사용자가 SQL Server sp_update_job 저장 프로시저를 사용하여 작업 소유자를 이후에 로컬 사용자 계정으로 업데이트하는 것입니다.
가장 좋은 방법은 SQL Server 에이전트 Windows 서비스가 로컬 로그온 계정으로 실행되도록 구성하는 것입니다. 이렇게 하면 네트워크 연결이 종료된 경우에도 AppFabric 컴퓨터에서 서비스가 실행될 수 있습니다. 이 서비스가 도메인 계정으로 실행되는 경우 도메인에 액세스할 수 없으면 SQL Server 에이전트 Windows 서비스는 자격 증명을 받을 수 없습니다. 이 경우 모니터링 이벤트를 최종 대상 테이블로 제대로 이동할 수 없기 때문에 새 데이터가 대시보드에 표시되지 않습니다.
SQL Server Express 작업
작업이 실패한 이유를 진단하는 단계는 SQL Server와 매우 비슷하지만 여기서는 SQL Server Express의 ASJobsTable 테이블을 확인해야 합니다. 이 테이블은 SQL Server Express 설치로 한정되므로 SQL Server 설치에는 없습니다. 이 테이블에서 특정 작업 행의 LastRunOn 및 LastRunSuccess 열 값을 보고 작업이 성공적으로 실행되었는지 또는 실패했는지를 확인할 수 있습니다.
SQL Server Express는 SQL Server 에이전트 Windows 서비스를 사용하지 않습니다. 대신 SQL Service Broker를 사용합니다. Service Broker 기능에는 시간 제한 값을 Microsoft_ApplicationServer_Monitoring_AutoPurge_<모니터링 DB 이름> 작업이 실행되도록 구성된 간격으로 설정하는 시간 기능이 있습니다. 이 시간 제한 간격이 발생하면 메시지가 SQL Server 작업 큐로 전송됩니다. 이 메시지는 Microsoft_ApplicationServer_Monitoring_AutoPurge_<모니터링 DB 이름> 작업의 일부로 실행되는 저장 프로시저를 활성화합니다. 그런 다음 SQL Server Express 저장소에 대해 자동 제거 기능을 실행합니다.
다음은 자동 저장소 제거 기능의 진행을 모니터링하기 위해 실행할 수 있는 일부 T-SQL 쿼리입니다.
현재 예약된 작업 표시:
SELECT * FROM ASJobsTable
dialog_timer 열(UTC 시간)을 보고 다음에 작업이 실행되도록 예약된 시간 확인:
SELECT * FROM sys.conversation_endpoints
현재 실행 중인 활성화 프로시저 수 표시:
SELECT * FROM sys.dm_broker_activated_tasks
아직 큐에 있는 메시지 수 확인 후 실행 중인 작업이 없으면 0 반환:
SELECT * FROM ASScheduledJobQueue
참고 항목
참조 항목
Windows Server AppFabric 대시보드 페이지
지속된 WF 인스턴스 페이지
추적된 WF 인스턴스 페이지
추적된 이벤트 페이지
2011-12-05