Como posso monitorar um pool de aplicativos do IIS 7.5 com WMI?

3

Atualmente, tenho um aplicativo em um cluster IIS com balanceamento de carga (NLB) no Server 2008 R2. Este aplicativo utiliza algum código de acesso ao banco de dados herdado que ocasionalmente falha o suficiente para desativar o pool de aplicativos.

Gostaria de instalar um observador de eventos WMI para monitorar a alteração no status do pool de aplicativos (outras sugestões são bem-vindas), que reiniciariam o pool de aplicativos se entrar em um estado parado.

Isso é para uma solução temporária até que o novo código possa ser enviado, mas isso precisa passar por um ciclo de Dev / QA / UAT.

Há uma classe WMI para o ApplicationPool no espaço de nome root \ webadministration. No entanto, para obter o status, é necessário chamar o método GetState nesse objeto, portanto, não tenho certeza de como assistir isso com um evento WMI.

Steven Murawski
fonte

Respostas:

3

Você pode fazer isso com o monitoramento interno do log de eventos.

Se o pool de aplicativos estiver sendo encerrado devido à proteção rápida contra falhas, provavelmente há uma identificação de evento 5002 como a seguinte no log de eventos do sistema:

"O pool de aplicativos 'AppPoolName' está sendo desativado automaticamente devido a uma série de falhas nos processos que atendem a esse pool de aplicativos."

Crie uma tarefa agendada para um acionador de log de eventos personalizado. Uma consulta XML manual ficaria assim:

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

Sua ação da tarefa agendada pode ser a de executar um script que executa o appcmd para reiniciar o pool de aplicativos específico.

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

Se você possui vários pools de aplicativos no mesmo servidor, pode ser necessário refinar o filtro XML para especificar a ID do pool de aplicativos. Aqui está um texto XML de evento de amostra:

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

Informações sobre filtragem avançada de log de eventos:
https://blogs.technet.com/b/askds/archive/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer.aspx

Use o APPCMD para reciclar um pool de aplicativos:
http://technet.microsoft.com/en-us/library/cc770764%28v=ws.10%29.aspx

Greg Askew
fonte
Obrigado, eu nem pensei em ativar o log de eventos!
Steven Murawski 1/1
3

Para sua informação, se estiver falhando por causa da proteção rápida contra failover, você poderá desativá-la em vez de ficar na ponta dos pés:

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

MajorRefatoração
fonte