
현재 Server 2008 R2의 부하 분산 IIS 클러스터(NLB)에 응용 프로그램이 있습니다. 이 애플리케이션은 때때로 앱 풀을 비활성화할 정도로 실패하는 일부 레거시 데이터베이스 액세스 코드를 활용합니다.
앱 풀 상태의 변경 사항을 모니터링하기 위해 WMI 이벤트 감시자를 배치하고 싶습니다(다른 제안 환영). 앱 풀이 중지된 상태가 되면 다시 시작됩니다.
이는 새 코드를 푸시할 수 있을 때까지 임시 해결 방법이지만 개발/QA/UAT 주기를 거쳐야 합니다.
root\webadministration 네임스페이스에 ApplicationPool에 대한 WMI 클래스가 있지만 상태를 얻으려면 해당 개체에 대해 GetState 메서드를 호출해야 하므로 WMI 이벤트로 이를 관찰하는 방법을 잘 모르겠습니다.
답변1
내장된 이벤트 로그 모니터링을 사용하여 이 작업을 수행할 수 있습니다.
신속한 오류 방지로 인해 응용 프로그램 풀이 종료되는 경우 시스템 이벤트 로그에 다음과 같은 이벤트 ID 5002가 있을 수 있습니다.
"해당 응용 프로그램 풀을 제공하는 프로세스의 일련의 오류로 인해 'AppPoolName' 응용 프로그램 풀이 자동으로 비활성화되고 있습니다."
사용자 정의 이벤트 로그 트리거에 대한 예약된 작업을 만듭니다. 수동 XML 쿼리는 다음과 같습니다.
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-WAS'] and (EventID=5002)]]
and *[EventData[Data[@Name='AppPoolID'] and (Data='YourAppPoolFriendlyName')]]</Select>
</Query>
</QueryList>
예약된 작업 작업은 appcmd를 실행하는 스크립트를 실행하여 특정 응용 프로그램 풀을 다시 시작하는 것일 수 있습니다.
appcmd recycle apppool /?
Recycle application pool
APPCMD recycle APPPOOL <identifier> <-parameter1:value1 ...>
Recycles the specified application pool, recycling its the worker processes.
The exact application pool identifier must be provided and must resolve to an
existing application pool.
Supported parameters:
identifier (required)
Application pool name of the application pool to recycle
/apppool.name
Application pool name of the application pool to recycle (same as
identifier)
Examples:
appcmd recycle apppool "MyAppPool"
Recycle the application pool "MyAppPool".
동일한 서버에 여러 응용 프로그램 풀이 있는 경우 XML 필터를 구체화하여 응용 프로그램 풀 ID를 지정해야 할 수도 있습니다. 다음은 샘플 이벤트 XML 텍스트입니다.
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Microsoft-Windows-WAS" Guid="{524B5D04-133C-4A62-8362-64E8EDB9CE40}" EventSourceName="WAS" />
<EventID Qualifiers="49152">5002</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2012-10-01T19:41:43.000000000Z" />
<EventRecordID>408764</EventRecordID>
<Correlation />
<Execution ProcessID="0" ThreadID="0" />
<Channel>System</Channel>
<Computer>WEBSERVERNAME.company.com</Computer>
<Security />
</System>
- <EventData>
<Data Name="AppPoolID">YourAppPoolFriendlyName</Data>
<Binary />
</EventData>
</Event>
이벤트 로그 고급 필터링에 대한 정보:
https://blogs.technet.com/b/askds/archive/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer.aspx
APPCMD를 사용하여 애플리케이션 풀을 재활용합니다.
http://technet.microsoft.com/en-us/library/cc770764%28v=ws.10%29.aspx
답변2
참고로, 신속한 장애 조치 보호로 인해 실패하는 경우 살금살금 돌아다니는 대신 비활성화할 수 있습니다.