WMI를 사용하여 IIS 7.5 응용 프로그램 풀을 모니터링하려면 어떻게 해야 합니까?

WMI를 사용하여 IIS 7.5 응용 프로그램 풀을 모니터링하려면 어떻게 해야 합니까?

현재 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

참고로, 신속한 장애 조치 보호로 인해 실패하는 경우 살금살금 돌아다니는 대신 비활성화할 수 있습니다.

https://stackoverflow.com/a/4802309/448129

관련 정보